关于node.js:Express中的res.send和res.write有什么区别?

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

我是express.js的初学者,并且试图了解res.sendres.write之间的区别?


重新发送

  • res.send仅在Express js中。
  • 为简单的非流式响应执行许多有用的任务。
  • 能够自动分配Content-Length HTTP响应标头字段。
  • 能够提供自动的HEAD和HTTP缓存新鲜度支持。
  • 实际说明

    • res.send只能调用一次,因为它等效于res.write + res.end()
    • 1
      2
      3
      app.get('/user/:id', function (req, res) {
          res.send('OK');
      });

有关更多详细信息expressjs.com/en/api.html

重新写入

  • 可以多次调用以提供身体的连续部分。
  • 1
    2
    3
    4
    5
    6
    response.write('<html>');
    response.write('<body>');
    response.write('Hello, World!');
    response.write('</body>');
    response.write('</html>');
    response.end();

有关更多详细信息,请参见nodejs.org/docs nodejs.org/en/docs/guides


res.send等效于res.write + res.end
因此,关键区别在于res.send只能被调用一次,而res.write可以被多次调用,后跟res.end

但除此之外,res.send是Express的一部分。它可以自动检测响应头的长度。
但是res.send()可能会导致内存激增,如果文件很大,我们的应用程序将介于之间。


没有在任何答案中指出的最重要的区别之一就是"排水"。

res.write可能返回true或false。截至文档:

Returns true if the entire data was flushed successfully to the kernel
buffer. Returns false if all or part of the data was queued in user
memory. 'drain' will be emitted when the buffer is free again.

因此,在执行res.write时,如果res.write返回false,则调用者应推迟写入,直到发出耗用事件为止。

所有这些都在res.send中自动处理。权衡是使用后者时必须要做的缓冲。


假设您需要显示两行,并使用res.send作为

1
2
res.send("shows only First Line")
res.send("won't show second Line")

然后只会显示第一行,而使用res.write,您可以灵活地编写多行,例如

1
2
3
res.write("Shows first line")
res.write("Shows second line")
res.send()