在ExpressJS中执行res.send()之前修改响应主体

时间:2019-06-18 12:14:21

标签: javascript node.js express

在我当前开发的应用程序中,它正在使用Express。就我而言,我想在发送响应之前得到响应并进行修改(出于JWT的目的)。在此应用程序中,有十二个端点,我不想创建自己的函数,例如sendAndSign()并在代码中的任何地方替换res.send()。我听说有选项可以覆盖/修改res.send(...)方法的逻辑。

我发现了类似example of modifying的内容,但对我来说这是行不通的。还有其他选项(也许使用某些插件)来管理此操作吗?

2 个答案:

答案 0 :(得分:1)

如果该库执行了其声明的工作,

https://github.com/richardschneider/express-mung

答案 1 :(得分:1)

您可以通过临时替代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中进行了测试,效果很好。