在最近使用 Express 后,我第一次在 Koa.JS 中构建应用程序。
我在开发时使用 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();
});
关于node.js - 如何使用 ES6 在 Koa.js 中创建中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45594187/