fix: 移除模块级detectEnv()避免启动时网络探测失败
This commit is contained in:
@ -1,67 +1,20 @@
|
|||||||
/**
|
/**
|
||||||
* uni.request 封装 — 智能环境切换 + 双 Token 无感刷新 + 并发请求队列
|
* uni.request 封装 — 双 Token 无感刷新 + 并发请求队列
|
||||||
*
|
*
|
||||||
* 🚀 自动检测:启动时 ping 本地服务器,可达则用本地,否则走生产。
|
* 环境选择:优先读取 storage 中的 env_base_url,
|
||||||
* 无需手动复制 request.local.js / request.prod.js。
|
* 未设置时默认走生产服务器。开发时如需切换,在登录前手动设置。
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const LOCAL_URL = "http://localhost:8011/api/v1";
|
|
||||||
const LAN_URL = "http://192.168.9.80:8011/api/v1";
|
|
||||||
const PROD_URL = "http://172.16.0.198:8011/api/v1";
|
const PROD_URL = "http://172.16.0.198:8011/api/v1";
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// 环境自动检测(仅首次启动时执行一次)
|
// 环境 URL
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
||||||
let BASE_URL = uni.getStorageSync("env_base_url") || "";
|
|
||||||
let envChecked = !!BASE_URL;
|
|
||||||
|
|
||||||
function getBaseUrl() {
|
function getBaseUrl() {
|
||||||
if (!BASE_URL) BASE_URL = PROD_URL; // 兜底
|
return uni.getStorageSync("env_base_url") || PROD_URL;
|
||||||
return BASE_URL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function detectEnv() {
|
|
||||||
if (envChecked) return;
|
|
||||||
envChecked = true;
|
|
||||||
|
|
||||||
// 并行 ping 两个服务器,谁先响应就用谁
|
|
||||||
const probe = (url) =>
|
|
||||||
new Promise((resolve) => {
|
|
||||||
const start = Date.now();
|
|
||||||
uni.request({
|
|
||||||
url: url + "/auth/login",
|
|
||||||
method: "POST",
|
|
||||||
data: { username: "_ping_", password: "_ping_" },
|
|
||||||
timeout: 3000,
|
|
||||||
complete() {
|
|
||||||
resolve({ url, ms: Date.now() - start });
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const [localResult, lanResult, prodResult] = await Promise.all([
|
|
||||||
probe(LOCAL_URL),
|
|
||||||
probe(LAN_URL),
|
|
||||||
probe(PROD_URL),
|
|
||||||
]);
|
|
||||||
|
|
||||||
// 优先级: localhost > 局域网IP > 生产
|
|
||||||
if (localResult.ms < 3000) {
|
|
||||||
BASE_URL = LOCAL_URL;
|
|
||||||
} else if (lanResult.ms < 3000) {
|
|
||||||
BASE_URL = LAN_URL;
|
|
||||||
} else {
|
|
||||||
BASE_URL = PROD_URL;
|
|
||||||
}
|
|
||||||
uni.setStorageSync("env_base_url", BASE_URL);
|
|
||||||
console.log("[Env] 自动选择:", BASE_URL,
|
|
||||||
`(localhost ${localResult.ms}ms, 局域网 ${lanResult.ms}ms, 生产 ${prodResult.ms}ms)`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// App 启动时立即触发检测
|
|
||||||
detectEnv();
|
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// 双 Token 存储
|
// 双 Token 存储
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|||||||
Reference in New Issue
Block a user