节点js(Express)在mongodb操作中冻结

时间:2014-03-07 20:58:34

标签: node.js mongodb express

我有一个接受post请求的代码,并将一个字符串插入mongodb数据库。

app.post('/post_comment', function(req, res) {
    Predicts.findOne({'id': parseInt(req.body.id)}, function(err, card) {
        console.log('')
        console.log(card)
        console.log('')
        if (card) {
        Users.findOne( { 'userid': req.user ? req.user.userid : undefined }, function(err, user) {
            console.log(user)
            console.log('')
            Predicts.update({'_id': card._id},
                    {$push : {comments: {login: user ? user.login : 'anonymous', content: '123'}}},
                    function(err, card1) {throw(err);
                             console.log('---')
                              console.log(card1);
                             })
        })
        }})
    res.redirect('back')
    })

此代码导致node进程完全冻结。只有重新启动node进程才有帮助。 调试显示,前四个console.log操作按预期工作,但console.log('---')不会发生。这意味着Predicts.update不起作用,但它确实有效,我可以在数据库中看到此请求的结果。什么是故障?

更新:我已将Predicts.update替换为Predicts.find,但结果仍然相同。 Collback不起作用,node进程冻结。

Upd2:我确定node没有冻结,但只返回mongodb不需要的内容。

1 个答案:

答案 0 :(得分:1)

根据node-mongodb文档,update函数如下所示:

collection.update(criteria, objNew, options, [callback]);

因此,如果您想使用回调,则应该是第4个参数,第3个应该是您的选项(例如multi:true)或{}