React Native [网络错误]:TypeError:网络请求失败

nukf8bse  于 12个月前  发布在  React
关注(0)|答案(2)|浏览(155)

我第一次尝试apollo。我的后端服务器是Phoenix框架(elixir)。并在http://localhost:4000/api运行,所以我试图在我的代码中使用apollo做第一个查询。

import React from 'react';
import { StyleSheet, Text, View } from 'react-native';
import ApolloClient from 'apollo-boost';
import { gql } from 'apollo-boost';
const client = new ApolloClient(
  {
    uri: 'http://localhost:4000/api',
  }
);
client.query({
   query: gql`
     { 
        users {
          name
          email
        } 
     `}
}).then(result => console.log(result));

字符串
但我犯了个错误。

[Network error]: TypeError: Network request failed

    node_modules/expo/build/logs/LogSerialization.js:166:14 in _captureConsoleStackTrace
    node_modules/expo/build/logs/LogSerialization.js:41:24 in serializeLogDataAsync
    ... 9 more stack frames from framework internals

[Unhandled promise rejection: Error: Network error: Network request failed]

    http://192.168.1.8:19001/node_modules/expo/AppEntry.bundle?platform=android&dev=true&minify=false&hot=false:124432:28 in new ApolloError
    node_modules/apollo-client/bundle.umd.js:1587:12 in <anonymous>
    node_modules/apollo-client/bundle.umd.js:2007:12 in info.listeners.forEach$argument_0
    <anonymous>:null in Set.forEach
    node_modules/apollo-client/bundle.umd.js:2005:17 in queries.forEach$argument_0
    <anonymous>:null in Map.forEach
    node_modules/apollo-client/bundle.umd.js:2003:11 in QueryManager.prototype.broadcastQueries
    http://192.168.1.8:19001/node_modules/expo/AppEntry.bundle?platform=android&dev=true&minify=false&hot=false:125823:31 in <unknown>
    node_modules/promise/setimmediate/core.js:37:11 in tryCallOne
    node_modules/promise/setimmediate/core.js:123:14 in setImmediate$argument_0


在我的服务器日志什么也没说。我想我的客户端甚至没有接触服务器。我错过了什么?任何想法?:(

cvxl0en2

cvxl0en21#

问题是,iOS运行在模拟器中,Android运行在模拟器中。
localhost指向代码运行的环境。模拟器模拟一个真实的设备,而模拟器只是模拟设备。因此,Android上的localhost指向模拟的Android设备。而不是您的服务器运行的机器。解决方案是将localhost替换为您机器的IP地址。
尝试将http://localhost:4000更改为http://10.0.2.2:4000/

w80xi6nr

w80xi6nr2#

这就是解决它的方法。
1.获取设备的IP。在Windows上,运行ipconfig并记下IP4地址。
1.对于你的项目,在地址上运行你的代码:0.0.0.0.例如django:will be python manage.py runserver 0.0.0.0:8000
1.获取代码将从地址http://ip4:8000获取,其中ip4是步骤1中获取的IP。因此,如果端点是http://127.0.0.1:8000/users;,则它应该是http://ip4:8000/users

相关问题