mongoose(mongodb)奇怪的行为时,没有参数查询

我正在使用邮递员张贴到我的后端得到一个基于他的用户名和密码的用户。

每当用户名在表单中不存在时,用户仍然返回(我现在只有一个用户,并且返回)。

但是,如果我添加用户名字段,它将返回null,除非它是正确的用户名,即使它是空的。

这是代码:

User.findOne({ username: req.body.username }, function(err, user) { if(err) throw err; // prints null if username field is present and incorrect even if its empty // prints a user as json if the username field is not present console.log(user); if(!user) { res.json({ success: false, message: 'Authentication failed. User not found.' }); } 

我仍然在检查密码,所以不会有人发帖没有用户名字段,但它是非常奇怪的,并防止正确的错误信息显示。 为什么会发生?

你必须首先检查参数是否存在,否则req.body.username将等于undefined ,这将导致一个空的查询。

findOne用空查询将获取find的第一个文档,因为您可以使用空查询获取所有find的文档。

一个空string不会产生空的查询,这就是为什么你得到null (你没有任何用户作为用户名)。

TLDR:在构build查询之前检查每个参数的存在,并在构buildREST API时返回一些409 MissingParameterError