我是express.js
的初学者,我想了解res.send
和res.write
之间的区别?
答案 0 :(得分:50)
<强> res.send 强>
实用解释
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();
答案 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()