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

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

最佳答案

不久前想出了解决这个问题的方法。如果有人需要做类似问题的事情,这里是代码:

// 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/

相关文章:

javascript - koa.js 注册后返回 404 "Not Found",而不是来自 ctx.body 的 token

javascript - jQuery:带有通知功能的超时/延迟?

javascript - 如何将 Rails current_user 传递给 AngularJS 工厂 API 调用?

javascript - d3fc.js在d3fc JavaScript中设置线系列的类

javascript - 带有 ID 的 DOM 树元素会成为全局属性吗?

javascript - 对象 #<IncomingMessage> 没有方法 'post'

node.js - IntelliJ IDEA 找不到 KoaJS 方法

mysql - NodeJS MySQL检查多个

node.js - 使用 socket.io-client 发送 cookie

node.js - Node Koa cors 不工作