javascript - response.write - 它是从可写流还是从 http.ServerResponse 调用写入?

标签 javascript node.js

我是 Node 的新手。 在这样的设置中

server.on('request', function(request, response) {
  // the same kind of magic happens here!
});

我假设 responsehttp.ServerResponse 的一个实例。 但是我读过的一篇教程说:http.ServerResponseWritableStream

现在可写流和http.ServerResponse都有写方法; herehere .

我的问题是,当我调用 response.write 时,会调用哪个版本的 write?一个来自 http.ServerResponse 还是一个来自可写流?

最佳答案

http.ServerResponse 实现了 stream.Writable 接口(interface)的一个版本,但不继承其实际实现。因此,当您调用 response.write() 时,您调用的是 http.ServerResponse.write() 而不是 stream.Writable.write() .

Class: http.ServerResponse

The response implements, but does not inherit from, the Writable Stream interface.

在内部,http.ServerResponse 实际上是一个OutgoingMessage,它是一个Stream。 ,那供应write() .如果将其与 stream.Writable.write() 进行比较实现,他们写入数据的方式是不同的。

I was also curious what benefits it gets in implementing writable stream if it uses its own write for example, etc? (From Comments below)

如果不是 Node.js 基金会的一员,我无法谈论动机,但从设计的 Angular 来看,实现 stream.Writable 接口(interface)提供了一组熟悉且通用的方法和事件供开发人员使用。此外,http.ServerResponse 正在写入连接套接字(请参阅 OutgoingMessage._send() ),这不是 stream.Writable.write() 实现的一部分。 也许下面的摘录提供了对基金会思维过程的一些洞察

Writable Streams

All Writable streams implement the interface defined by the stream.Writable class.

While specific instances of Writable streams may differ in various ways, all Writable streams follow the same fundamental usage pattern

关于javascript - response.write - 它是从可写流还是从 http.ServerResponse 调用写入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41988261/

相关文章:

javascript - 如何使用 jquery 和 select2 获取所选 optgroup 的值?

javascript - 如何在一次查询中使用 .skip()、.limit() 和总匹配结果进行 MongoDB 文本搜索?

javascript - 控制台上的简单 node.js readline

javascript - ember-cli 中的嵌套资源,困惑的应用程序结构

javascript - 如何访问输入:required:invalid using jQuery?

javascript - 为什么 promise 的记录值令人困惑?

javascript - 仅向模型所有者广播消息

javascript - 根据下一个元素的类显示/隐藏一个元素

node.js - 防止自动重定向并获取 PassportJs "authenticate"方法的重定向 URL

node.js - 访问 JSON 返回未定义