express.js - 如何拦截 response.send() / response.json()

新手上路,请多包涵

假设我有多个地方可以调用 response.send(someData) 。现在我想创建一个全局拦截器,我在其中捕获所有 .send 方法并对 someData 进行一些更改。 express.js 有什么办法吗? (钩子、监听器、拦截器……)?

原文由 pleerock 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 929
2 个回答

您可以如下定义中间件(从这个 答案 中获取和修改)

 function modifyResponseBody(req, res, next) {
    var oldSend = res.send;

    res.send = function(data){
        // arguments[0] (or `data`) contains the response body
        arguments[0] = "modified : " + arguments[0];
        oldSend.apply(res, arguments);
    }
    next();
}

app.use(modifyResponseBody);

原文由 Sami 发布,翻译遵循 CC BY-SA 3.0 许可协议

对于那些在谷歌上发现的人,基于最佳答案:

 app.use((req, res, next) => {
    const oldSend = res.send
    res.send = function(data) {
        console.log(data) // do something with the data
        res.send = oldSend // set function back to avoid the 'double-send'
        return res.send(data) // just call as normal with data
    }
    next()
})

原文由 cpri 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题