CNode

在路由中使用egg中间件时app必须手动传入

分享
Llvyueyang发布于8 年前最后回复8 年前2 回复4789 浏览0 收藏

在参照文档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)

A
atian25#1·8 年前

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

L
lvyueyang#2·8 年前
引用 atian25你手动调用执行这个方法,那肯定要传全部入参啊。

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

来自酷炫的 CNodeMD

参与回复
登录后即可参与回复。登录