我有一个将数据保存到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);
我做错了什么?
答案 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);
})