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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:54:59