fix: 移除模块级detectEnv()避免启动时网络探测失败
This commit is contained in:
@ -1,67 +1,20 @@
|
||||
/**
|
||||
* uni.request 封装 — 智能环境切换 + 双 Token 无感刷新 + 并发请求队列
|
||||
* uni.request 封装 — 双 Token 无感刷新 + 并发请求队列
|
||||
*
|
||||
* 🚀 自动检测:启动时 ping 本地服务器,可达则用本地,否则走生产。
|
||||
* 无需手动复制 request.local.js / request.prod.js。
|
||||
* 环境选择:优先读取 storage 中的 env_base_url,
|
||||
* 未设置时默认走生产服务器。开发时如需切换,在登录前手动设置。
|
||||
*/
|
||||
|
||||
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";
|
||||
|
||||
// ============================================================
|
||||
// 环境自动检测(仅首次启动时执行一次)
|
||||
// 环境 URL
|
||||
// ============================================================
|
||||
|
||||
let BASE_URL = uni.getStorageSync("env_base_url") || "";
|
||||
let envChecked = !!BASE_URL;
|
||||
|
||||
function getBaseUrl() {
|
||||
if (!BASE_URL) BASE_URL = PROD_URL; // 兜底
|
||||
return BASE_URL;
|
||||
return uni.getStorageSync("env_base_url") || PROD_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 存储
|
||||
// ============================================================
|
||||
|
||||
Reference in New Issue
Block a user