如何创建可修改响应主体并在链中最后运行的Koa2中间件?

时间:2019-06-12 09:02:56

标签: javascript node.js koa2

我有一个Koa2应用程序,该应用程序在不同的路线上呈现模板。我想介绍一个中间件,它将以某种方式修改渲染的模板,我需要它成为其他中间件链中的最后一个。有什么方法可以强制使用Koa2触发响应之前在 last 中应用某些中间件,而无需修改已经定义的路由?

我尝试了以下代码:

// 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之前引入任何其他中间件,则它不是链中的最后一个。

是否有可能实现描述的行为?

1 个答案:

答案 0 :(得分:0)

前一段时间想出了解决此问题的方法。如果有人需要做类似问题的事情,这里是代码:

// modification middleware
const mw = async function(ctx, next) {
  await next();
  ctx.body = ctx.body.toUpperCase();
}

app.middleware.unshift(mw);

基本上可以从外部访问应用程序对象的middleware成员。使用标准数组方法unshift,可以强制将其首先添加到中间件数组中,然后将所需的中间件添加到中间件数组中,而Koa将其视为链中的最后一个中间件。