api.ts
1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/** 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;
}