58 lines
1.9 KiB
JavaScript
58 lines
1.9 KiB
JavaScript
const getAppInstance = () => getApp();
|
|
const config = require('../config/index');
|
|
|
|
const getDefaultBaseUrl = () => {
|
|
const apiBaseUrl = String(config?.API_BASE_URL || '').replace(/\/+$/, '');
|
|
if (!apiBaseUrl) return 'https://ai-c.maimanji.com';
|
|
return apiBaseUrl.endsWith('/api') ? apiBaseUrl.slice(0, -4) : apiBaseUrl;
|
|
};
|
|
|
|
const getBaseUrl = () => {
|
|
const app = getAppInstance();
|
|
const fromGlobal = app?.globalData?.baseUrl;
|
|
const fromStorage = wx.getStorageSync('baseUrl');
|
|
if (config?.ENV === 'development') {
|
|
const storageUrl = String(fromStorage || '').trim();
|
|
const allowStorage =
|
|
/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?$/i.test(storageUrl) ||
|
|
/^https?:\/\/(0\.0\.0\.0)(:\d+)?$/i.test(storageUrl);
|
|
return (allowStorage ? storageUrl : '') || fromGlobal || getDefaultBaseUrl();
|
|
}
|
|
return fromStorage || fromGlobal || getDefaultBaseUrl();
|
|
};
|
|
|
|
const getToken = () => wx.getStorageSync('auth_token') || '';
|
|
|
|
const request = ({ url, method = 'GET', data, header = {} }) => {
|
|
return new Promise((resolve, reject) => {
|
|
const baseUrl = getBaseUrl();
|
|
wx.request({
|
|
url: `${baseUrl}${url}`,
|
|
method,
|
|
data,
|
|
header: {
|
|
'Content-Type': 'application/json',
|
|
...(getToken() ? { Authorization: `Bearer ${getToken()}` } : {}),
|
|
...header
|
|
},
|
|
success: (res) => {
|
|
resolve(res);
|
|
},
|
|
fail: (err) => {
|
|
const errMsg = err?.errMsg || '';
|
|
const isConnRefused = /ERR_CONNECTION_REFUSED/i.test(errMsg);
|
|
const isRequestFail = /^request:fail/i.test(errMsg);
|
|
const userMessage = isConnRefused || isRequestFail
|
|
? `网络连接失败:无法连接到 ${baseUrl},请确认后端服务已启动且接口地址正确`
|
|
: '网络请求失败';
|
|
reject({ ...err, baseUrl, userMessage });
|
|
}
|
|
});
|
|
});
|
|
};
|
|
|
|
module.exports = {
|
|
request,
|
|
getBaseUrl
|
|
};
|