在mongo集合中保存记录时无限循环

时间:2018-01-11 06:46:43

标签: node.js mongodb express mongoose mean-stack

我正在向创建新消息的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
            });
        });
    });
});

消息是在消息收集中创建的,但是一旦到达突出显示的行,服务器就会进入无限循环并停止。

以下是服务器显示的错误:

enter image description here

1 个答案:

答案 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); //问题已修复