带有护照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的蓝鸟错误的猫鼬承诺的主要内容,如果未能解决你的问题,请参考以下文章