Node.js 如何使用ES6在KOA.JS中创建中间件 我从最近使用Express ./P>的背景开始,第一次在Koa.JS建立应用程序。

Node.js 如何使用ES6在KOA.JS中创建中间件 我从最近使用Express ./P>的背景开始,第一次在Koa.JS建立应用程序。,node.js,middleware,koa.js,Node.js,Middleware,Koa.js,我正在使用Babel在运行时传输代码,同时开发wirting ES6+代码给我带来的好处 我在膝关节炎中遇到一些问题,定义了我想使用并存储在CTX对象上的中间件,以便以后在我的应用程序中使用。我不确定哪里出了问题,因为我可以在Express中执行类似的操作(尽管不是在ES6代码中) 这是我的中间件: const Config = require('../../Config'); import jwt from 'jsonwebtoken'; const JWTController = ()

我正在使用Babel在运行时传输代码,同时开发wirting ES6+代码给我带来的好处

<>我在膝关节炎中遇到一些问题,定义了我想使用并存储在CTX对象上的中间件,以便以后在我的应用程序中使用。我不确定哪里出了问题,因为我可以在Express中执行类似的操作(尽管不是在ES6代码中)

这是我的中间件:

const Config = require('../../Config');

import jwt from 'jsonwebtoken';

const JWTController = () => {
    return {
        async generateToken(tokenVars) {
            const secretKey = Config.auth.secret;
            const claims = {
                sub: tokenVars.userid,
                iss: Config.auth.issuer,
                account: tokenVars.accountId,
                permissions: ''
            };

            let token = await jwt.sign(claims, secretKey);
            return token;
        },

        async decodeClaims(token) {
            const decodedToken = jwt.decode( token, {complete: true} );
            return decodedToken;
        }
    }
};

export default JWTController;
});
mongoose.connection.on('error', (err) => {
    console.log(err);
});

app.use(bodyParser());
app.use(serve(appRoot + '/../client'));
app.use(serve(appRoot + '/../client/assets'));

app.use((ctx, next) => {
    ctx.JWTController = JWTController;
    next();
});
以及我的app.js条目文件中使用中间件的部分:

const Config = require('../../Config');

import jwt from 'jsonwebtoken';

const JWTController = () => {
    return {
        async generateToken(tokenVars) {
            const secretKey = Config.auth.secret;
            const claims = {
                sub: tokenVars.userid,
                iss: Config.auth.issuer,
                account: tokenVars.accountId,
                permissions: ''
            };

            let token = await jwt.sign(claims, secretKey);
            return token;
        },

        async decodeClaims(token) {
            const decodedToken = jwt.decode( token, {complete: true} );
            return decodedToken;
        }
    }
};

export default JWTController;
});
mongoose.connection.on('error', (err) => {
    console.log(err);
});

app.use(bodyParser());
app.use(serve(appRoot + '/../client'));
app.use(serve(appRoot + '/../client/assets'));

app.use((ctx, next) => {
    ctx.JWTController = JWTController;
    next();
});
有人知道为什么这不起作用吗


谢谢

将中间件定义更改为

app.use(async (ctx, next) => {
 ctx.JWTController = JWTController;
 await next();

}))

或者相反,从
next()更改原始中间件
返回下一步()