2012-05-21 14 views

Antwort

8

Zunächst, überprüfen Sie, dass diese Funktionen eigentlich die Bytes alle auf einmal benötigen. Sie sollten wirklich 'data' Ereignisse akzeptieren, so dass Sie einfach die Puffer in der Reihenfolge weitergeben können, in der Sie sie erhalten.

Wie auch immer, hier ist ein Brute-Force-Weg, um alle Datenblock Puffer ohne Decodierung sie verketten:

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

Bessere Nutzung Buffer.concat - viel einfacher. Verfügbar in Knoten 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

Alternativ können Sie auch eine node.js Bibliothek wie bl oder Concat-Stream verwenden:

'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) 
    })) 
}) 
Verwandte Themen