NodeJS / ExpressJS envía respuesta de gran cantidad de datos en 1 flujo

Estoy creando un prototipo de una aplicación utilizando la API nativa mongo rest donde Node devuelve unos 400K de json. Uso lo siguiente para hacer que solicite a la API nativa de Mongo y devuelva el resultado:

http.request(options, function(req) { req.on('data', function(data) { console.log(data,data.rows); response.send( 200, data ); } ); } ) .on('error', function(error) { console.log('error\t',error); response.send(500, error); } ) .end(); 

Cuando http://localhost:8001/api/testdata través de curl, la respuesta es correcta (tanto lo que se envía a la consola de Node desde console.log como lo que recibe curl). Pero cuando lo golpeo a través de ajax en mi aplicación, el flujo está … interrumpido, incluso los data enviados a la consola de Node (Terminal) son impares: tiene múltiples EOF, y la respuesta Red> para la llamada en las herramientas de desarrollo de Chrome termina en la primera EOF.

Otra cosa extraña: los data parecen:

 { "offset": 0, "rows": [ … ] } 

pero en Nodo ni en el lado del cliente (angular) puedo hacer referencia a data.rows (devuelve indefinido). typeof data devuelve [object Object] .

EDITAR Los encabezados de solicitud para curl y angular (según lo informado por Node) son:

 req.headers: { 'x-action': '', 'x-ns': 'test.headends', 'content-type': 'text/plain;charset=utf-8', connection: 'close', 'content-length': '419585' } 

EDITAR Comprobé los encabezados de respuesta en angular y curl directamente (en lugar de desde Node), y hay un desacuerdo (la misma salida de curl y angular directamente en lugar de desde nodo):

 access-control-allow-headers: "Origin, X-Requested-With, Content-Type, Accept" access-control-allow-methods: "OPTIONS,GET,POST,PUT,DELETE" access-control-allow-origin: "*" connection: "keep-alive" content-length: "65401" // <---------------- too small! content-type: "application/octet-stream" // ^-- if i force "application/json" // with response.json() instead of response.send() in Node, // the client displays octets (and it takes 8s instead of 0s) date: "Mon, 15 Jul 2013 18:36:50 GMT" etag: ""-207110537"" x-powered-by: "Express" 

La http.request () de Node devuelve datos en trozos para la transmisión (sería bueno si lo declararan explícitamente). Por lo tanto, es necesario escribir cada fragmento en el cuerpo de la respuesta de Express, escuchar el final de la solicitud http (que no está realmente documentada) y luego llamar a response.end() para finalizar la respuesta.

 var req = http.request(options, function(res) { res.on( 'data', function(chunk) { response.write(chunk); } ); res.on( 'end', function() { response.end(); } ); } ); req.on('error', function(error) { … }); req.end(); 

Donde la response es la respuesta de Express, la solicitud inicial del cliente (curl o llamada ajax de angular).