2012-05-21 16 views

Respuesta

8

En primer lugar, compruebe que estas funciones en realidad necesitan los bytes, todo de una vez. Realmente deberían aceptar los eventos 'data' para que pueda pasar los búferes en el orden en que los recibe.

De todos modos, aquí es una forma de fuerza bruta para concatenar todos los búferes de fragmentos de datos sin decodificar ellos:

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

Mejor uso Buffer.concat - mucho más simple. Disponible en el nodo 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. 
}); 
0

Alternativamente, también se puede utilizar como una biblioteca Node.js bl o concat-stream:

'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) 
    })) 
}) 
Cuestiones relacionadas