使用相对路径进行 Fetch 网络调用,获取"unrecognized url"



我读过的所有内容都说您可以将相对URL传递到fetch呼叫中,例如

fetch('/path/to/resource/')

但是,当我这样做时,我会遇到"未认可的URL"错误。相反

fetch('http://123.0.0.44:8000/path/to/resource')

我目前仅在Android工作。我需要将基本URL添加到项目之类的东西吗?还是我必须通过从某个地方拉出基本URL来塑造动态的绝对道路?如果可能的话,我宁愿只使用相对路径,但是我找不到其他人遇到与使用相同的麻烦。似乎对其他所有人都"工作"。

可能的解决方案是创建一个具有F.E.的配置文件。" server_host"变量,其中包括'http://123.0.0.44:8000'。因此,导入配置文件后,您可以写

之类的东西
fetch( config.SERVER_HOST + '/path/to/resource' )

如Fecebook的官方反应网站上所述,您应该输入URL作为EBDPoint。链接

在制作一个在React Antive v0.59.5和React Native Web v0.11.2之间共享代码的项目时,我刚刚遇到了这一点。fetch是两种环境中可用的全局API(但是,如果您针对非常旧的浏览器,则可能需要对后者进行多填充)。有趣的是,React Native的Fetch实现与您对Web浏览器的多填充相同(whatwg-fetch),因此它们的基础XMLHTTTPRequest实现可能与众不同。

fetch("some/relative/resource.txt")
.then((response) => { console.log("Responded!"); })
.catch(console.error);
// On React Native, logs the error "Network request failed".
// On React Native Web, logs "Responded!"

当我通过http://协议连接到Localhost时,我仔细检查了我的App Transport Security是否正确设置了(是)。

在React Native的情况下,网络调试器中甚至没有显示相应的请求,因此我怀疑违反安全性。然后我意识到这很明显:在React Native Web上,该应用程序始终托管在网络上,因此自然而然地,fetch()请求是相对于该域的。但是React Native应用程序未托管在域上。

看来,React Native的实现将URL传递到rctnetworking.sendrequest(),然后最终在此处使用RCTNetworking.mm,至少对于iOS而言。它最终是使用[RCTConvert NSURL:query[@"url"]]由字典形成的NSURL的[NSMutableURLRequest requestWithURL:URL]。RCTConvert的实现在这里表明NSURL是使用没有relativeToURL路径的[NSURL URLWithString:path]方法初始化的,因此URL与Noth note(并且很可能返回nil)!因此,难怪它失败了。从实施中也可以清楚地看出,本机上没有办法向全球声明一个URL基础,以相对于此类URL。

肯定有可能在这里提出拉动请求,以提高反应本机和反应本地网络之间的奇偶校验。但是在那之前,沿Phillipsh解决方案的线条,您明确详细介绍了主机域,必须做。!

相关阅读

  • 反应本地文档:网络

相关内容

  • 没有找到相关文章

最新更新