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

使用完整URL调用fetch正常,配置proxy却失败,该用常量替代吗?

问题解答

首先明确:React Native(包括Expo)完全不支持通过package.json配置proxy——这个机制是Web版React依赖Webpack等构建工具实现的,而RN的运行环境是原生设备/模拟器,没有对应的代理转发能力,所以你用相对路径发起fetch请求会直接失败。

正确的处理方式有以下几种:

1. 定义基础URL常量统一调用

这是最直接的方案,把后端服务的基础地址抽成常量,所有请求都基于这个常量拼接路径:

// 可放在单独的配置文件,比如src/config/api.js
const BASE_URL = "http://192.168.xxx.xxx:3000";

// 使用示例
fetch(`${BASE_URL}/members`)
  .then((response) => response.json())
  .then((myJson) => console.log(myJson))
  .catch((err) => console.error("请求失败:", err));

2. 封装统一的请求工具函数

如果项目中请求较多,建议封装复用的fetch工具,方便统一处理请求头、错误捕获、环境切换等逻辑:

// src/utils/api.js
const BASE_URL = "http://192.168.xxx.xxx:3000";

export async function request(path, options = {}) {
  try {
    const response = await fetch(`${BASE_URL}${path}`, {
      ...options,
      headers: {
        "Content-Type": "application/json",
        ...options.headers,
      },
    });
    if (!response.ok) {
      throw new Error(`请求错误: ${response.status}`);
    }
    return await response.json();
  } catch (err) {
    console.error("接口请求失败:", err);
    throw err; // 向上抛出错误,让调用方按需处理
  }
}

// 调用示例
import { request } from "./src/utils/api";

request("/members")
  .then((data) => console.log(data))
  .catch((err) => console.error(err));

3. 区分开发/生产环境(可选)

如果需要在不同环境切换API地址,可以借助Expo的环境变量配置:

  • 安装依赖:npx expo install expo-dotenv
  • 创建.env文件:
# 开发环境
BASE_URL=http://192.168.xxx.xxx:3000
# 生产环境(单独配置)
# BASE_URL=https://your-production-api.com
  • 代码中引入使用:
import { BASE_URL } from "@env";

fetch(`${BASE_URL}/members`)
  // ...后续处理逻辑

内容的提问来源于stack exchange,提问作者Vénon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:59:52