我在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);
});
答案 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)
。我的建议应该适合您,但随着您的流程变得更加复杂,我会研究承诺以解决任何进一步的异步问题。