在路由中使用egg中间件时app必须手动传入
在参照文档router 中使用中间件中时发现的一个问题。 如果在路由中使用的话必须手动传入app,不然中间件中的app为undefined。
module.exports = (option, app) => {
return async function (ctx, next) {
const token = ctx.request.header.token;
if (!token) {
ctx.throw(401, 'token不存在,请登录');
}
console.log(app)
const tokenMatch = await app.jwt.verify(token, app.config.jwt.secret);
if(!tokenMatch){
ctx.throw(401, '身份过期,请重新登录');
}
const {id} = await app.jwt.decode(token);
const user = await ctx.service.user.find({id});
if(!user){
ctx.throw(401, '身份校验失败,用户不存在');
}else if(user.delete){
ctx.throw(401, '身份校验失败,用户已被封禁');
}{
app.print('身份校验成功');
ctx.state = user;
await next();
}
}
};
在router中使用时如果不传入
app
的话中间件中的app则为undefined
const isSignIn = app.middleware.isSignIn({},app);