如何使用ES6在Koa.js中创build中间件

我最近在使用Express的背景下,首次在Koa.JS中构build了一个应用程序。

我正在使用Babel在运行时编译代码,同时开发给我一些ES6 +代码。

我在Koa中定义了一个中间件,这个中间件是我想要使用的,并存储在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; 

我使用中间件的app.js入口文件部分:

 }); 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(); 

});