I am trying to communicate send a database call from my express server over to my react-redux application but receive the below error:
postsActions.js:18 Error: Request failed with status code 404
at createError (createError.js:16)
at settle (settle.js:18)
at XMLHttpRequest.handleLoad (xhr.js:77)
My serer is running separately from the compiled react. The goal of the below is to do a GET rest call to grab the relevant information. I couldn't find the above error anywhere else online. I am then trying to display all of the grabbed information in a Card that is being rendered in a Map function in the center of the last code snippet. Any ideas would be greatly appreciated.
Here is the express server:
const PORT = 3001;
const express = require('express');
const SocketServer = require('ws').Server;
const WebSocket = require('ws');
const models = require("./models");
const sass = require("node-sass-middleware");
require('dotenv').config()
const app = express();
app.use('/public', express.static('public'))
.listen(PORT, '0.0.0.0', 'localhost', () => console.log(`Listening on ${ PORT }`));
models.sequelize.sync({ force: false }).then(() => {
app.get("/posts", (req, res) => {
models.post.findAll({ raw: true })
.then((response) => {
console.log(response)
res.send(response);
}).catch((err) => {
console.error(err);
});
});
});
This is my postActions.js
import * as types from './actionTypes';
import axios from 'axios';
const loadPostsActions = (post) => {
return {
type: types.LOAD_POSTS
};
}
export function loadPosts() {
return dispatch => {
return axios.get('/posts')
.then(post => {
console.log(post)
dispatch(loadPostsActions(post));
})
.catch((error) => {
console.log(error);
});
}
}
postsReducer.js
import * as types from '../actions/actionTypes';
import initialState from './initialState';
export default function postsReducer(state = initialState.posts, action) {
switch (action.type) {
case types.LOAD_POSTS:
return [
...state,
Object.assign({}, action.posts)
];
default:
return state;
}
}
Page where everything is rendering. The focus is on the map*ToProps functions at the bottom and map below Col id='article' in the center
import React, { Component } from 'react';
import { Row, Col, Slider, Slide } from 'react-materialize';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import '../../styles/App.css';
import * as postActions from '../../actions/postsActions';
import Articles from '../articles/Articles.jsx';
import initialState from '../../reducers/initialState.js';
class HomePage extends Component {
constructor(props) {
super(props);
this.state = {
posts: Object.assign({}, props.posts)
}
}
componentDidMount = () => {
console.log('this.state.posts', this.state.posts)
}
render() {
const overflow = {
'overflow': 'auto',
'overflowY': 'hidden',
'height': '400px'
}
return (
<main className='align'>
<Row>
<Col s={12} m={8} id='sliding-cards'>
<Slider>
<Slide
src="concert.jpg">
</Slide>
<Slide
src="Event-Management-Banner.jpg"
placement="left">
</Slide>
<Slide
src="event-planning-and-management.jpg"
placement="right">
</Slide>
</Slider>
</Col>
<Col s={12} m={4} id='articles' style={overflow}>
{
this.props.posts.map(({ post }) => {
return <Articles
post={post}
key={post.id}
/>
})
}
</Col>
</Row>
<br/>
<br/>
<br/>
<br/>
<br/>
<section className="container iconRow z-10">
<Row className="section">
<Col s={12} m={4} className="icons card-panel hoverable z-10">
<div className="icon-block">
<h2 className="center blue-text text-darken-2"><i className="material-icons">flash_on</i></h2>
<h5 className="center">Frozen Account</h5>
<p className="light">A series of things that can be said to tell you about how to solve your frozen account issue.</p>
</div>
</Col>
<Col s={12} m={4} className="icons card-panel hoverable z-10">
<div className="icon-block">
<h2 className="center blue-text text-darken-2"><i className="material-icons">group</i></h2>
<h5 className="center">Garnished Wages</h5>
<p className="light">A series of things that can be said to tell you about how to solve your garnished wages issue.</p>
</div>
</Col>
<Col s={12} m={4} className="icons card-panel hoverable z-10">
<div className="icon-block">
<h2 className="center blue-text text-darken-2"><i className="material-icons">settings</i></h2>
<h5 className="center">CRA Letters</h5>
<p className="light">A series of things that can be said to tell you about how to solve your CRA letters issue.</p>
</div>
</Col>
</Row>
</section>
</main>
);
}
}
function mapStateToProps(state, ownProps) {
return {
posts: state.posts
};
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators(postActions, dispatch)
};
}
export default connect(mapStateToProps, mapDispatchToProps)(HomePage);
I am calling the store in index.js like this (which I assume is pretty standard):
const store = configureStore();
store.dispatch(loadPosts());