ai-c/utils_new/request.js
2026-02-02 18:21:32 +08:00

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
};