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

标签 javascript node.js koa2

我有一个 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 middleware
const mw = async function(ctx, next) {
  await next();
  ctx.body = ctx.body.toUpperCase();
}

app.middleware.unshift(mw);

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

关于javascript - 如何创建 Koa2 中间件来修改响应主体并在链中最后运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56558386/

相关文章:

javascript - 如何保存页面对象以供以后使用?

node.js - AWS CodeDeploy AfterInstall 脚本正在从代码部署代理目录运行

javascript - Nodejs - 如何在单独的文件中分组和导出多个函数?

javascript - Javascript 中类扩展声明之间的区别

javascript - Chart.js 未启动

javascript - 在 AngularJS 中放置 Cordova/Phonegap 事件的最佳位置

javascript - Webpack - 当导入未定义/未声明时发出警告

javascript - 快速 GET 路线不起作用

javascript - Koa-mount/路由器+socket.io集成

javascript - koa路由器不工作,发送404