在 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.sendres.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: Response

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

Express 函数中的“res”和“req”参数是啥?

Node个人学习----express