我正在向创建新消息的API发出POST请求,一旦创建它,在promise回调中,我也将消息保存在用户集合中。
请参阅此行 - user.messages.push(result); //问题在这里
router.post('/', function (req, res, next) {
var decoded = jwt.decode(req.query.token);
User.findById(decoded.user._id, function(err, user){
if(err){
return res.status(500).json({
title: 'An error occured',
error: err
});
}
var message = new Message({
content : req.body.content,
user : user //add the user to messages as a link
});
message.save(function(err, result) {
if(err){
return res.status(500).json({
title: 'An error occured',
error: err
});
}
user.messages.push(result); //problem here
user.save();
res.status(201).json({
message: 'Saved message',
obj: result
});
});
});
});
消息是在消息收集中创建的,但是一旦到达突出显示的行,服务器就会进入无限循环并停止。
以下是服务器显示的错误:
答案 0 :(得分:0)
请参阅此行 - user.messages.push(result); //问题在这里
结果包含完整的user
对象,而不是userId
,它应该保存在消息中。
user
对象的结构如下
{"_id" : ObjectId("5a570976d911c65410b93dc9"), "firstName" : "Rachit", "lastName" : "Garg", "password" : "$2a$10$24G4Gii0s5ityhtTkeK1m.8C2tPJIyKFbsnMSHCtcWkwz85kmr6iS", "email" : "rachigarg@gmail.com", "messages" : [ ObjectId("5a57099dd911c65410b93dcb") ], "__v" : 35 }
message
对象的结构如下。
{ "_id" : ObjectId("5a57099dd911c65410b93dcb"), "content" : "one more edits", "user" : ObjectId("5a570976d911c65410b93dc9"), "__v" : 0 }
user
应包含用户创建的messageIds
数组。
message
应仅包含创建消息的userId
。
由于结果再次包含整个user
对象而不包含userId
,因此导致无限循环。
以下是修复:
user.messages.push(result_id); //问题已修复