我正在开发的web应用程序需要从本地网络中的多个不同物联网获取数据,例如。,
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\u cert\u authority\u invalid、err\u ssl\u protocol\u error或err\u conneciton\u拒绝。。。等,以便我可以相应地显示不同的错误消息。
不幸的是,fetch()函数总是在上述三种不同错误下引发相同的“typeerror:failed to fetch”异常。
我是否可以捕获此特定错误证书颁发机构无效异常?
非常感谢。
3条答案
按热度按时间f45qwnt81#
我查看了fetchpollyfill代码,它的功能应该与本机浏览器实现相同(尽管错误消息不同)。它不包括有关遇到的特定错误的信息。这里有两条线
TypeError
它们都是这样的:因此,您只会收到一条错误消息,而没有其他信息。查看typeerror的文档,除了一个简单的
Exception
.TypeError
是规范要求在这种情况下抛出的。您可能会找到另一个更具体地报告错误的库。我四处搜索了一下,但仅仅从文档中很难找到一个库是否具有该功能。您可能需要试用它们,看看它们提供什么样的错误报告。以下是几个选项:
axios
超级药剂
或者您可以尝试使用
XMLHttpRequest
直接的。这个fetch
pollyfill代码是一个很好的起点。您可以分叉该项目并添加一些console.log
让我们看看它报告了什么样的错误。34gzjxbg2#
ERR_CERT_AUTHORITY_INVALID
错误与https连接有关。要解决此问题,必须输入api基本url(例如https://192.168.0.245
(或https://192.168.0.245/api
)是的基本urlhttps://192.168.0.245/api/auto/login
)在浏览器中单击“高级”按钮后,再单击“不安全”按钮。在此之后,您可能会遇到404错误页面。现在,您可以在项目中再次使用api,而不会出现任何问题。
vddsk6oq3#
如果您的internet连接不安全,则可能会出现此错误。表示它不是https。
或者,您可以从服务器端删除ssl证书。因此,您的请求格式应为“http://192.168.0.245/api/auto/login".