在路由中使用egg中间件时app必须手动传入
发布于 7 年前 作者 lvyueyang 4251 次浏览 来自 分享

在参照文档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);
2 回复

你手动调用执行这个方法,那肯定要传全部入参啊。

@atian25 我这基本功还是不扎实😭😭😭

来自酷炫的 CNodeMD

回到顶部