NodeJS / Mongoose:通过AJAX发送JSON时的ValidationError

时间:2018-03-12 12:16:38

标签: json node.js ajax mongoose

填写input之后,我想通过AJAX将它以JSON格式发送到服务器。但是,在发送数据时,服务器会显示ValidationError: Post validation failed: text: Path 'text' is required.。当我在服务器上console.log(req.body.post)时,会显示undefined。我试图找出错误但仍然无法解决的问题。

HTML

<form action="/main/messages" id="homePagePostForm">
   <input type="text" class="form-control" id="homePagePostInput" name="post[text]">
   <input type="button" id="homePagePostInputButton" style="display:none">
</form>

AJAX

$.ajax({
    url: "/main/home",
    type: "POST",
    contentType: "application/json",
    data: JSON.stringify({
        post:{"text": $("#homePagePostInput").val()}
    });
})

的NodeJS /猫鼬

router.post("/main/home", function(req, res){
    User.findById(req.user._id, function(err, currentUser){
        if(err){
            console.log(err);
        } else {
            //it says undefined for req.body.post
            console.log(req.body.post)
            Post.create(req.body.post, function(err, post){
                if(err){
                    console.log(err);
                    //request made it ways here, and ends here. 
                    res.redirect("/main/home");
                } else {
                    ......

发布模式

var postSchema = mongoose.Schema({
    text: {type: String, required: true},
    date: Date,
    author: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User"
    },
    likes: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "User"
        }
    ],
    comments: [
        {
            type: mongoose.Schema.Types.ObjectId,
            ref: "Comment"
        }
    ]
});

1 个答案:

答案 0 :(得分:0)

该错误与mongoose无关,因为req.body.post未定义。

仔细检查您的网络标签,查看POST主体是否实际设置并以正确的格式发送。如果是,则问题出在您的API中,请仔细检查URL和所需的参数。

此外,似乎您的POST API被称为/main/home,但您使用redirect到同一网址/main/home,如果初始调用成功,将重新启动在没有POST的情况下调用此API。

这些只是解决问题的一些提示。