api.ts 1.63 KB
/** H5 开发构建下由 vite 注入:走同源路径 + devServer 代理,无需写完整域名 */
export function apiUsesSameOrigin(): boolean {
  const v = import.meta.env.VITE_API_RELATIVE;
  return v === "1" || v === "true";
}

/**
 * 后端 API 根地址(无协议末尾斜杠)。
 * 在 `.env.development` 中配置 `VITE_API_BASE_URL`;
 * H5 开发可走 `VITE_API_RELATIVE` + 代理,此时为空串;
 * 正式包留空且无同源标记则走本地演示数据。
 */
export function getApiBase(): string {
  if (apiUsesSameOrigin()) {
    return "";
  }
  const val = import.meta.env.VITE_API_BASE_URL;
  if (typeof val !== "string" || !val.trim()) {
    return "";
  }
  return val.trim().replace(/\/+$/, "");
}

export function apiEnabled(): boolean {
  if (apiUsesSameOrigin()) {
    return true;
  }
  return getApiBase() !== "";
}

/** 当前配置的 API 是否为本机回环(仅适合电脑浏览器 H5,不适合真机 App) */
export function isApiBaseLoopback(): boolean {
  const b = getApiBase();
  return b.length > 0 && /127\.0\.0\.1|localhost/i.test(b);
}

/** 连接失败信息里出现本机地址时,补充说明(避免误以为后端挂了) */
export function appendLoopbackConnectHint(msg: string): string {
  const m = msg.trim();
  if (!m) {
    return m;
  }
  if (/127\.0\.0\.1|localhost/i.test(m)) {
    return `${m} — 真机/App 上 127.0.0.1 是手机自己。请把 uniapp/.env.development 里 VITE_API_BASE_URL 改成电脑的局域网 IP(与手机同一 Wi‑Fi),例如 http://192.168.1.5:9898,保存后重新编译运行;Android 官方模拟器可用 http://10.0.2.2:9898`;
  }
  return m;
}