res.send和res.write在express中有什么区别?

时间:2017-06-22 06:45:43

标签: node.js express npm

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

4 个答案:

答案 0 :(得分:50)

<强> res.send

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

    • res.send只能调用一次,因为它等同于res.write + res.end()
    • 实施例

      app.get('/user/:id', function (req, res) {
          res.send('OK');
      });
      

了解更多详情expressjs.com/en/api.html

<强> res.write

  • 可多次调用以提供身体的连续部位。
  • 实施例

    response.write('<html>');
    response.write('<body>');
    response.write('<h1>Hello, World!</h1>');
    response.write('</body>');
    response.write('</html>');
    response.end();
    

有关详细信息,请nodejs.org/docs
nodejs.org/en/docs/guides

答案 1 :(得分:5)

res.send相当于res.write + res.end 因此,关键区别是res.send只能调用一次,因为res.write可以被多次调用,然后是res.end

但除此之外res.send是Express的一部分。它可以自动检测响应头的长度。 但是res.send()可能存在内存峰值,如果是大文件,我们的应用程序就会挂起。

答案 2 :(得分:2)

任何答案中未指出的最重要区别之一是“排水”。

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

  

如果将全部数据成功刷新到内核,则返回true   缓冲。如果所有或部分数据已在用户中排队,则返回false   记忆。缓冲区再次释放时将发出“漏极”。

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

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

答案 3 :(得分:0)

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

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

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

res.write("Shows first line")
res.write("Shows second line")
res.send()