mongoose保存一个空对象

时间:2016-12-12 18:35:26

标签: javascript angularjs node.js mongodb mongoose

我有一个将数据保存到db的问题,mongoose保存没有值的空对象。使用平均堆栈。

控制器: 例如,我发送一些"你好的消息"

    $http({
            method: 'POST',
            url: '/api/message',
            headers: {'Content-Type': 'application/json'},
            data: JSON.stringify({msg: $scope.message})      
        }).

        success(function(response) {
            console.log("Success " + JSON.stringify(response));
        }).

        error(function(response) {
            console.log("Error " + JSON.stringify(response));
        });

server.js

    var bodyParser = require('body-parser');
    app.use(bodyParser.urlencoded({'extended':'true'}));
    app.use(bodyParser.json());
    app.use(bodyParser.json({type: 'application/vnd.api+json'}));

    var message = mongoose.model('Message', {
    message: String
    })

    app.post('/api/message', function(req,res) {
    var message = new Message(req.body);
    message.save(function(err) {
        if(err) throw err;

        console.log(message);
    })

    res.status(200).send();
    console.log(req.body);
    })

我的"你好"消息到达服务器,但是mongoose保存一个空对象

{msg: "hello"} // console.log(req.body);
{"_id":"584ee18f169f902b7046e991","__v":0} // console.log(message);

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您可以在es6中使用spread函数将req.body分配给新的Message对象。你应该尝试修改你的server.js,如下所示

app.post('/api/message', function(req,res) {
var message = new Message({ ...req.body });
message.save()
.then(msg => res.status(200).send())
.catch(err => console.log(err))
})

答案 1 :(得分:1)

您的请求正文和Message定义之间存在不匹配。 req.body包含msg属性,但Message期待message属性。

我会在角度控制器中交换以下行:

data: JSON.stringify({msg: $scope.message})    

对此:

data: JSON.stringify({message: $scope.message})

如果您愿意,还可以更新Message模型,使其具有名为msg的属性,而不是更改角度代码。

答案 2 :(得分:0)

在身体

中发送data密钥对象时尝试此操作
 app.post('/api/message', function(req,res) {
    var message = new Message(req.body.data);
    message.save(function(err) {
        if(err) throw err;

        console.log(message);
    })

    res.status(200).send();
    console.log(req.body);
    })