Javascript 在ExpressJS中执行res.send()之前修改响应正文

Javascript 在ExpressJS中执行res.send()之前修改响应正文,javascript,node.js,express,Javascript,Node.js,Express,在我目前开发的应用程序中,它使用的是Express。在我的例子中,我希望在发送之前得到响应并修改它(为了JWT的目的)。在这个应用程序中,有十几个端点,我不想创建自己的函数,比如sendAndSign(),并替换res.send()。我听说有一个选项可以覆盖/修改res.send(…)方法的逻辑 我发现了类似的东西,但在我的情况下,这不起作用。是否有其他选项(可能使用一些插件)来管理此操作 您可以通过临时覆盖res.send截取Express中的响应正文: function convertDat

在我目前开发的应用程序中,它使用的是Express。在我的例子中,我希望在发送之前得到响应并修改它(为了JWT的目的)。在这个应用程序中,有十几个端点,我不想创建自己的函数,比如
sendAndSign()
,并替换
res.send()。我听说有一个选项可以覆盖/修改
res.send(…)
方法的逻辑


我发现了类似的东西,但在我的情况下,这不起作用。是否有其他选项(可能使用一些插件)来管理此操作

您可以通过临时覆盖
res.send
截取Express中的响应正文:

function convertData(originalData) {
  // ...
  // return something new
}

function responseInterceptor(req, res, next) {
  var originalSend = res.send;

  res.send = function(){
    arguments[0] = convertData(arguments[0]);
    originalSend.apply(res, arguments);
  };
  next();
}

app.use(responseInterceptor);

我在Node.js v10.15.3中进行了测试,效果很好。

您想要覆盖的到底是什么,为什么?您正在向响应标题添加数据吗?或者是您想将所有响应正文包装在其中的内容?可能是我想在发送响应之前获取响应,并使用jws对正文进行签名。@AlexandreSenges可能是重复的内容有关于完全重写函数的答案,但这不是我的目标。我只想修改它的主体和原始res.send()函数的使用。换句话说,我需要类似中间件的东西,但它应该适用于响应对象。