【发布时间】:2015-11-14 18:53:49
【问题描述】:
如果我有一个包含两个文件的目录并且我想发送两个文件。假设还有index.html和style.css。
Router.get('/', function(req, res) {
var indexStream = fs.createWriteStream('path to index')
var cssStream = fs.createWriteStream('path to style')
indexStream.pipe(res)
styleStream.pipe(res)
})
据我了解.pipe(res) 隐式调用 res.end() 以便我可以发送到单独的读取流。感谢您的帮助~
【问题讨论】:
-
您的建议实际上是将两个文件连接在一起,这真的是您想要为客户提供的服务吗?通常,css 文件将由静态中间件单独提供。
-
所以我的 index.html 页面在同一目录中有一个 style.css 的脚本标签。我注意到当我对
'/'进行GET 时,它会再次向'/styles.css'进行GET。我想知道使用流服务这两个静态资产的最佳方式是什么?这更像是一个普通节点的练习,因为我觉得我已经掩盖了很多只是使用 express 很长时间。 -
@jhernandez:HTTP 不能那样工作。 HTTP1.1(当前标准)确实有一个称为流水线的功能。但它要求浏览器使用相同的套接字发出请求。如果您针对单个请求向浏览器发送多个响应,浏览器将不知道该怎么做。由于 Web 服务器上的错误实现,所有现代 Web 浏览器都禁用了流水线(您甚至无法在 Chrome 中打开它)。因此,这只会让 Firefox 用户受益,因为他们足够精通启用流水线(但不会像您这样做的方式)。
-
@jhernandez:抱歉,有一种方法可以稍微不同。这是保持活动的标题:en.wikipedia.org/wiki/HTTP_persistent_connection。但不是你这样做的方式。
-
@jhernandez:看起来节点 http.Server 已经支持
keep-alive。请参阅文档:nodejs.org/api/http.html#http_event_request。它的工作方式是您根本不修改代码。因为http.Server会为每个请求(不是连接)创建一个新的req和res对象
标签: javascript node.js server