What is the difference between res.send and res.write in express?

res.send

  • res.send is only in Express.js.
  • Performs many useful tasks for simple non-streaming responses.
  • Ability to automatically assigns the Content-Length HTTP response header field.
  • Ability to provides automatic HEAD & HTTP cache freshness support.
  • Practical explanation
    • res.send can only be called once, since it is equivalent to res.write + res.end()
    • Example:
      app.get('/user/:id', function (req, res) {
          res.send('OK');
      });
      

For more details:

  • Express.js: Response

res.write

  • Can be called multiple times to provide successive parts of the body.
  • Example:
    response.write('<html>');
    response.write('<body>');
    response.write('<h1>Hello, World!</h1>');
    response.write('</body>');
    response.write('</html>');
    response.end();
    

For more details:

  • response.write(chunk[, encoding][, callback])
  • Anatomy of an HTTP Transaction: Sending Response Body

res.send is equivalent to res.write + res.end So the key difference is res.send can be called only once where as res.write can be called multiple times followed by a res.end.

But apart from that res.send is part of Express. It can automatically detect the length of response header. But there may be be a chance of memory spike with res.send(), in case of large files, our application hangs in between .