为什么回调不能使用mongoose findOne方法?

时间:2018-06-10 18:06:55

标签: node.js express mongoose

在节点应用程序中使用Expressjs和mongoose。我正在尝试实施passportjs身份验证。 当我调用新的LocalStrategy并传递用户名和回调函数来获取用户名(如果存在)时,回调函数没有执行。要验证我打印的控制台消息是回调但是消息不是展示。为什么会发生这种情况以及我如何解决它?

这是路由器(index.js)

router.post('/login', (req, res, next) => {
  console.log("Login POst called")
  passport.authenticate('local', {
    successRedirect: '/',
    failureRedirect: '/login',
    failureFlash: 'true'
  })(req, res, next);
}); 

passport.use(new LocalStrategy(
  (username, password, done)=>{
    console.log("Local Strategy called")
    User.getUserByUsername(username, (err, user)=>{
      console.log("this message should display in callback"); // this message is not displaying
      if(err) throw err;
      if(!user){
        return done(null, false, {message: "No user found"});
    }

    User.comparePassword(password, user.password, (err, isMatch)=>{
      if(err) throw err;
      if(isMatch){
         return done(null, user);
      }
      else{
        return done(null, false, {message: "Wrong Password"});
      }
    });
  });
  }
));

这是模型(User.js)

module.exports.getUserByUsername = (username, callback)=>{
    console.log("GetUsername called")
    const query = { username: username }
    console.log(query);
    User.findOne(query).exec(callback);
}

module.exports.getUserById = (id, callback)=>{
    console.log("GetId called")
    User.findId(id).exec(callback);
}

0 个答案:

没有答案