在Node JS中管道缓冲区的正确方法

时间:2014-11-17 07:00:24

标签: node.js stream filesystems pipe fs

看看:

var Client = require('ftp');
var fs = require('fs');

var c = new Client();
c.on('ready', function() {
  c.get('foo.txt', function(err, stream) {
    if (err) throw err;
    stream.once('close', function() { c.end(); });
    stream.pipe(fs.createWriteStream('foo.local-copy.txt'));
  });
});
// connect to localhost:21 as anonymous
c.connect();

这段代码来自https://www.npmjs.org/package/ftp。基本上它会打开一个读取流并将其传输到写入流中。最后它关闭了源的连接。

在管道流(源)关闭后,管道方法是否关闭目标流?我在API文档中找不到它。

我做了一些测试,从巫婆我可以得出结论,但我不确定。

1 个答案:

答案 0 :(得分:3)

当源发出end事件时,目标流将关闭。这在Stream.pipe

中有记录
  

默认情况下,当源流在目标上调用end()   发出结束,以便目的地不再可写。

这允许调用以下形式:

var http = require('http'),
  fs = require('fs');

http.createServer(function (req, res) {
  fs.createReadStream('path/to/file').pipe(res);
}).listen(3000);

如果end对象未调用response,则请求会超时。

这会使请求超时:

  fs.createReadStream('path/to/file').pipe(res, {end: false});