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

Node.Js/Express-输出响应的前几个字符的简单中间件,node.js,express,response,middleware,Node.js,Express,Response,Middleware,对于日志记录/调试,我希望在将响应发送到浏览器之前输出大约前100个字符。我可以用中间件和响应对象来做一些简单的事情吗 理想的情况是: app.use(function(req, res, next) { console.log('Response snippet: '+((res.body || '').substr(0,100))); next(); }); 除了响应没有主体之外,我不能完全弄清楚要发回的当前主体在哪里传递 更新: Peter的答案奏效了,我想我应该把我的中

对于日志记录/调试,我希望在将响应发送到浏览器之前输出大约前100个字符。我可以用中间件和响应对象来做一些简单的事情吗

理想的情况是:

app.use(function(req, res, next) {
    console.log('Response snippet: '+((res.body || '').substr(0,100)));
    next();
});
除了响应没有主体之外,我不能完全弄清楚要发回的当前主体在哪里传递

更新:

Peter的答案奏效了,我想我应该把我的中间件代码放在这里,以节省未来观众的点击:

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,这在中间件中不如连接到请求处理那么简单。最好的例子是。它基本上修补了
req.end
方法,并将数据转发到其流中,然后继续调用real
req.end
函数。您需要遵循此模式,这对于非流式响应应该可以很好地工作


该模式可能最终只提供最后一块数据(对于流式响应的情况)。如果是这样的话,您只需使用monkey patch
res.write
而不是
res.end
,就可以访问第一个块。登录第一个区块后,只需取消monkey patch
res.write

您的app.js中有app.use(express.bodyParser())吗?应该在将路由声明为app.configure的一部分之前。不要使用bodyParser,而是将其添加到中。它似乎为req提供了一个身体,但不为res提供身体。我想在我发出的东西上达到顶峰。我不想;我不知道是否有对此的内置Express支持。我怀疑您需要查看res.render()之后的响应,但我不知道是否有任何挂钩。您可以在
res.on('data',callback)
上进行侦听,但如果您使用的是
express.compress()
,那么它将是二进制的。如果这只是为了开发,就不能启用压缩。