Nodejs - 从MongoDB检查空对象并解析它

时间:2017-02-16 03:44:38

标签: node.js mongodb express login mongojs

我试图从NodeJS(使用ExpressJS)和MongoDB实现一个简单的登录机制。我使用MongoJS进行数据库连接。我正在使用$and:来查看字段中的字段是否匹配。

function authenticate(req,res){

username  = req.body.username;
password = req.body.password;
db.users.find({$and :[{username:username},{password:password}]},function(err,doc){

   if(( Object.keys(doc).length === 0 && doc.constructor === Object) === false){
       res.send("Invalid login")
   } else {
       doc.forEach(function(doc){
           console.log(doc.firstname)
       })

   }
})
}

我检查doc contan是否为空对象(这意味着用户名和密码不匹配)并告诉页面显示登录无效。如果文档确实包含匹配的用户名和密码,请console.log() ging用户的名字...

上面的代码不起作用......我做错了什么?

提前致谢...

1 个答案:

答案 0 :(得分:1)

我认为,如果你只是简单地运行一个限制为一个结果的用户名查询并查看返回的doc是否包含结果,而不是做你正在做的事情会更有意义。从那里我们将检查发布的密码是否与从数据库查询的密码匹配,如果是,我们将console.log用户名。此外,您应该首先对其进行哈希处理,而不是查询密码。详细了解HERE

function authenticate(req,res){
    username  = req.body.username;
    password = req.body.password;
    db.users.findOne({"username":username}, function(err, doc) {
        if (err) throw err;
        if(doc && doc._id){
            if(password==doc["password"]){
                console.log("Your first name is: "+doc.firstname)
            }else{
                res.send("Invalid login")
            }
        }else{
            res.send("Invalid login")
        }
    });
}