数据事件未触发节点.js

Data event not firing Node.js

本文关键字:节点 js 事件 数据      更新时间:2023-09-26

我正在编写一个应用程序,该应用程序下载带有扩展名node-ytdl的YouTube视频。我想向客户端发送下载进度指示器,因此我正在尝试获取块信息来计算它。我的代码看起来像这样。

        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 流有点陌生。我做错了什么吗?

您刚刚绑定了错误的流。 'data'事件将发生在可读流上,例如 ytdl 创建的stream

stream.on('data', function (chunk) {
    // ...
});

如果您使用的是 Node 0.8 或更早版本,则两个流上都会发生'close'事件。虽然 0.10 将可写流的事件更改为 'finish' .