Запрос локальной стратегии NodeJS Mongoose Passport Mongodb выдает ошибку,

#node.js #mongoose #passport-local #passport.js

#node.js #mongoose #паспорт-локальный #passport.js

Вопрос:

У меня есть локальная стратегия Passport, пытающаяся запросить пользователя в mongodb:

 passport.use(new LocalStrategy(
    function(username, password, done){
      console.log("username and password is >>>>>", username, password);
      var findOne = Q.nbind(User.findOne, User);
      findOne({"username": username})
      .then(function(user){
        console.log("inside findone user>>>>>", err, user);

        if (!user) {
          return done( null, false, {messge: 'This user is not registered.'});
        }

        if (!user.comparePasswords(password)){
          return done(null, false, {message: 'This password is not correct'});
        }

        return done(null, user);
      })
      .fail(function(err){
        console.log("failed at here");
        return done(null, false, {message: "Server have difficulty"});
      })
    }
  ));
 

выводится сообщение «сбой здесь», что означает ошибку при доступе к mongodb. Тем не менее, я пишу очень похожую функцию в своей функции регистрации, и все работает нормально:

 exports.signup = function(req, res, next){
  console.log("hit the signup function");
  var findOne = Q.nbind(User.findOne, User);
  findOne({username: req.body.username})
  .then(function(user){
    console.log("user from query is >>>>>", user);
    if (!user){
      // user doesn't exist, create a new one
      var create = Q.nbind(User.create, User);
      var newUser = {username: req.body.username, password: req.body.password};
      return create(newUser);
    } else {
      // user already exist, redirect to sign in page
      res.send(409, 'already exist');
      //res.redirect('/signin');
    }
  })
  .then(function(user){
    res.json(200,user);
  })
  .fail(function(err){
    //next(err);
    console.log("error is >>>>", err);
    res.redirect('/signin');
  })
};
 

Я создал пользователя через регистрацию. таким образом, он выдаст мне 409, когда я попытаюсь зарегистрироваться у того же пользователя. Однако, когда я пытаюсь войти в систему с этим пользователем, локальная стратегия passport сообщает об ошибке доступа к mongodb. Есть мысли?
Вы можете взглянуть на репозиторий: https://github.com/7seven7lst/chatterApp
Конфигурацию паспорта можно найти в: https://github.com/7seven7lst/chatterApp/blob/master/lib/routes.js
а зарегистрироваться можно по адресу:
https://github.com/7seven7lst/chatterApp/blob/master/lib/controllers/user.js

Ответ №1:

 .then(function(user){
  console.log("inside findone user>>>>>", err, user);
 

Ошибка выдается, потому что err это не определено.

Если вы регистрируете фактическую ошибку, которую fail функция:

 .fail(function(err){
  console.log("failed at here", err);
  return done(null, false, {message: "Server have difficulty"});
})
 

вы увидите:

 ReferenceError: err is not defined
    at /Users/dting/chatterApp/lib/routes.js:16:49