Node.js ReadStream从不调用“数据”侦听器

我有一个名为a.txt的文件,可以使用fs.readFile打开和读取。 但是,我似乎无法用createReadStream读取它:

var fs = require('fs'); var stream = fs.createReadStream('a.txt'); stream.on('data', function() { console.log('data present'); }); 

这从来不打印任何东西,我错过了什么?

如果这个确切的情况发生在我身上。 在REPL中运行此代码时发生的情况是控制stream将返回到您input的每一行之间的节点事件循环。 当发生这种情况时,节点正在借此机会做任何未决的IO。 但是因为你没有附加一个听众,所以“数据”事件快乐地被遗忘。

您可以通过将上面的代码粘贴到JavaScript文件并将其作为脚本运行来validation。 它工作正常,然后因为监听器在控制返回到事件循环之前被连接。

我们遇到的这个问题的版本是打开一个stream,并试图在callback中使用它。 在封闭函数中打开stream并从callback中引用stream并不起作用 – 在附加事件侦听器之前,节点已经将所有数据抽出。

您可以通过以下两种方法中的任何一种来解决这个问题:打开电话后立即在电话上呼叫暂停,或者确保在通过任何回叫之前附加听众。

尝试:

 var data = ''; var rs = fs.createReadStream('/path/to/file'); rs.on('data', function(data) { data += data; }); rs.on('end', function() { console.log(data); }); 

可以肯定的是,尝试正确地获取文件的path。

 var path = __dirname + '/a.txt'; console.log(path); var stream = fs.createReadStream(path);