router.post('/checkuser', function(req, res) {
var db = req.db;
var userEmail = req.body.useremail;
var password = req.body.password;
var collection = db.get('usercollection');
collection.find( { "email": userEmail }, function (err, doc) {
if (err || !doc) {
res.redirect("login");
} else {
res.redirect("userlist");
}
});
});
此代码应检查MongoDB中的登录凭据,如果值不匹配则返回false
。
但它总是重定向到userlist.jade
文件。有人可以解释一下原因吗?
答案 0 :(得分:1)
由于回调函数中的当前逻辑,您的代码始终重定向到userlist.jade
文件:由于 find()
方法返回游标,因此if语句会检查是否存在错误 OR 没有匹配文档的返回游标,因此变量doc是一个游标,无论是否匹配,总是返回。请改用findOne()
方法:
collection.findOne({"email": userEmail}, function(err, user) {
if( !err && user && user.password === password ) {
res.redirect("userlist");
}
else { res.redirect("login"); }
});