greuze
greuze

Reputation: 4398

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"?

Upvotes: 104

Views: 62602

Answers (3)

Konstantin Adamov
Konstantin Adamov

Reputation: 297

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

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

Upvotes: 12

Adiii
Adiii

Reputation: 60134

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().

Upvotes: 6

Jay
Jay

Reputation: 19907

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;
}

Upvotes: 130

Related Questions