【问题标题】:What is the difference between res.send and res.write in express?在 express 中 res.send 和 res.write 有什么区别?
【发布时间】:2017-11-25 07:10:53
【问题描述】:

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

【问题讨论】:

标签: node.js express npm


【解决方案1】:

res.send

  • res.send 仅在 Express.js 中。
  • 为简单的非流式响应执行许多有用的任务。
  • 能够自动分配Content-Length HTTP 响应头字段。
  • 能够提供自动 HEAD 和 HTTP 缓存新鲜度支持。
  • 实用说明
    • res.send 只能调用一次,因为它相当于res.write + res.end()
    • 示例:
      app.get('/user/:id', function (req, res) {
          res.send('OK');
      });
      

更多详情:


res.write

  • 可以多次调用以提供身体的连续部位。
  • 示例:
    response.write('<html>');
    response.write('<body>');
    response.write('<h1>Hello, World!</h1>');
    response.write('</body>');
    response.write('</html>');
    response.end();
    

更多详情:

【讨论】:

  • 为了澄清res.write 一点点,这是OutgoingMessage 类从节点http 模块提供的方法。 Express.js response 类继承 OutgoingMessage 类。下面是write方法的定义:OutgoingMessage.prototype.write = function write(chunk, encoding, callback) { return write_(this, chunk, encoding, callback, false); };
  • 另一个区别是,send 自动设置编码为 UTF-8
  • 哪个性能更好,写入结果会更好的首次绘制时间?
【解决方案2】:

假设你有两行需要显示并且你使用 res.send as

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

【讨论】:

    【解决方案3】:

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

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

    如果整个数据都成功刷新到内核,则返回 true 缓冲。如果全部或部分数据在用户中排队,则返回 false 记忆。 'drain' 将在缓冲区再次空闲时发出。

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

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

    【讨论】:

    【解决方案4】:

    res.send 等价于res.write + res.end 所以关键区别在于res.send 只能调用一次,而res.write 可以多次调用,然后是res.end

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

    【讨论】:

      猜你喜欢
      • 2015-06-15
      • 1970-01-01
      • 2017-08-20
      • 1970-01-01
      • 1970-01-01
      • 2014-06-02
      • 1970-01-01
      相关资源
      最近更新 更多