Zug*_*alt 4 middleware response node.js express
对于日志记录/调试,我想在发送到浏览器之前输出响应的前100个字符左右.我可以用中间件和响应对象做一些简单的事情吗?
理想情况下它是这样的:
app.use(function(req, res, next) {
console.log('Response snippet: '+((res.body || '').substr(0,100)));
next();
});
Run Code Online (Sandbox Code Playgroud)
除了响应没有正文,我无法弄清楚当前正在发回的主体在哪里通过.
更新:
彼得的回答有效,我想我会把我的中间件代码放在这里,以便为未来的观众点击一下:
App.use(function(req, res, next) {
var end = res.end;
res.end = function(chunk, encoding){
res.end = end;
if (chunk) {
console.log(chunk);
}
res.end(chunk, encoding);
};
next();
});
Run Code Online (Sandbox Code Playgroud)
因此,您需要挂钩响应输出API,这在中间件中并不像挂钩请求处理那样简单.最好的例子是connect的内置记录器中间件.它基本上是对req.end方法进行修补并将数据转发到其流上,然后继续调用实际req.end函数.您需要遵循此模式,这应该适用于非流式响应.
该模式可能最终只会为您提供最后一块数据(对于流式响应).如果是这样,你只需要猴子补丁res.write而不是,res.end你就可以访问第一个块.res.write一旦你记录了第一块,就可以取消猴子补丁.
| 归档时间: |
|
| 查看次数: |
2944 次 |
| 最近记录: |