首页 > 解决方案 > 在 ExpressJS 中执行 res.send() 之前修改响应正文

问题描述

在我目前开发的应用程序中,它使用 Express。在我的情况下,我想在发送和修改它之前得到响应(出于 JWT 的目的)。在这个应用程序中,有十几个端点,我不想创建自己的函数sendAndSign()并替换res.send()代码中的任何地方。我听说有选项可以覆盖/修改res.send(...)方法的逻辑。

我发现了类似这个修改示例的内容,但在我的情况下这不起作用。是否有任何其他选项(可能使用某些插件)来管理此操作?

标签: javascriptnode.jsexpress

解决方案


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

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 中进行了测试,效果很好。


推荐阅读