Apollo 客户端/使用 localhost 反应本机错误

Posted

技术标签:

【中文标题】Apollo 客户端/使用 localhost 反应本机错误【英文标题】:Apollo client / React native error using localhost 【发布时间】:2021-07-06 14:32:13 【问题描述】:

我有一个与 Apollo 客户端(grapqhl)一起使用的 react native 应用程序,问题是我有一个生产 API 并且 Apollo 客户端可以正常工作,但是如果我将 apollo 配置中的 uri 更改为 localhost:8000/graphql,我的 IDE 控制台抛出以下错误:

[Unhandled promise rejection: Error: Network request failed]
at http://192.166.0.14:19000/node_modules%5Cexpo%5CAppEntry.bundle
?platform=android&dev=true&hot=false&minify=false:358011:25 in new
 ApolloError
at node_modules\@apollo\client\core\core.cjs.js:1081:45 in self.ge
tObservableFromLink.subscribe$argument_0.error
at node_modules\zen-observable\lib\Observable.js:139:8 in notifySu
bscription
at http://192.168.0.14:19000/node_modules%5Cexpo%5CAppEntry.bundle
?platform=android&dev=true&hot=false&minify=false:356825:4 in onNo
tify
at node_modules\zen-observable\lib\Observable.js:239:4 in <anonymo
us>
at node_modules\@apollo\client\utilities\utilities.cjs.js:946:24 i
n iterateObserversSafely
at <anonymous>:null in Array.forEach
at node_modules\@apollo\client\utilities\utilities.cjs.js:945:4 in
 iterateObserversSafely
at http://192.168.0.14:19000/node_modules%5Cexpo%5CAppEntry.bundle
?platform=android&dev=true&hot=false&minify=false:339027:12 in Obj
ect.error
at node_modules\zen-observable\lib\Observable.js:139:8 in notifySu
bscription

我已经能够查看一些questions 来解决类似的问题,但我发现了两件事:

    类似问题的问题真的很老了,有些事情已经改变了,随着阿波罗 3 的发布,更多 他们建议的解决方案没有奏效,例如将 localhost 更改为我机器的 IP。 我正在使用 expo 运行 react native,我尝试在 expo go 和 android studio 中运行该应用程序,但没有任何好的结果。

Apollo 客户端配置

import  ApolloClient, InMemoryCache  from '@apollo/client';

const client = new ApolloClient(
  uri: 'http://localhost:8000/graphql/',
  cache: new InMemoryCache()
);

环境信息

"@apollo/client": "^3.3.11"
"react-native": "https://github.com/expo/react-native/archive/sdk-40.0.1.tar.gz"
"expo": "~40.0.0"

windows 10

【问题讨论】:

【参考方案1】:

我认为 localhost 未在您的设备中定义(无论是否模拟),您应该使用 IP 地址或服务器名称 我遇到了同样的问题,就这样解决了

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

嘿,我有类似的问题。我所做的是将本地主机替换为我的开发设备 IP 地址(例如 http://192.168.xx.xx:4000/graphql 而不是 http://localhost:4000/graphql)。这是因为我使用 expo qr scan 在我的 android 设备上运行该应用程序,并且没有通过 wifi 建立隧道。

【讨论】:

以上是关于Apollo 客户端/使用 localhost 反应本机错误的主要内容,如果未能解决你的问题,请参考以下文章

Express CORs 策略阻止 Apollo 客户端从服务器获取

下一个 Apollo 客户端不发送 Cookie

Gatsby Link 重置 Apollo 客户端

模拟 apollo graphql 客户端

Apollo+React:如何使用代理使客户端和 graphql 在同一个域上?

客户端应用接入Apollo