You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native调用本地Firebase API报Network request failed问题求助

问题排查与解决方案

先看你代码里的几个关键问题,以及对应的修复方案:

  1. URL格式错误
    你的请求URL里多了一个多余的冒号:http://127.0.0.1/:5001,正确格式应该是http://127.0.0.1:5001,这个语法错误会直接导致请求失败。

  2. 无效的请求头设置
    ACCESS-CONTROL-ALLOW-ORIGIN是服务器端需要返回的响应头,客户端请求里添加这个完全无效,反而可能干扰请求逻辑,直接删掉这个header。

  3. React Native访问本地API的IP适配
    不同运行环境下,访问电脑本地服务的IP不一样:

  • Android模拟器:127.0.0.1指向模拟器自身,必须用10.0.2.2(官方默认的宿主机映射IP)才能访问电脑上的服务
  • iOS模拟器:可以直接用127.0.0.1,但真机测试时必须换成电脑的局域网IP(比如192.168.x.x),同时确保手机和电脑在同一WiFi下
  • 真机测试:还要确认电脑防火墙没有拦截5001端口
  1. 确认Firebase Emulator的监听范围
    启动Firebase Emulator时,要确保它监听的是0.0.0.0而非仅localhost,这样局域网内的设备才能访问。可以在firebase.json里配置:
{
  "emulators": {
    "functions": {
      "port": 5001,
      "host": "0.0.0.0"
    }
  }
}

修正后的fetch代码示例:

const SignInPress = async () => {
    try {
      // 根据运行环境自动适配IP
      const baseUrl = Platform.OS === 'android' ? 'http://10.0.2.2:5001' : 'http://127.0.0.1:5001';
      const response = await fetch(
        `${baseUrl}/freelance-services-api-a0277/us-central1/app/api/freelancers`,
        {
          method: 'GET',
          headers: {
            'Content-Type': 'application/json',
          },
        },
      );
      // 新增状态码检查,方便定位错误
      if (!response.ok) {
        throw new Error(`请求失败,状态码: ${response.status}`);
      }
      const json = await response.json();
      return json;
    } catch (error) {
      console.error('请求失败详情:', error);
    }
};

额外排查点:

  • 用Postman或curl测试修正后的URL,确认API本身能正常返回数据
  • 检查AndroidManifest.xml:确保已添加<uses-permission android:name="android.permission.INTERNET" />,并且设置了android:usesCleartextTraffic="true"(允许HTTP请求)

内容的提问来源于stack exchange,提问作者Aber_PotatoES

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:23:25