如何在节点js和mongoDB中验证有效用户

时间:2014-08-22 12:24:14

标签: node.js mongodb

我在nodejs和mongodb中验证用户名和密码时遇到问题。下面是我试过的代码。密码验证无效。我在这里做错了什么......

server.get('/login', function(req, res)
{
var status=""
user.findOne({name: req.query.username}, function(err, users) 
{
    if( err || !users) 
    {
        console.log("No users found");
        status="failed"
    }   
    else 
    {
           if(password==req.query.password)
            {
                status="success"
            }
            else
            {
                status="failed"
            }
    }   

});
res.send(status);
});

1 个答案:

答案 0 :(得分:2)

Node.js在异步event loop上运行,这意味着您的代码必须以您可能始终认为的方式运行(同步)。要克服这个问题,有几个选择:回调或承诺。承诺通常是首选路线,我建议有几个图书馆:bluebird(非常棒)或async(我没有经常使用它,但很多人更喜欢它)。

如果您现在想在没有承诺的情况下工作,可以通过这种方式解决问题:

user.findOne({name: req.query.username}, function(err, users) {
    if( !err && users && password === req.query.password ) {

        res.send({ status: 'success' });

    }

    else { res.send({ status: 'failed' }); }

});

同样,代码无法工作的原因是因为事件循环在数据库查询解析之前到达res.send(status)。我的建议应该适合您,但随着您的流程变得更加复杂,我会研究承诺以解决任何进一步的异步问题。