Send data by parts in node.js express

I was searching the web and documentation for node.js express module and it seems there is no way to send data by parts. I have a file rendered not very fast and I want to send parts of it before everything is rendered.

So here are my questions:

  1. Is there a method on response to send data by parts?
  2. What does response.end()?
  3. If there is no way to send data by parts - what is the rationale behind? I would say it looks more blocking than non-blocking if that's true. Browser can load information faster if data is given earlier.

Sample simplified code:

app.get(..) {
  renderFile(file, function(data) {
    response.send(data);
  });
  response.end();
)

This piece of code sends only the first chunk of data. I checked - data is given correctly and callback is called more than one time.

Of course I can append data to the one variable and then write response.send(data); but I don't like this approach - it is not the way it should work.

The response object is a writable stream. Just write to it, and Express will even set up chunked encoding for you automatically.

response.write(chunk);

You can also pipe to it if whatever is creating this "file" presents itself as a readable stream. http://nodejs.org/api/stream.html

Express extends Connect which extends HTTP I believe. Looking at the HTTP API, it seems that what you are looking for is response.write, which takes a chunk of data to send as a response body. I then believe you can use response.end on the end signal.

The response object can be written to. In your case, the following would be a solution:

renderFile(file, function(data) {
  response.send(data);
});
response.end();

If you have the opportunity to get the file as a stream this can be streamlined further:

file.getReadableStream().pipe(response);