【问题标题】:How to fix parse error when stopping http-stream停止 http-stream 时如何修复解析错误
【发布时间】:2015-05-25 06:05:19
【问题描述】:

这样做的目的是在 node-webkit 中下载正在进行的 mp3 流的一部分,即“剪辑”,因此我必须能够在任意位置停止下载而不是使用正确的文件。

首先,我必须了解 nwjs 是如何下载流的,我在这里找到了示例代码: http://sebastiandelgado.info/node-streams-for-node-webkit-apps/

我添加了第 17 到 21 行,作为测试,看看我是否可以下载任意数量的字节并播放文件。

这行得通,但我收到了一个解析错误,因为 on-data 仍在尝试写入我已关闭的文件流,所以我在第 25 行添加了一个标志并修复了错误。

剩下的一个问题是停止 http-stream,我需要关闭连接,所以我做了更多的阅读。

我查看了 http.get() 的文档并被引导到 http.response(): https://nodejs.org/docs/latest/api/http.html

这反过来又使我收到了传入消息: https://nodejs.org/docs/latest/api/http.html#http_http_incomingmessage

"...它实现了 Readable Stream 接口,以及以下附加事件、方法和属性。 事件:'关闭'# 函数 () { }..."

所以我在第 19 行试了一下。

那-确实-工作了,http连接停止了流式传输,但是,它也发出了错误:

Uncaught TypeError: undefined is not a function
events.js:125 Uncaught Error: Parse Error

代码有效,mp3 下载和 http-stream 停止,没有有害影响...但我想知道如何修复错误。

我正在使用 nwjs 0.12.0,它使用 node.js 的 io.js 分支,到目前为止对结果感到满意。

NWEXE=path-to-nw.exe

01 function dlstream () 
02 {  
03 
04  var http = require('http');  
05  var fs   = require('fs');
06  var flag = true; 
07  
08  var req = http.get('http://streams1.kpfa.org:8000/kpfa_64', function(res) {
09         
10          var bytesDownloaded = 0;
11          var fileName        = 'Download.mp3';
12          var writeStream     = fs.createWriteStream(NWEXE + '/' + fileName);
13              
14          res.on('data', function(data) {
15                 
16              //test to arbitrarily end download/close http-stream
17              if(bytesDownloaded > (1024*16)){
18                 writeStream.end();        //close file stream
19                 req.close();              //close http connection
                   //ans: use req.destroy() instead of req.close()
20                 flag=false;               //set closed flag
21              }
22              bytesDownloaded += data.length;
23                 
24              //flag so we don't write to a closed file-stream
25              if(flag){
26                 writeStream.write(data);
27              }
28         });
29    });
30 }

【问题讨论】:

    标签: node.js node-webkit


    【解决方案1】:

    好的,答案是req.close(),我不得不使用req.destroy()。

    这会在不引发错误的情况下停止可读流。

    【讨论】:

      猜你喜欢
      • 2019-09-12
      • 1970-01-01
      • 2018-06-05
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多