对客户端进行响应前的Express中间件
Express middleware before response is carried out to client
我需要修改模块发送给客户端的响应数据,因为模块使用 res.send
我似乎无法找到一种方法让我在数据执行到之前修改数据客户.
是否有任何类型的 middleware/event 可用于捕获 res.send
并在其执行前修改数据?
我知道 router.use
存在,但它是在 router.post
函数之前调用的,而不是在 res.send
发送到客户端之前调用的。所以我需要某种中间件,它在 router.post
函数完成后但在向客户端发送任何内容之前被调用。
您缺少代码,因此很难回答您的问题,但您可以使用
Express 4.0:
router.use('/path', function (req, res) {
// Modify req
});
路线上的 [=21=].use
将在继续实际路线之前对其进行解析,因此如果有人提交了表单或其他内容,它将在进入 [=14= 之前点击 .use
] 或 .get
或者你也可以
Express 4.0:
app.use(function (req, res) {
// Modify Req
if (req.body.hasOwnProperty('some_form_name')) {
// Do Somthing
}
});
这是一回事,但它会在每个路由的每个请求之前调用。
不确定这是否能回答您的问题,但我认为这可能是您要找的东西?
那么你可以覆盖发送函数:
app.use(function (req, res) {
var send = res.send;
res.send = function (body) { // It might be a little tricky here, because send supports a variety of arguments, and you have to make sure you support all of them!
// Do something with the body...
send.call(this, body);
};
});
如果你想支持的不仅仅是调用send
(比如调用end
方法),那么你必须重写更多的函数...
您可以查看 connect-livereload 如何将脚本添加到任何 html 输出。
来自here的另一个解决方案:
expressApp.use(function (req, res, next) {
req.on("end", function () {
console.log('on request end');
});
next();
});
我需要修改模块发送给客户端的响应数据,因为模块使用 res.send
我似乎无法找到一种方法让我在数据执行到之前修改数据客户.
是否有任何类型的 middleware/event 可用于捕获 res.send
并在其执行前修改数据?
我知道 router.use
存在,但它是在 router.post
函数之前调用的,而不是在 res.send
发送到客户端之前调用的。所以我需要某种中间件,它在 router.post
函数完成后但在向客户端发送任何内容之前被调用。
您缺少代码,因此很难回答您的问题,但您可以使用
Express 4.0:
router.use('/path', function (req, res) {
// Modify req
});
路线上的 [=21=].use
将在继续实际路线之前对其进行解析,因此如果有人提交了表单或其他内容,它将在进入 [=14= 之前点击 .use
] 或 .get
或者你也可以
Express 4.0:
app.use(function (req, res) {
// Modify Req
if (req.body.hasOwnProperty('some_form_name')) {
// Do Somthing
}
});
这是一回事,但它会在每个路由的每个请求之前调用。
不确定这是否能回答您的问题,但我认为这可能是您要找的东西?
那么你可以覆盖发送函数:
app.use(function (req, res) {
var send = res.send;
res.send = function (body) { // It might be a little tricky here, because send supports a variety of arguments, and you have to make sure you support all of them!
// Do something with the body...
send.call(this, body);
};
});
如果你想支持的不仅仅是调用send
(比如调用end
方法),那么你必须重写更多的函数...
您可以查看 connect-livereload 如何将脚本添加到任何 html 输出。
来自here的另一个解决方案:
expressApp.use(function (req, res, next) { req.on("end", function () { console.log('on request end'); }); next(); });