如何在Node.js中“累积”一个原始stream?

目前我把所有的东西串成一个string,如下所示

var body = ''; res.on('data', function(chunk){ body += chunk; }); 

我怎样才能保留和积累的原始stream,所以我可以传递原始字节到期望字节而不是string的函数?

首先,检查这些函数实际上是否需要全部字节。 他们确实应该接受'data'事件,以便您可以按照接收到的顺序传递缓冲区。

无论如何,这里是一种暴力的方式来连接所有数据块缓冲区而不解码它们:

 var bodyparts = []; var bodylength = 0; res.on('data', function(chunk){ bodyparts.push(chunk); bodylength += chunk.length; }); res.on('end', function(){ var body = new Buffer(bodylength); var bodyPos=0; for (var i=0; i < bodyparts.length; i++) { bodyparts[i].copy(body, bodyPos, 0, bodyparts[i].length); bodyPos += bodyparts[i].length; } doStuffWith(body); // yay }); 

最好使用Buffer.concat – 要简单得多。 在节点v0.8 +中可用。

 var chunks = []; res.on('data', function(chunk) { chunks.push(chunk); }); res.on('end', function() { var body = Buffer.concat(chunks); // Do work with body. }); 

或者,您也可以使用像bl或concat-stream这样的node.js库:

 'use strict' let http = require('http') let bl = require('bl') http.get(url, function (response) { response.pipe(bl(function (err, data) { if (err) return console.error(err) console.log(data) })) })