我正在开发 Flutter Web 应用程序,但在正确处理低级错误时遇到问题。
该应用程序使用 graphql-flutter,似乎任何错误都包含在库中
OperationException
。
如果仔细观察,异常包含一个
LinkException
,它本身包含一个 originalException
,那就是一个 XMLHttpRequest error
。
这里没有提供更多信息。
从浏览器开发工具上看,你可以看到这是一个
ERR_CONNECTION_REFUSED
,因为我故意配置了一个不正确的URL来触发这个错误。
理想情况下,我应该能够以不同的方式区分和处理连接异常、http 错误、graphql 错误。
在某种程度上,我至少能够通过检查异常来处理一些用于身份验证目的的http状态代码
bool isGraphqlResultUnauthorized(QueryResult result) {
if (result.hasException) {
if (result.exception?.linkException is HttpLinkParserException) {
final httpException =
result.exception?.linkException as HttpLinkParserException;
if (httpException.response.statusCode == 401) {
return true;
}
}
}
return false;
}
综上所述,我一直在捕获低级错误,如超时、未知主机、连接拒绝等,并且未能找到一种方法来检索有关异常真正原因的更有意义的信息。
我将不胜感激有关如何检索此信息的任何提示,因为我目前似乎没有找到方法。
谢谢大家
可悲的是,XHR 的设置仅仅是为了为浏览器提供“动态刷新”的有限方式。 我很惊讶我们已经重新利用它来创建完整的网络应用程序,但我们仍然超出了原始规范。
这并不是一个真正的答案。 解决 Flutter Web 应用本身充当客户端(如 CORS)时遇到的许多问题需要改变我们赋予浏览器的权力,但这也会导致不良行为者遭受更多攻击。
这是一个 CORS 问题。 看看这个
对于本地开发,您可以禁用安全性(请注意,这不是推荐的生产解决方案):
flutter run --web-browser-flag "--disable-web-security"