Javascript 如何获取Node.js可写流的大小(HTTP服务器响应)

Javascript 如何获取Node.js可写流的大小(HTTP服务器响应),javascript,node.js,http,logging,Javascript,Node.js,Http,Logging,我想编写一个以公共(访问)日志格式打印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() {

我想编写一个以公共(访问)日志格式打印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() );
    });
});

为什么它不起作用?因为数据是由可读流而不是可写流发出的。
数据总是由可读流发出的。如果没有其他信息,那么总是会有猴子补丁
res.write
,如果响应长度对您如此重要。@mscdex是的,这是一个选项。与
Buffer.byteLength(数据,编码)
一起使用,这可能意味着性能的严重损失。您只需要为传递给
write()
的字符串调用该方法。缓冲区有自己的
.length
属性。请注意我问题下的注释:“数据”是由可读流而不是可写流发出的。响应实现可写流接口。var req=http.request(选项,函数(responseStream){responseStream.on('data',函数(chunk){/**/});});