React Native Fetch api不适用于localhost,IP甚至10.0.2.2

时间:2018-09-20 02:12:27

标签: android django react-native expo fetch-api

我正在我的android设备上使用expo客户端,并在localhost:8000上安装了django服务器,我正在尝试使用react native中的fetch访问和终结点。我看过How can I access my localhost from my Android device? How do you connect localhost in the Android emulator?How to connect to my http://localhost web server from Android Emulator in Eclipse,但这没用。

我也尝试使用计算机的IP地址而不是localhost,但没有结果。这是示例代码

componentDidMount(){
    return fetch('http://my-ip-address:8000/restapi/')
      .then((response) => {
        console.log("success")
        response = response.json()
      }).catch(error => {
        console.error(error)
      })
  }

我在这里做什么错了?

3 个答案:

答案 0 :(得分:1)

这可能与django配置有关。尤其是如果您手机的网络浏览器也无法获得预期的响应。

来自Django docs

Note that the default IP address, 127.0.0.1, is not accessible from other machines
on your network. To make your development server viewable to other machines on the
network, use its own IP address (e.g. 192.168.2.1) or 0.0.0.0 or :: (with IPv6 enabled).

请参见How to access the local Django webserver from outside world,尽管答案也适用于本地网络:

python manage.py runserver 0.0.0.0:8000

如果知道0.0.0.0,可以用机器的地址替换。


还要在您的响应处理程序中注意response.json()返回Promise而不是JSON。相反,您想要:

fetch('http://my-ip-address:8000/restapi/')
  .then(response => response.json())
  .then(responseJson => {
    console.log("success");
    console.log(responseJson);
  })
  .catch(error => {
    console.error(error);
  })

答案 1 :(得分:0)

解决方案

根据您的代码,

  • 您的Django的端口::8080
  • 您获取的目标端口::8000

再次检查。 我建议您在测试服务器api时使用PostMan

答案 2 :(得分:0)

除了csum的答案外,请检查防火墙是否已允许django服务器远程访问您的android设备(设备IP为远程)。如果您已安装任何防病毒并控制防火墙,请确保其防火墙中有规则。