如何在多个条件下执行此findOne查询?或者替代方法(最好是同样简单的方法)如果不可能......
User.findOne({ 'email': email }, function (err, user) {
if (err) {
request.session.flash = {
type: "danger",
message: "Failed to log you in, error occurred."
};
response.redirect("/snippet/");
}
我试过了
User.findOne({ 'email': email, 'pwd': pwd }, function (err, user) {
和
User.findOne({ 'email': email $and 'pwd': pwd }, function (err, user) {
和
User.findOne({ 'email': email}, $and: {'pwd': pwd}, function (err, user) {
尝试使用mongoose promise系统(.exec()
)。 query内部的.findOne()
应该是一个单一的对象。
User
.findOne({email: email, pwd: pwd})
.exec(function(err, user){
...
});
旁注 - 看起来这是用于验证用户登录。仅查询电子邮件可能是一种更好的策略,然后尝试匹配密码以提供更多深度的错误响应,而不是一揽子“无效登录”类型响应。
User
.findOne({email: email}) //If not found, no user with that email exists
.exec(function(err, user){
var hashed_pwd = hashPassword(pwd);
if(!hashed_pwd === user.pwd){
//If they don't match, user entered wrong password
}
...
});
User.findOne({ 'email': email, 'pwd': pwd }, function (err, user) {
这个语法是正确的。如果这没有返回任何结果,则表示您没有匹配任何记录。
我的猜测是你的pwd
字段是哈希/加密的,你需要在你的pwd
变量上运行相同的哈希/加密才能做这个findOne
当mongoDB返回你的文档时,如果它没有找到Data
那么它将返回null
。你可以检查你的docs
是否为null然后回复其他页面。另一方面,如果docs
有数据响应下一页。
if(docs)
respond("your content");
else
respond("error page incorrect credentials")
我错误地认为它会创建一个异常err
,但它不是一个错误它只是一个null
数据。