39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
const DEFAULT_PROD_API_ORIGIN = 'https://work.api.shumengya.top';
|
||
|
||
const stripTrailingSlashes = (value) => value.replace(/\/+$/, '');
|
||
|
||
const stripApiSuffix = (value) => value.replace(/\/api\/?$/, '');
|
||
|
||
const hasHttpProtocol = (value) => /^https?:\/\//i.test(value);
|
||
|
||
export const getApiBaseUrl = () => {
|
||
const envUrl = process.env.REACT_APP_API_URL;
|
||
if (envUrl) {
|
||
const normalized = stripTrailingSlashes(envUrl);
|
||
|
||
// 避免生产环境错误使用相对路径(例如 /api),导致请求打到前端自身域名
|
||
if (normalized.startsWith('/')) {
|
||
if (process.env.NODE_ENV === 'production') {
|
||
// eslint-disable-next-line no-console
|
||
console.warn(
|
||
`[SproutWorkCollect] REACT_APP_API_URL=${normalized} 是相对路径,已忽略并回退到默认后端:${DEFAULT_PROD_API_ORIGIN}/api`,
|
||
);
|
||
return `${DEFAULT_PROD_API_ORIGIN}/api`;
|
||
}
|
||
|
||
return normalized.endsWith('/api') ? normalized : `${normalized}/api`;
|
||
}
|
||
|
||
const absolute = hasHttpProtocol(normalized) ? normalized : `https://${normalized}`;
|
||
return absolute.endsWith('/api') ? absolute : `${absolute}/api`;
|
||
}
|
||
|
||
if (process.env.NODE_ENV === 'production') {
|
||
return `${DEFAULT_PROD_API_ORIGIN}/api`;
|
||
}
|
||
|
||
return 'http://localhost:5000/api';
|
||
};
|
||
|
||
export const getApiOrigin = () => stripApiSuffix(getApiBaseUrl());
|