node.js - 如何使用 ES6 在 Koa.js 中创建中间件

标签 node.js middleware koa.js

在最近使用 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/

相关文章:

javascript - Node.js 中的事件模块问题

node.js - twitter request_token 端点总是返回 "couldn' t 验证你”

java - 我的项目将部署在没有中间件的服务器上。这是什么意思?

clojure - 设置环防伪 CSRF header token

python - Django 中间件建议不要使用 request.POST 为什么?

node.js - 如何使用koajs下载csv文件

node.js - 如何修复 eslint 配置?

Javascript循环缓冲队列实现为 "FIFO queue"