JavaScript fetch ERR_CONNECTION_REFUSED与TypeError Failed to fetch的区别

5
使用 JavaScript fetch API 时,如果服务器下线,浏览器控制台会记录一个“ERR_CONNECTION_REFUSED”的错误,但是fetch的catch代码块会返回一个“TypeError Failed to fetch”的消息。
示例:下面的最小fetch演示了这两个错误消息。
fetch("https://localhost/get-something", {
    method: "POST"
}).then(resp => {
    console.log(resp)
}).catch(err => {
    console.log("ERR:", err, err.name, err.message)
})

当运行fetch时,浏览器的控制台将出现两个错误:
POST https://localhost/get-something net::ERR_CONNECTION_REFUSED

并且

ERR: TypeError: Failed to fetch
// err.message will be "failed to fetch"

除服务器宕机的情况外,捕获块中的通用“failed to fetch”消息,还会出现其他情况。 我更关注于浏览器控制台错误消息ERR_CONNECTION_REFUSED

问题

在失败的获取调用中是否有一种方法可以捕获ERR_CONNECTION_REFUSED值?


请问如何捕获“net::ERR_CONNECTION_REFUSED”错误? - Quentin
@Quentin 不确定为什么那个问题是重复的。1)它使用 XMLHttpRequest;而我正在使用 fetch。2)没有提供的答案能够捕获 ERR_CONNECTION_REFUSED。3)我已经捕获了错误,但是它是“获取失败”的错误。您有关于如何捕获连接被拒绝错误的想法吗? - Metro Smurf
来自Mozilla开发者网络:从fetch()返回的Promise即使响应是HTTP 404或500,也不会因HTTP错误状态而拒绝。相反,它将正常解决(ok状态设置为false),并且仅在网络故障或任何阻止请求完成的情况下拒绝。 - Henry Xiloj Herrera
使用此实验:https://dev59.com/j8Tsa4cB1Zd3GeqPMvV8#73475945 - user5781320
这回答解决了你的问题吗:https://dev59.com/FVgQ5IYBdhLWcg3wRR9j#43061415如果您将WebSocket与HTML一起托管,可以在页面开始时启动WebSocket。由于您可以获取HTML,因此此ws必须成功连接。并侦听其关闭事件以了解服务器不可用的时间。或者只需构建一个服务器来检查HTML服务器上的ws服务器是否可用。 - Ethicist
显示剩余3条评论
1个回答

0

很遗憾,这是不可能的,因为这种类型的消息是由Chrome自身在控制台中打印的。抑制这些类型的消息已经被争论了多年,但共识似乎是这些消息是有价值的。

你只能使用过滤器来隐藏它们,让你的客户端看不到,可以查看这个链接: https://umaar.com/dev-tips/79-hide-network-console/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接