Node.Js / Express – 简单的中间件来输出响应的前几个字符

对于日志logging/debugging,我想在发送给浏览器之前输出响应的前一百个字符。 有什么简单的我可以做中间件和响应对象来做到这一点?

理想情况是这样的:

app.use(function(req, res, next) { console.log('Response snippet: '+((res.body || '').substr(0,100))); next(); }); 

除了回应没有身体,我不能完全弄清楚现在的身体被送回的位置。

更新:

彼得的答案工作,我想我会把我的中间件代码在这里保存未来的观众点击:

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

所以你需要挂钩到响应输出API,这在中间件中并不像挂钩请求处理那样简单。 最好的例子是connect的内置logging器中间件 。 它基本上是对这个req.end方法进行猴子修补,并把这个数据转发到它的stream上,然后继续调用真正的req.end函数。 你需要遵循这种模式,这应该适用于非stream式响应。

这种模式可能最终只会给你最后一块数据(对于stream式响应的情况)。 如果是这样,你只需要猴子补丁res.write而不是res.end ,你会得到访问第一个块。 只要您logging了第一个块,就可以取消猴子补丁的res.write