0

我正在使用 Express、Mongoose 和 PassportJS 制作一个基本的身份验证系统。我要做的是检查数据库中输入的用户名和密码是否已经存在于数据库中。下面是我的示例代码:

//Post: /signup
app.post('/signup', function (req, res) {
  var username = req.body.person.user.username;
  var password = req.body.person.user.password;

  Person.user.find({'username': username}, function (err, user) {
    if (err) {
      console.log(err.name);
    } else {
      console.log('User Found');
    }
  });
});

问题是它返回这种错误:

TypeError: Cannot call method 'find' of undefined

有人可以帮助我。

4

2 回答 2

3

正如 robertklep 指出的那样,您没有正确检查用户的存在。此外,由于用户名很可能是唯一的,因此您可以只使用 findOne(findOne() 返回单个对象,而 find() 也可能返回单个对象但会将其包装在数组中)。

Person.findOne({'username': username}, function (err, user) {
  if (err) {
     console.log(err.name);
     return;
  }
  if (!user)
    console.log('User not Found');
    return;
  }
  console.log('User found');

});
于 2013-04-04T15:31:54.113 回答
0

我想你正在寻找这个:

Person.find({ 'user.username' : username }, ...)

FWIW,如果没有错误调用回调,这并不意味着找到了用户,它只是意味着执行查询时没有错误。但是user仍然可以为空,这意味着查询没有任何匹配的结果。

于 2013-04-04T11:10:32.240 回答