我有一个Koa2应用程序,可以在不同的路线上渲染模板。我想介绍一个中间件,它将以某种方式修改渲染的模板,我需要它成为其他中间件链中的最后一个。是否有任何方法可以强制使用Koa2在触发响应之前最后应用某些中间件,而无需修改已经定义的路由?
我试过下面的代码:
// modification middleware
app.use(async function (ctx, next) {
await next();
ctx.body = ctx.body.toUpperCase();
})
// template rendering
app.use(async function (ctx, next) {
const users = [{ }, { name: 'Sue' }, { name: 'Tom' }];
await ctx.render('content', {
users
});
});
app.listen(7001);
它可以按预期工作,但是如果在
modification
之前引入了任何其他中间件,则它不是链中的最后一个。是否有可能实现描述的行为?
最佳答案
不久前想出了解决这个问题的方法。如果有人需要做类似问题的事情,这里是代码:
// modification middleware
const mw = async function(ctx, next) {
await next();
ctx.body = ctx.body.toUpperCase();
}
app.middleware.unshift(mw);
基本上,可以从外部访问应用程序对象的
middleware
成员。使用标准数组方法unshift
,可以强制在中间件数组中首先添加所需的中间件,Koa将其视为链中的最后一个。
关于javascript - 如何创建将修改响应主体并在链中最后运行的Koa2中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56558386/