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

我试图发送一个电子邮件和密码服务器端,并检查是否存在这些值的文档(它所做的),但是当我从控制台login查询的results是空的。

以下是users集合中的文档:

 { "_id" : ObjectId("580bcf9874ae28934705c0fc"), "email" : "johndoe@gmail.com", "password" : "pass" } 

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

 {"email":"johndoe@gmail.com","password":"pass"} 

这里是我的代码(更新):

 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); } }); } }); } }); 

每次你传递一个有错误参数的callback函数时,你有责任检查错误是否被传递,如果是的话,处理它。

在你的代码中,你有两个这样的callback:

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

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

 if (err) { return console.log("error: " + err); } 
 users.findOne({'email' : userEmail , 'password':userPassword }, function(err, result) { console.log("result:"+result); });