如何在节点中发送带有读取流的多个文件?

时间:2015-08-20 23:16:29

标签: javascript node.js server

如果我有一个包含两个文件的目录,我想发送它们两个。假设和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(),因此我可以发送到单独的读取流。谢谢你的帮助〜

2 个答案:

答案 0 :(得分:1)

你不能这样做。

这不是Node.js的限制。它是您的Web浏览器的限制(或者更确切地说,是HTTP的限制)。你做的是分别发送每个文件:

Router.get('/', function(req, res) {
  res.sendFile('path to index')
})
Router.get('/style.css', function(req, res) {
  res.sendFile('path to style')
})

或者,如果您的路由器支持它,您可以使用静态中间件来提供css文件。

这不会创建大量连接吗?

是的,没有。

如果您的浏览器支持,节点http.Server支持keep-alive。这意味着如果可能的话,它将重新使用已经打开的连接。因此,如果您担心延迟并希望实施持久连接,那么它已经为您服务了。

如果需要,可以通过设置keep-alive来更改server.timeout超时,但我认为默认值2分钟对于大多数网页来说已经足够了。

答案 1 :(得分:0)

通常,您可以从路由处理程序提供html,并让express.static()中间件自动处理所有静态资源。

您还可以使用res.sendFile()进一步简化操作。

所以你可能有类似的东西:

// Use whatever the correct path is that should be the root directory
// for serving your js, css, and other static assets.
app.use(express.static(path.join(__dirname, 'public')));

// ...

Router.get('/', function(req, res) {
  res.sendFile('path to index');
});