MongoDB:findOne 返回 null 但文档存在于集合中

Spe*_* K. 9 mongodb node.js

我正在尝试在服务器端发送电子邮件和密码,并检查是否存在具有这些值的文档(确实存在),但是当我results从查询中控制台记录时,它为空。

这是users集合中的文档:

{
    "_id" : ObjectId("580bcf9874ae28934705c0fc"),
    "email" : "johndoe@gmail.com",
    "password" : "pass"
}
Run Code Online (Sandbox Code Playgroud)

这是我发送服务器端的内容:

{"email":"johndoe@gmail.com","password":"pass"}
Run Code Online (Sandbox Code Playgroud)

这是我的代码(更新):

mongo.connect('mongodb://localhost:27017', function (err, db) {

    if (err) {
    console.log("error: " + err); // logs nothing
    } else {

        var users = db.collection("users");
        var tasks = db.collection("tasks");

        app.post("/login", function(req, res) {

            var emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
            var userInDb;
            var userEmail = req.body.email;
            var userPassword = req.body.password;

            console.log(req.body.email); // logs "johndoe@gmail.com"
            console.log(req.body.password); // logs "pass"

            if (!userEmail || !userPassword) {
                return res.sendStatus(403);
            } else if ( !emailRegex.test(userEmail)) {
                return res.sendStatus(403);
            } else {

                users.findOne( { "email": userEmail, "password": userPassword }, function(err, results) {

                    console.log(results); // logs "null"

                    if(err) {
                      console.log("error: " + err); // logs nothing
                      res.sendStatus(403);
                    } else {
                      console.log("here"); // logs "here"
                      res.sendStatus(200);
                    }

                  });
              }
          });
       }
    });
Run Code Online (Sandbox Code Playgroud)

mar*_*mor 2

每次传递带有错误参数的回调时,您有责任检查是否传递了错误,如果是,则进行处理。

在您的代码中,您有两个这样的回调:

mongo.connect('mongodb://localhost:27017', function (err, db)
users.findOne( { "email": userEmail, "password": userPassword }, function(err, results)
Run Code Online (Sandbox Code Playgroud)

它们中的任何一个都可以返回一个可能解释问题的错误对象。将以下内容添加到每个回调的第一行:

if (err) {
  return console.log("error: " + err);
}
Run Code Online (Sandbox Code Playgroud)