猫鼬保存一个空对象
Posted
技术标签:
【中文标题】猫鼬保存一个空对象【英文标题】:mongoose saves an empty object 【发布时间】:2017-04-27 16:48:19 【问题描述】:我在将数据保存到数据库时遇到问题,猫鼬保存了没有价值的空对象。使用平均堆栈。
控制器: 例如我发送一些“你好消息”
$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);
)
我的“hello”消息到达服务器,但 mongoose 保存了一个空对象
msg: "hello" // console.log(req.body);
"_id":"584ee18f169f902b7046e991","__v":0 // console.log(message);
我做错了什么??
【问题讨论】:
请添加您对Message
的定义/声明。
我已经更新了我的问题
req.body
不会在没有正文解析器的情况下正确填充。你添加了express-js body-parser吗?
是的,我做到了,upadet 主题
【参考方案1】:
您的请求正文与 Message
定义不匹配。 req.body
包含 msg
属性,但 Message
需要 message
属性。
我会在您的角度控制器中交换以下行:
data: JSON.stringify(msg: $scope.message)
到这里:
data: JSON.stringify(message: $scope.message)
如果您愿意,您还可以更新 Message
模型以拥有一个名为 msg
的属性,而不是更改您的角度代码。
【讨论】:
我偶然发现了一个类似的问题,发现 mongoose 会丢弃任何未在架构中定义的键值对。【参考方案2】:您可以使用 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))
)
【讨论】:
model.save() in mongoose 返回一个承诺,您应该使用 .then() 函数发送响应,请参阅我编辑的答案。如果这能解决您的问题,请告诉我 对象传播仅在stage 3中,不是ES6。 服务器返回扩展函数的语法错误,语法错误意外令牌...【参考方案3】:在正文中发送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);
)
【讨论】:
以上是关于猫鼬保存一个空对象的主要内容,如果未能解决你的问题,请参考以下文章