/**
|
* 开发环境服务端地址解析。
|
*
|
* 背景:后台跑在开发机上,而开发机的局域网 IP 会随网络环境变化(见过 192.168.110.26 与
|
* 192.168.110.15)。把 IP 写死在 config/api.uts 里,每次换网都得改代码重新编译,忘了改就
|
* 请求到一台不存在的机器上,表现成"登录不上"——从报错里看不出是地址问题。
|
*
|
* 结论:**不要猜 IP**。微信开发者工具与后台跑在同一台机器上,所以 127.0.0.1 永远可达;
|
* 页面来源本身也是 127.0.0.1(见请求的 Referer),因此同源、连跨域都不涉及。
|
*
|
* 曾试过用 uni.getNetworkType 读本机局域网 IP 自动探测,实测在开发者工具里拿不到 ip
|
* (真机上该字段返回的是手机自己的地址,对连开发机也没有帮助),所以放弃这条路。
|
*
|
* 真机调试:手机访问不了 127.0.0.1。此时用 storage 覆盖即可,不必改代码:
|
* uni.setStorageSync('development-api-base-url', 'http://<开发机局域网IP>:8080')
|
* 清了这条 key 就回到开发者工具适用的默认值。
|
*/
|
|
/**
|
* 开发者工具与本机后台:回环地址,跟网络怎么变无关。
|
*
|
* 不要写具体局域网 IP(曾经写成 192.168.110.26:8080,别人拉到代码后所有请求都打到那台机器上,
|
* 表现成"小程序读不到数据")。127.0.0.1 在开发者工具里永远指向本机后台。
|
*/
|
const loopbackDevelopmentBaseUrl = 'http://127.0.0.1:8080'
|
|
/** 覆盖用的 storage key,真机调试时写入开发机局域网地址。 */
|
const overrideStorageKey = 'development-api-base-url'
|
|
/** 开发环境基础地址:先看真机调试的覆盖值,否则用回环地址。 */
|
export const developmentApiBaseUrl = (): string => {
|
const override = uni.getStorageSync(overrideStorageKey)
|
if (override != null && (override as string).trim().length > 0) return (override as string).trim()
|
return loopbackDevelopmentBaseUrl
|
}
|
|
/**
|
* 在 App 启动时调用。这里只做一次记录,方便排查"请求打到哪台机器"。
|
*/
|
export const initializeDevelopmentApiBaseUrl = () => {
|
console.log('Development API base url: ' + developmentApiBaseUrl())
|
}
|