带有护照js的蓝鸟错误的猫鼬承诺

Posted

技术标签:

【中文标题】带有护照js的蓝鸟错误的猫鼬承诺【英文标题】:Mongoose promise with Bluebird error with passport 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 【参考方案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()

【讨论】:

以上是关于带有护照js的蓝鸟错误的猫鼬承诺的主要内容,如果未能解决你的问题,请参考以下文章

蓝鸟承诺:循环猫鼬结果

猫鼬承诺与蓝鸟和打字稿

带有异步操作的猫鼬游标

嵌套的猫鼬填充了承诺

UserModel 不可分配给 Document | 类型的参数nulll [带有 Typescript 的猫鼬]

Redis - 在带有承诺的事务中插入数组中的值(蓝鸟)