mongoose保存一个空的物体

我有一个与数据保存到数据库的问题,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); 

什么即时做错了?

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

我会交换angular度控制器中的以下行:

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

对此:

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

如果你愿意的话,你也可以更新Message模型来获得一个名为msg的属性,而不是改变你的angular码。

您可以在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)) }) 

试试这个,因为你正在发送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); })