提供的值“moz-chunked-arraybuffer”不是有效的“responseType”

Posted

技术标签:

【中文标题】提供的值“moz-chunked-arraybuffer”不是有效的“responseType”【英文标题】:The provided value 'moz-chunked-arraybuffer' is not a valid 'responseType 【发布时间】:2020-07-30 02:13:25 【问题描述】:

第一次在这里提出问题。 我正在使用 react native 和 expo 构建一个应用程序,并且我已经实现了一个从 Icecast 流播放的音频播放器。

我现在想要实现的是从 icecast 流中获取元数据,所以我安装了这个库:https://github.com/ghaiklor/icecast-parser。 但是,由于它使用 http、events 和 stream 模块形成节点,我安装了以下包以使它们在 react native 中:https://github.com/parshap/node-libs-react-native/,它设法让解析库工作。

现在,我遇到的问题是,在 icecast-parser 对流发出 http 请求后,我收到以下错误:

“提供的值 'moz-chunked-arraybuffer' 不是有效的 'responseType'。” “提供的值 'ms-stream' 不是有效的 'responseType'。”

阅读https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequestResponseType 后,我认为问题在于,出于某种原因,来自请求的响应属于那种类型,这就是给我带来错误的原因。 因此,我正在尝试寻找是否有办法对其进行改造或使其发挥作用,并想知道您是否有想法或可以为我指明正确的方向?

这是发生错误的代码部分:

_makeRequest () 
  const request = (this.getConfig('url').indexOf('https://') === 0) ? 
  https.request(this.getConfig('url')) : http.request(this.getConfig('url'));

  request.setHeader('Icy-MetaData', '1');
  request.setHeader('User-Agent', this.getConfig('userAgent'));
  request.once('socket', function (socket) 
    socket.once('end', this._onSocketEnd.bind(this));
  .bind(this));

  console.log("I get here")

  request.once('response', this._onRequestResponse.bind(this));

  console.log("I don't get here")

  request.once('error', this._onRequestError.bind(this));
  request.end();

  return this;

_onRequestResponse (response) 
  console.log("not getting here")

  const icyMetaInt = response.headers['icy-metaint'];

  if (icyMetaInt) 
    const reader = new StreamReader(icyMetaInt);

    reader.on('metadata', metadata => 
      this._destroyResponse(response);
      this._queueNextRequest(this.getConfig('metadataInterval'));
      this.emit('metadata', metadata);
    );

    response.pipe(reader);
    this.emit('stream', reader);   
   else 
    this._destroyResponse(response);
    this._queueNextRequest(this.getConfig('emptyInterval'));
    this.emit('empty');
  

  return this;

【问题讨论】:

【参考方案1】:

尝试使用这行代码来抑制警告

LogBox.ignoreLogs
       (['Warning: The provided value \'moz', 
         'Warning: The provided value \'ms-stream'
       ])

【讨论】:

【参考方案2】:

显然,问题来自于该库是为 nodeJS 构建的,因此即使我添加了一个将所需库导入 react-native 的包,代码也不起作用。使用为 nodeJS 构建的不同解析库对此进行了测试。

【讨论】:

以上是关于提供的值“moz-chunked-arraybuffer”不是有效的“responseType”的主要内容,如果未能解决你的问题,请参考以下文章

基于提供的值在 C# 中动态创建 JSON 对象

SwiftUI:@Environment 未在视图层次结构中接收提供的值

提供者使用 Streams 公开不正确的值

SQLite Instr 提供的值与预期不同

列名或提供的值的数量与表定义不匹配。为啥?

多次调用 AlarmManager.setRepeating 提供相同的 Intent/PendingIntent 额外值,但我提供了不同的值