Con el fin de apoyar a todo el espectro de posibles aplicaciones HTTP, HTTP API Node.js es de muy bajo nivel. Por lo tanto, los datos se reciben en bloque por fragmento no como un todo.
hay dos enfoques que puede tomar para este problema:
1) Recopilar datos a través de múltiples eventos de "datos" y anexar los resultados
juntos antes de imprimir la salida. Use el evento "end" para determinar
cuando finalice la secuencia y pueda escribir la salida.
var http = require('http') ;
http.get('some/url' , function (resp) {
var respContent = '' ;
resp.on('data' , function (data) {
respContent += data.toString() ;//data is a buffer instance
}) ;
resp.on('end' , function() {
console.log(respContent) ;
}) ;
}).on('error' , console.error) ;
2) utilizar un paquete de terceros para abstraer las dificultades que entraña la
recogiendo un flujo completo de datos. Dos paquetes diferentes proporcionan una API útil
para resolver este problema (¡es probable que haya más!): Bl (Buffer
List) y concat-stream; ¡elige tu opción!
var http = require('http') ;
var bl = require('bl') ;
http.get('some/url', function (response) {
response.pipe(bl(function (err, data) {
if (err) {
return console.error(err)
}
data = data.toString() ;
console.log(data) ;
}))
}).on('error' , console.error) ;
¿Por qué nodejs devuelve la respuesta fragmentada? ¿Hay algún uso para eso? –