MongoDB,mongoose - 从GET请求返回的数据与模式不匹配

时间:2016-03-28 17:49:56

标签: node.js mongodb mongoose

我是mongoDB和mongoose的新手。我正在努力写下我的第一个api。这是我的架构的样子:

var movementSchema = new mongoose.Schema({
    name: String,
    difficulty: String,
    joints: Array
});

以下是我的帖子请求:

.post(function(req, res) {

    var movement = new Movement({
        name: req.body.name,
        difficulty: req.body.difficulty,
        joints: req.body.joints
    });


    // save the movement and check for errors
    movement.save(function(err) {
        if (err) res.send(err);

        res.json({ message: 'Movement created!' });
    });
})

然而,看起来我的请求对象是空的,并且从GET上的服务器返回的内容如下所示:

{
    "_id": "56f963f699d121ec35bbe91f",
    "__v": 0,
    "joints": []
}

我无法弄清楚我做错了什么。非常感谢所有帮助。

2 个答案:

答案 0 :(得分:2)

您的Movement集合中的其他记录似乎与您在Mongoose中定义的架构不匹配。您要么从集合中删除那些与模式不匹配的记录,要么将模式更改为不严格。

  

Schema Option Strict

     

strict选项(默认情况下启用)确保传递给我们的模型构造函数的未在我们的模式中指定的值不会保存到db。

var movementSchema = new mongoose.Schema({
    name: String,
    difficulty: String,
    joints: Array
}, { strict: false} );

编辑空请求正文

在Express中获取空请求正文时,需要注意两件事。

  1. 确保bodyParser.json()已在Express中注册,因此正确解析了req.body对JSON请求的解析。
  2. 确保在请求服务时,您已将Content-Type标题设置为application/json

答案 1 :(得分:0)

如果 require.body 为空,请确保使用body-parser。应该在路由之前使用它。

app.use(bodyParser.json())

body-parser,然后使用路由。

app.use('/api',api);