Expo/React Native物理设备无法从API获取数据求助
解决Expo物理设备无法获取API数据的问题
核心排查方向及修复方案
1. 网络可达性问题
- 物理设备需与开发电脑连接同一WiFi网络
- 将API地址中的
MY_API替换为开发电脑的本地IP地址(例如http://192.168.1.105:3000/get-all-products),禁止使用localhost或自定义未解析域名 - 确认API服务器的防火墙规则允许局域网设备访问目标端口
2. 明文HTTP请求限制
- Android 9+默认拦截明文HTTP请求,需在
app.json的expo.android字段中配置:"android": { "usesCleartextTraffic": true, // 其他原有配置 } - iOS需在
app.json的expo.infoPlist中添加安全配置:"infoPlist": { "NSAppTransportSecurity": { "NSAllowsArbitraryLoads": true } }
3. 补充错误捕获逻辑
你的代码未处理请求异常,无法定位物理设备上的具体问题,修改req函数如下:
const req = async () => { try { const res = await fetch("http://你的本地IP/get-all-products"); if (!res.ok) throw new Error(`请求失败:${res.status}`); const data = await res.json(); setProducts(data); const stored = await getData("products"); // 数组/对象不能直接用!==判断,需转字符串做深度对比 if (JSON.stringify(stored) !== JSON.stringify(data)) { await storeData("products", data); } } catch (err) { console.error("API请求异常:", err); // 可添加用户提示逻辑,比如显示错误Toast } };
4. Expo Go代理问题
关闭开发电脑的网络代理,或在物理设备的Expo Go中手动设置与电脑一致的代理配置,避免代理导致的请求阻断
5. 跨域权限检查
若API为线上服务器,确认服务器已配置CORS规则,允许物理设备的访问来源
内容的提问来源于stack exchange,提问作者Selcukusu
相关产品推荐
相关产品推荐

