如何获得Node.js可写入stream的大小(HTTP服务器响应)

我想用普通(Access)日志格式编写一个打印HTTP访问日志的中间件。 这种格式的最后一列是响应主体的大小(以字节为单位)。

如何确定由Node.js服务器产生的HTTP响应的大小?

不起作用的示例:

app.use(function(req, res, next) { var bytes = 0; res.on('data', function(chunk) { bytes += chunk.length; }); res.on('finish', function() { // `bytes` is the response size console.log(/* common log entry */); }); }); 

我已经做了一些研究,例如Hapi的共同日志总是发出-作为大小。 这是否意味着无法获得大小?

试试这个代码:

 app.use(function(req, res, next) { var data = []; res.on('data', function(chunk) { data.push(chunk); }); res.on('finish', function() { console.log( Buffer.concat(data).toString().length() ); }); });