axios 出现网络错误并响应本机

smi*_*omb 12 react-native axios

我使用外部托管的 Django python 框架创建了一个 API 端点。我可以从浏览器 ( mydomain.com/endpoint/)访问我的端点并验证没有错误。当我在我的开发机器 ( localhost:8000/endpoint/)上本地运行我的测试 django 服务器时,情况也是如此。当我使用我的本地主机作为端点时,我的 json 数据毫无问题地通过。当我使用我的生产域时,axios 遇到了网络错误,并且它提供的上下文并不多......从调试控制台我得到了这个:

Error: Network Error
    at createError (createError.js:16)
    at XMLHttpRequest.handleError (xhr.js:87)
    at XMLHttpRequest.dispatchEvent (event-target.js:172)
    at XMLHttpRequest.setReadyState (XMLHttpRequest.js:554)
    at XMLHttpRequest.__didCompleteResponse (XMLHttpRequest.js:387)
    at XMLHttpRequest.js:493
    at RCTDeviceEventEmitter.emit (EventEmitter.js:181)
    at MessageQueue.__callFunction (MessageQueue.js:353)
    at MessageQueue.js:118
    at MessageQueue.__guardSafe (MessageQueue.js:316)
Run Code Online (Sandbox Code Playgroud)

这是我在 React Native 组件中的 axios 调用:

    componentDidMount() {
        axios.get('mydomain.com/get/').then(response => {  // localhost:8000/get works
            this.setState({foo:response.data});
        }).catch(error => {
            console.log(error);
        });
    }
Run Code Online (Sandbox Code Playgroud)

ill*_*ist 29

如果您在其他帖子中找不到答案

就我而言,我使用 Rails 作为后端,并尝试http://localhost:3000使用 Axios 发出请求,但每次都得到Network Error响应。http://10.0.2.2:3000然后我发现我需要在android模拟器的情况下发出请求。对于 iOS 模拟器,它可以很好地与http://localhost:3000.

结论

使用

http://10.0.2.2:3000
Run Code Online (Sandbox Code Playgroud)

代替

http://localhost:3000
Run Code Online (Sandbox Code Playgroud)

更新

可能值得尝试

adb reverse tcp:3000 tcp:3000
Run Code Online (Sandbox Code Playgroud)


smi*_*omb 22

似乎未加密的网络请求在 iOS 中默认被阻止,即https会工作,http不会。

从文档

默认情况下,iOS 将阻止任何未使用 SSL 加密的请求。如果您需要从明文 URL(以 http 开头的 URL)中获取数据,您首先需要添加一个 App Transport Security 例外。


小智 19

如果您尝试在使用 AVD 创建的 android 模拟器上调用 localhost,用 10.0.2.2 替换 localhost 为我解决了这个问题。

  • 作品!例如“http://localhost:8000/”变为“http://10.0.2.2:8000/” (3认同)

小智 8

  1. 本地主机更改为您的ip(192.168.43.49)
  2. 添加http://

    http://192.168.43.49:3000/user/


归档时间:

查看次数:

57469 次

最近记录:

5 年,2 月 前