javascript - 数据事件未触发 Node.js

标签 javascript node.js youtube stream fs

我正在编写一个应用程序,用于下载扩展名为 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/

相关文章:

javascript - 视差滚动,带有滚动的动画而不是在滚动时激活

node.js - 夜巡在 browser.end() 之后不会终止

php - Youtube 视频限制级别

javascript - 无效字符错误: Failed to execute 'createElement' on 'Document' : The tag name provided ('/static/media/tab1.fab25bc3.png' ) is not a valid name

javascript - AI跟随并避免与障碍物碰撞

javascript - 使用 AngularJs 根据条件/数字在 td 中添加 Span 图标/字形/图形

node.js - 试图使用 supertest 来检查响应的主体 - 得到一个错误

node.js - "Not defined"使用多个回调函数(Node + EJS)

reactjs - ReactJS 中无法获取播放列表数据 Youtube 数据 API 错误 400

javascript - 同步多个YouTube视频