首页 > 解决方案 > 数据没有进入 MERN 的数据库

问题描述

数据没有进入 MERN 的数据库 --- 一切看起来都很好,并且状态为 200 并警告“已创建帖子”,但数据没有进入我的数据库。如何调试此错误。我已经尝试了所有解决方案。至少告诉我这个错误的可能原因。这对我有很大帮助。

架构

const mongoose = require("mongoose");

const postSchema = new mongoose.Schema({
title: {
    type: String,
    required: true,
},
description: {
    type: String,
    required: true,
},
picture: {
    type: String,
    required: false,
},
username: {
    type: String,
    required: true,
},
category: {
    type: String,
    required: false,
},
createDate: {
    type: Date,
    default: Date.now,
},
})

const post = new mongoose.model('post', postSchema);

module.exports = post;

服务器路由器

const express = require("express");
const router = express.Router();
const post = require("../schema/post-schema");
router.post('/create', async(req,res) => {
try{
    console.log(req.body);
    const { title, description, picture, username, category, createDate } = req.body;
    const blogData = new post({
        title:title,
        description:description,
        picture:picture,
        username:username,
        category:category,
        createDate:createDate
    });
    
    console.log("user " + blogData);
    const blogCreated = await blogData.save();
    if(blogCreated)
        {
            return res.status(200).json({
                message: "blog created successfully"
            })
        }
    console.log("post "+post);
} catch(error){
    res.status(500).json('Blog not saved '+ error)
}
})
 module.exports = router;

客户档案

const initialValues = {
title: '',
description: '',
picture: 'jnj',
username: 'Tylor',
category: 'All',
createDate: new Date()
}
const CreateView = () => {
const [post, setPost] = useState(initialValues);
const history = useHistory();
const handleChange = (e) => {
    setPost({...post, [e.target.name]:e.target.value});
}

const savePost = async() => {
    try {   
    const {title, description, picture, username, category, createDate} = post;
    console.log(post);
    const res = await fetch('/create', {
        method: "POST",
        headers: {
            "Content-Type":"application/json" 
        },
        body: JSON.stringify({title, description, picture, username, category, createDate})
    })
    console.log(post);
    console.log("res is  "+ res);        
    if(res.status===200 )
    {
        window.alert("post created");
        console.log(res);           
    }
    }
    catch(e){
        console.log(`save post error ${e}`);
    }
}

const classes = useStyles();
const url = "https://images.unsplash.com/photo-1543128639-4cb7e6eeef1b?ixid=MnwxMjA3fDB8MHxzZWFyY2h8Mnx8bGFwdG9wJTIwc2V0dXB8ZW58MHx8MHx8&ixlib=rb-1.2.1&w=1000&q=80";
return (
    <>
    <Box className={classes.container}>
    <form method="POST">
        <img src={url} alt="banner" className={classes.image}/>
        <FormControl className={classes.form}>
            <AddIcon fontSize="large" color="action" />
            <InputBase placeholder="Title" className={classes.textfield} name="title" onChange={(e)=>handleChange(e)}/>
            <Button variant="contained" color="primary" onClick={()=>savePost()}>Publish</Button>
        </FormControl>
        <TextareaAutosize aria-label="empty textarea" placeholder="Write here..." className={classes.textarea} name="description" onChange={(e)=>handleChange(e)}/>
    </form>
    </Box>
    </>
)
}

export default CreateView;

标签: mern

解决方案


我认为问题是您检查状态 200,因此您的服务器无论如何都会返回状态 200 作为响应。您必须检查您的服务器端,并检查是否返回代码 400 或其他任何故障。


推荐阅读