为什么我从查询中获得两个回复?

时间:2017-02-10 17:21:24

标签: node.js mongodb node-mongodb-native

我试图检查MongoDb中是否存在用户。 在我发现用户存在并发送响应后,由于未知原因,它记录了用户不存在的情况

app.post("/login", function(req, res) {

    var userName = req.body.userName;
    var pass = req.body.pass;
    console.log('')
    console.log('Try to login:')
    console.log('userName: ' + userName);
    console.log('pass: ' + pass);

    if(req.body.userName && req.body.pass) 
    {

        db.collection("customers").find({first_name:userName}, function(err, docs) {
        docs.each(function(err, doc) 
        {
          if(doc) {
            //console.log(doc);
            console.log('User Exsists')
            res.send('YES');
          }
          else {
            console.log('User Does Not Exsists')
            res.end();
          }
        })});
    }  
    else
    {
        console.log('NO')
        res.send('NO')  
    }

});

输出:(第一个用户不存在,第二个用户存在)

Try to login:
userName: sdlkj
pass: lkj
User Does Not Exsists

Try to login:
userName: sivan
pass: lkj
User Exsists
User Does Not Exsists

为什么在我发现用户存在后,我找到了另一个未找到的日志行?

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您使用each迭代结果游标,findOne最后一次调用其回调,参数值为null,表示游标已耗尽。

相反,您可能希望在此处使用http://blog.nuget.org/20130814/nuget-2.7-release-candidate.html

db.collection("customers").findOne({first_name: userName}, function(err, doc) {
  if(doc) {
    console.log('User Exsists')
    res.send('YES');
  }
  else {
    console.log('User Does Not Exsists')
    res.end();
  }
});