我正在编写一个应用程序,用于下载扩展名为 node-ytdl 的 YouTube 视频。我想向客户端发送下载进度指示器,因此我尝试获取 block 信息来计算它。我的代码看起来有点像这样。
var writing = fs.createWriteStream('video.mp4');
var stream = ytdl('https://www.youtube.com/watch?v=jofNR_WkoCE', { filter: function(format) { return format.container === 'mp4'; }, quality: "lowest" });
stream.pipe(writing);
var completed_len = 0;
var total_len = 0;
writing.on('data', function(chunk) {
console.log('received data!');
completed_len += chunk.length;
});
writing.on('close', function ()
{
console.log('close');
res.send('completed!');
});
奇怪的是,尽管每次下载完成时都会触发“关闭”,但我没有从“数据”事件中获取任何日志。视频写得正确。我对 Node.js 流有点陌生。我是不是做错了什么?
最佳答案
您刚刚绑定(bind)到了错误的流。 'data'
事件将发生在 readable streams ,就像 ytdl
创建的 stream
一样。
stream.on('data', function (chunk) {
// ...
});
如果您使用 Node 0.8,'close'
事件将在两个流上发生或更老。而 0.10 将可写流的事件更改为 'finish'
.
关于javascript - 数据事件未触发 Node.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19167407/