如何在javascript中捕获ERR_CERT_AUTHORITY_INVALID

2022-02-24 00:00:00 fetch javascript iot

我正在开发的Web应用程序需要从本地网络内的多个不同IOT获取数据,例如

const response = await fetch("https://192.168.0.245/api/auto/login", options);

由于是https连接,并且每个IOT都带有一个自签名的SSL证书,所以上面的FETCH()会抛出"TypeError:Failed to Fetch"错误(因为证书还没有被接受),应用会在浏览器控制台显示如下

OPTIONS https://192.168.0.245/api/auto/login net::ERR_CERT_AUTHORITY_INVALID

我需要的是能够在javascript中捕获此错误。具体地说,我需要能够捕获不同的错误,如ERR_CERT_AUTHORITY_INVALID、ERR_SSL_PROTOCOL_ERROR或ERR_CONNECITON_REJECTED.等,因此我可以相应地显示不同的错误消息。

遗憾的是,在上述三个不同的错误中,FETCH()函数总是抛出相同的"TypeError:Failed to Fetch"异常。

是否可以捕获此特定ERR_CERT_AUTHORITY_INVALID异常?

谢谢您。


解决方案

我查看了fetch pollyfill code,它的功能应该与本机浏览器实现相同(尽管错误消息不同)。它不包括有关遇到的特定错误的信息。有twolines抛出TypeError,它们看起来都是这样:

reject(new TypeError('Network request failed'))

因此您只会收到一条错误消息,而不会收到其他信息。查看TypeError的文档,除了简单的Exception提供的信息之外,您不会获得任何额外的信息。TypeError是spec在这种情况下需要抛出的对象。

您也许能够找到另一个更具体地报告错误的库。我四处搜索了一下,但仅从文档中很难找到库是否具有该特性。您可能需要尝试一下,看看它们提供了什么样的错误报告。以下是几个选项:

  • axios
  • superagent

或者您可以尝试直接使用XMLHttpRequest实现解决方案。fetchpollyfull代码就是一个很好的起点。您可以分叉该项目并添加一些console.log,以查看它报告的错误类型。

相关文章