在猫鼬中使用承诺进行护照身份验证

Using promises in mongoose for passport authentication

var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/user');

module.exports = function(passport){
  passport.use('local-signup', new LocalStrategy({
    usernameField: 'email',
    passwordField: 'password',
    passReqToCallback: true
  },
  function(req, email, password, done){

    User.findOne({'local.username': email}).exec()
      .then(function(user) {
        console.log(user);
        if(user){
          return done(null, false, {message: 'Username already taken!'});
        }
        else{
          var newUser = new User();

          newUser.local.username = email;
          newUser.local.password = password;

          return newUser.save();
        }
      })
      .then(function(user) {
        console.log('DEBUG DEBUG DEBUG');
        done(null, user);
      })
      .catch(function(err) {
        done(err);
      });
  }
  ));

  passport.serializeUser(function(user, done) {
    done(null, user.id);
  });

  passport.deserializeUser(function(userid, done) {
      User.findById(userid).exec()
        .then(function(user) {
          done(user);
        });
  });
};

在我的例子中,无论是否调用 return newUser.save(),总是打印调试日志。 是否可以使调试日志仅在调用 return newUser.save() 时打印?

顺便说一句,我正在使用 passportJS 进行身份验证和承诺,我用全局 es6 承诺覆盖猫鼬默认承诺。

你是说这样?对不起,如果有额外的括号或括号。我在文本框中编辑。 :(

   User.findOne({'local.username': email}).exec()
      .then(function(user) {

        if(user){
          return done(null, false, {message: 'Username already taken!'});
        }
        else{
          var newUser = new User();

          newUser.local.username = email;
          newUser.local.password = password;

          return newUser.save()
              .then(function(){
                  console.log('DEBUG DEBUG DEBUG');              
                  done(null, user);      
              })
        }
      })
      .catch(function(err) {
        done(err);
      });
  }
  ));

只需将您的调试消息放入 newUser.save()

中的函数中
User.findOne({'local.username': email}).exec()
  .then(function(user) {
    console.log(user);
    if(user){
      return done(null, false, {message: 'Username already taken!'});
    }
    else{
      var newUser = new User();

      newUser.local.username = email;
      newUser.local.password = password;

      return newUser.save(function() {
        console.log('SAVED!');
        console.log('DEBUG DEBUG DEBUG');
      });
    }
  })
  .then(function(user) {
    done(null, user);
  })