Must res.end() be called in express with node.js?

I have several Express applications, and I see that in some modules, res.end() is called at the end of a request handler (after res.send or res.json), while in others, it isn't called.

For example:

app.get('/test', function(req, res) {
    res.send('Test', 200);
});

or:

app.get('/test', function(req, res) {
    res.send('Test', 200);
    res.end();
});

Both cases work, but I'm afraid about leaks or running out file descriptors or something like that, when I run many requests. Which one is "more correct"?


The answer to your question is no. You don't have to call res.end() if you call res.send(). res.send() calls res.end() for you.

Taken from /lib/response.js, here is the end of the res.send() function:

  //. . .
  // respond
  this.end(head ? null : body);
  return this;
}

one example where you must call end() function is when you send buffer as a file to download.

res.write(buffer);
res.end();

res.end([data] [, encoding])

Ends the response process. This method actually comes from Node core, specifically the response.end() method of http.ServerResponse. Use to quickly end the response without any data.

If you need to respond with data, instead use methods such as res.send() and res.json().