在 express 中 res.send 和 res.write 有啥区别?
Posted
技术标签:
【中文标题】在 express 中 res.send 和 res.write 有啥区别?【英文标题】: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.send
和res.write
之间的区别?
【问题讨论】:
参考这个链接 - ***.com/questions/21749590/… 【参考方案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');
);
更多详情:
Express.js: Responseres.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]) Anatomy of an HTTP Transaction: Sending Response Body【讨论】:
为了澄清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
中自动处理。权衡是使用后者时必须做的缓冲。
【讨论】:
能否提供一些关于此的参考链接? Express 文档一应俱全:expressjs.com/en/api.html#res【参考方案4】:res.send
等价于res.write + res.end
所以关键区别在于res.send
只能调用一次,而res.write
可以多次调用,然后是res.end
。
但除此之外,res.send
是 Express 的一部分。它可以自动检测响应头的长度。
但是 res.send() 可能会导致内存峰值,如果文件很大,我们的应用程序会在两者之间挂起。
【讨论】:
以上是关于在 express 中 res.send 和 res.write 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
认识 Express 的 res.send() 和 res.end()
Nodejs 和 Express,使用来自工作线程的 res.send()
无法在vue端显示express res.send()自定义的错误信息。
node-express 错误:表示不推荐使用 res.send(status):请改用 res.sendStatus(status)