【问题标题】:Mongoose promise with Bluebird error with passport js带有护照js的蓝鸟错误的猫鼬承诺
【发布时间】:2019-01-17 07:00:57
【问题描述】:

这是错误:

Warning: a promise was created in a handler at D:\Playgrounds\express-mongoose-es6-rest-api\config\passport.js:15:18 but was not returned from it

这是我的passport.js:

var JwtStrategy = require('passport-jwt').Strategy,
    ExtractJwt = require('passport-jwt').ExtractJwt;

// load up the user model
var User = require('../server/user/user.model');
var config = require('./config'); // get db config file

module.exports = function(passport) {
  var opts = {};
  opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
  opts.secretOrKey = config.jwtSecret;
  passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    User.findById(jwt_payload._id)
      .then(user => {
          return done(null, user);
      })
      .catch(err => {
          return done(err);
      })
  }));
};

但是,我怀疑主要问题是我的路由控制器(store.controller.js):

const Store = require('./store.model');

exports.add = async function(req, res) {

  const store = new Store({
    name: req.body.name,
    description: req.body.description,
    mobileNumber: req.body.mobileNumber,
    is_online: req.body.is_online,
    open_schedule: req.body.open_schedule,
    address: req.body.address,
    creator: req.user._id
  });

  try {
    return store.save()

   // I already have tried store.save().then(savedStore => return res.json(savedStore)), but still no help.
  }
  catch(e) {
    return res.status(403).send({success: false, msg: 'Unauthorized.'})
  }

}

如果我不使用 save(),而是直接返回一条消息(如 return res.json({msg: "Hi"})),它不会出错。
请帮帮我

【问题讨论】:

  • store.save() 是异步的吗?您可以简单地await 保存然后返回结果吗?我的意思是您在控制器中的主要功能定义为async

标签: express mongoose promise passport.js bluebird


【解决方案1】:

尝试在您的护照代码中的用户之前添加return。我认为错误是因为您没有返回外部承诺。

passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
    return User.findById(jwt_payload._id)    //here
      .then(user => {
          return done(null, user);
      })
      .catch(err => {
          return done(err);
      })
  }));

【讨论】:

    【解决方案2】:

    原来我忘记在我的模型预保存时调用 next()。
    我花了大约两天时间解决这个问题。
    所以,如果有人读到这里有同样的问题,请确保你调用 next()

    【讨论】:

      猜你喜欢
      • 2015-10-27
      • 2015-03-05
      • 2015-11-19
      • 2016-06-04
      • 1970-01-01
      • 2016-05-25
      • 2016-11-21
      • 2016-09-23
      • 2016-06-10
      相关资源
      最近更新 更多