mongodb AxiosError:无法加载资源:net::ERR_CONNECTION_REFUSED

wz1wpwve  于 2023-10-16  发布在  Go
关注(0)|答案(2)|浏览(152)

我还在学习react,我正在用MERN Stack构建一个应用程序。我试着从表单提交一个帖子,它应该将数据发送到MongoDB Atlas数据库,并在页面上呈现帖子。但是没有数据被发送到数据库,也没有呈现在页面上。我真的不知道问题是从哪里来的,但我有一个axios错误和一个404错误的Chrome浏览器控制台。我不知道是Axios没有连接到后端,还是我的代码有问题。
Form.js

  1. import React, { useState, useEffect } from 'react';
  2. import { TextField, Button, Typography, Paper } from '@material-ui/core';
  3. import FileBase from 'react-file-base64';
  4. import { useDispatch, useSelector } from 'react-redux';
  5. import useStyles from './styles';
  6. import { createPost, updatePost } from '../../actions/posts';
  7. //GET POST CUURENT ID
  8. const Form = ({ currentId, setCurrentId }) => {
  9. const [postData, setPostData] = useState({creator: '', title: '', message: '', tags: '', selectedFile: ''});
  10. const post = useSelector((state) => currentId ? state.posts.find((p) => p._id === currentId) : null);
  11. const classes = useStyles();
  12. const dispatch = useDispatch();
  13. useEffect(() => {
  14. if(post) setPostData(post);
  15. }, [post])
  16. const handleSubmit = (e) => {
  17. e.preventDefault();
  18. if(currentId) {
  19. dispatch(updatePost(currentId, postData));
  20. } else {
  21. dispatch(createPost(postData));
  22. }
  23. clear();
  24. }
  25. const clear = () => {
  26. setCurrentId(null);
  27. setPostData({creator: '', title: '', message: '', tags: '', selectedFile: ''});
  28. }
  29. return (
  30. <Paper className={classes.paper}>
  31. <form autoComplete='off' noValidate className={`${classes.root} ${classes.form}`} onSubmit={handleSubmit}>
  32. <Typography variant='h6'>{ currentId ? 'Edit' : 'Create' } Your Expressions</Typography>
  33. <TextField name='creator' variant='outlined' label='Creator' fullWidth value={postData.creator} onChange={(e) => setPostData({ ...postData, creator: e.target.value })} />
  34. <TextField name='title' variant='outlined' label='Title' fullWidth value={postData.title} onChange={(e) => setPostData({ ...postData, title: e.target.value })} />
  35. <TextField name='message' variant='outlined' label='Message' fullWidth value={postData.message} onChange={(e) => setPostData({ ...postData, message: e.target.value })} />
  36. <TextField name='tags' variant='outlined' label='Tags' fullWidth value={postData.tags} onChange={(e) => setPostData({ ...postData, tags: e.target.value })} />
  37. <div className={classes.fileInput}><FileBase type="file"multiple={false} onDone={({base64}) => setPostData({ ...postData, selectedFile: base64 })} />
  38. </div>
  39. <Button className={classes.buttonSubmit} variant='contained' color='primary' size='large' type='submit' fullWidth>Submit</Button>
  40. <Button variant='outlined' color='primary' size='large' onClick={clear} fullWidth>Clear</Button>
  41. </form>
  42. </Paper>
  43. );
  44. }
  45. export default Form;

Server/index.js

  1. import express from 'express';
  2. import bodyParser from 'body-parser';
  3. import mongoose from 'mongoose';
  4. import cors from 'cors';
  5. import postRoutes from './routes/posts.js'
  6. const app = express();
  7. app.use('/posts', postRoutes);
  8. app.use(bodyParser.json({ limit: "30mb", extended: true}));
  9. app.use(bodyParser.urlencoded({ limit: "30mb", extended: true}));
  10. app.use(cors());
  11. app.use('/posts', postRoutes);
  12. const CONNECTION_URL = 'mongodb+srv://Akan-
  13. modanwealth:[email protected]/?retryWrites=true&w=majority';
  14. const PORT = process.env.PORT || 5000;
  15. mongoose.connect(CONNECTION_URL).then(()=>{console.log('...')})
  16. .then(() => app.listen(PORT, () => console.log('Server running on port:
  17. ${PORT}')))
  18. .catch((error) => console.log(error.message));

App.js

  1. import React, { useState, useEffect } from 'react';
  2. import { Container, AppBar, Typography, Grow, Grid } from '@material-ui/core';
  3. import { useDispatch } from 'react-redux';
  4. import { getPosts } from './actions/posts';
  5. import Posts from './components/Posts/Posts';
  6. import Form from './components/Form/Form';
  7. import expressions from './images/expressions.jpg';
  8. import useStyles from './styles';
  9. const App = () => {
  10. const [currentId, setCurrentId] = useState(null);
  11. const classes = useStyles();
  12. const dispatch = useDispatch();
  13. useEffect(() => {
  14. dispatch(getPosts);
  15. }, [currentId, dispatch]);
  16. return (
  17. <Container maxWidth="lg">
  18. <AppBar className={classes.appBar} position="static" >
  19. <Typography className={classes.heading} variant="h2" align="center">Expressions</Typography>
  20. <img className={classes.image} src={expressions} alt="expressions" height="80" width="60" />
  21. </AppBar>
  22. <Grow in>
  23. <Container>
  24. <Grid container justifyContent="space-between" alignItems="stretch" spacing={3}>
  25. <Grid item xs={12} sm={7}>
  26. <Posts setCurrentId={setCurrentId} />
  27. </Grid>
  28. <Grid item xs={12} sm={4}>
  29. <Form currentId={currentId} setCurrentId={setCurrentId} />
  30. </Grid>
  31. </Grid>
  32. </Container>
  33. </Grow>
  34. </Container>
  35. );
  36. }
  37. export default App;

api/index.js

  1. import axios from 'axios';
  2. const url = 'http://localhost:5000/posts';
  3. export const fetchPosts = () => axios.get(url);
  4. export const createPost = (newPost) => axios.post(url, newPost);
  5. export const updatePost = (id, updatedPost) => axios.patch(`${url}/${id}`,
  6. updatedPost);

routes/posts.js

  1. import express from 'express';
  2. import { getPosts, createPost, updatePost} from
  3. '../controllers/posts.js';
  4. const router = express.Router();
  5. router.get('/', getPosts);
  6. router.get('/', createPost);
  7. router.patch('/:id', updatePost)
  8. export default router;

Here is the error on the browser console

4c8rllxm

4c8rllxm1#

所以有几件事。首先,您可能在MongoDB URI中暴露了密码,所以我会立即更改它。第二,你为什么要运行app.use("/posts", postRoutes);两次?
最后,它看起来像你发布到/posts,但你没有指定之后的路由。你没有共享你的路由,但是从外观上看,/posts使用了你的路由文件夹中的所有路由。你需要给予一个特定的路线,比如/posts/create之类的。否则,你只是说用你所有的中间件向对象发出POST请求,而node.js不知道使用哪个中间件。

nkhmeac6

nkhmeac62#

确保您的API正在运行。npm start

相关问题