React Native调用本地Firebase API报Network request failed问题求助
问题排查与解决方案
先看你代码里的几个关键问题,以及对应的修复方案:
URL格式错误
你的请求URL里多了一个多余的冒号:http://127.0.0.1/:5001,正确格式应该是http://127.0.0.1:5001,这个语法错误会直接导致请求失败。无效的请求头设置
ACCESS-CONTROL-ALLOW-ORIGIN是服务器端需要返回的响应头,客户端请求里添加这个完全无效,反而可能干扰请求逻辑,直接删掉这个header。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端口
- 确认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
相关产品推荐
相关产品推荐

