express.js – cómo interceptar response.send () / response.json ()

Digamos que tengo varios lugares donde llamo response.send(someData) . Ahora quiero crear un único interceptor global donde capture todos los methods .send y realice algunos cambios en someData . ¿Hay alguna forma en express.js? (ganchos, oyentes, interceptores, …)?

Puede definir un middleware como a continuación (tomado y modificado a partir de esta respuesta )

 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); 

Sí, esto es posible. Hay dos forms de hacerlo, una es usar una biblioteca que proporciona la intercepción, con la capacidad de ejecutarla en function de una condición específica: https://www.npmjs.com/package/express-interceptor

La otra opción es simplemente crear su propio middleware (por expreso) de la siguiente manera:

 function modify(req, res, next){ res.body = "this is the modified/new response"; next(); } express.use(modify);