如何在多个条件下执行此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) {
答案 0 :(得分:3)
尝试使用mongoose promise系统(.exec()
)。 .findOne()
内的query应该是单个对象。
User
.findOne({email: email, pwd: pwd})
.exec(function(err, user){
...
});
Sidenote - 看起来这是用于验证用户登录。这可能是一个更好的策略,只查询电子邮件,然后尝试匹配密码,以提供更多深度的错误响应,而不是一揽子'无效登录'类型响应。
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
}
...
});
答案 1 :(得分:1)
User.findOne({ 'email': email, 'pwd': pwd }, function (err, user) {
这种语法是正确的。如果这不会返回任何结果,则表示您没有匹配任何记录。
我的猜测是,您的pwd
字段已进行哈希/加密,并且您需要在pwd
变量上运行相同的哈希/加密才能执行此操作findOne
答案 2 :(得分:0)
当mongoDB返回您的文档时,如果找不到Data
,它将返回null
。
您可以检查您的docs
是否为空,然后使用其他页面进行响应。
另一方面,如果docs
有数据,则在下一页进行响应。
if(docs)
respond("your content");
else
respond("error page incorrect credentials")
我犯了一个错误,认为它将创建一个异常err
,但这并不是一个错误,它只是一个null
数据。