npm res.send和res.write有什么区别?

xxls0lw8  于 5个月前  发布在  其他
关注(0)|答案(6)|浏览(56)

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

vmdwslir

vmdwslir1#

res.send

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

更多详情:

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

更多详情:

  • response.write(chunk[,encoding][,callback])
  • HTTP事务剖析:发送响应正文
ssm49v7z

ssm49v7z2#

res.send等价于res.write + res.end,所以关键的区别是res.send只能被调用一次,而res.write可以被调用多次,后面是res.end
但除此之外,res.send是Express的一部分。它可以自动检测响应头的长度。但res.send()可能有内存峰值的机会,在大文件的情况下,我们的应用程序挂起。

l3zydbqr

l3zydbqr3#

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

res.write可以返回true或false。根据文档:
如果整个数据已成功刷新到内核缓冲区,则返回true。如果所有或部分数据已在用户内存中排队,则返回false。当缓冲区再次空闲时,将发出'drain'。
因此,在执行res.write时,如果res.write返回false,则调用者应该推迟写入,直到drain事件发出。
所有这些都是在res.send中自动处理的,代价是使用后者时必须做的缓冲。

gcuhipw9

gcuhipw94#

我也是一个初学者。但我观察到的是,如果你只写res.write(),页面将持续加载,直到你写res.end()。而如果你写res.send(),就不需要res.end()res.send()基本上它同时做res.write()res.end()

ktca8awb

ktca8awb5#

假设您有两行需要显示,您使用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()

wydwbb8l

wydwbb8l6#

res.send()相当于res.write()+ res.end()。基本上,res.send用于express,res.write+res.end()用于bare metal node方式发送数据。

相关问题