Files
-----/scoring/utils/request.js

149 lines
4.4 KiB
JavaScript
Raw Normal View History

2025-11-11 17:07:13 +08:00
import { BASE_URL } from './CommonValues.js';
import { loginSystem } from '@/api/login.js';
export function GET(url, data) {
return SIMPLE(url, data, 'GET');
}
export function GET_TOKEN(url, data, token) {
return SIMPLE_TOKEN(url, data, token, 'GET');
}
export function POST(url, data) {
return SIMPLE(url, data, 'POST');
}
export function POST_TOKEN(url, data) {
2025-11-24 16:01:45 +08:00
// 从本地存储获取token
var token = uni.getStorageSync("APP_TOKEN") || "";
2025-11-11 17:07:13 +08:00
return SIMPLE_TOKEN(url, data, token, 'POST');
}
export function DELETE(url, data) {
return SIMPLE(url, data, 'DELETE');
}
export function PUT(url, data) {
return SIMPLE(url, data, 'PUT');
}
let requestTime = 0;
export async function SIMPLE(url, data, method) {
2025-11-24 16:01:45 +08:00
// 声明token变量
let token = uni.getStorageSync("APP_TOKEN") || "";
// 在开发环境下跳过自动登录,避免网络请求失败
// 微信小程序无法访问localhost需要使用实际IP或域名
if(requestTime == 0 && process.env.NODE_ENV !== 'development') {
try {
token = await loginSystem();
if(typeof token === 'string') {
requestTime += 1;
}
} catch (error) {
console.log("登录系统失败:", error);
2025-11-11 17:07:13 +08:00
}
2025-11-24 16:01:45 +08:00
} else if(requestTime == 0) {
2025-11-11 17:07:13 +08:00
requestTime += 1;
}
2025-11-24 16:01:45 +08:00
const fullUrl = `${BASE_URL}${url}`;
console.log(`[网络请求] ${method} ${fullUrl}`, data);
2025-11-11 17:07:13 +08:00
return new Promise((resolve, reject) => {
uni.request({
2025-11-24 16:01:45 +08:00
url: fullUrl,
2025-11-11 17:07:13 +08:00
method: method,
header: {
"Content-Type": "application/json;charset=utf-8",
"Authorization": token
},
dataType: 'json',
data: data,
success: res => {
2025-11-24 16:01:45 +08:00
console.log(`[网络响应] ${method} ${fullUrl}`, res.data);
// 首先检查HTTP状态码
if(res.statusCode === 200) {
// 无论返回内容是什么格式,都视为成功
resolve(res)
2025-11-11 17:07:13 +08:00
} else {
reject(res)
}
},
fail: err => {
2025-11-24 16:01:45 +08:00
console.error(`[网络错误] ${method} ${fullUrl}`, err);
// 提供更友好的错误信息
let errorMsg = "网络请求失败";
if(err.errMsg && err.errMsg.includes('url not in domain list')) {
errorMsg = "请求地址未在小程序管理后台配置,请联系管理员";
// 在开发环境下显示更详细的解决方案
if (process.env.NODE_ENV === 'development') {
console.error('\n=== 开发环境网络请求错误解决方案 ===');
console.error('错误原因请求的URL不在小程序合法域名列表中');
console.error('当前请求URL', fullUrl);
console.error('解决方案:');
console.error('1. 在微信开发者工具中,点击右上角的"详情"');
console.error('2. 选择"本地设置"');
console.error('3. 勾选"不校验合法域名、web-view业务域名、TLS 版本以及 HTTPS 证书"');
console.error('4. 重新编译小程序');
console.error('==================================\n');
}
} else if(err.errMsg && err.errMsg.includes('connect fail')) {
errorMsg = "网络连接失败,请检查网络设置";
} else if(err.errMsg && err.errMsg.includes('localhost')) {
errorMsg = "无法连接到本地服务器请检查BASE_URL配置";
}
err.userFriendlyMsg = errorMsg;
2025-11-11 17:07:13 +08:00
reject(err)
}
})
})
}
export function SIMPLE_TOKEN(url, data, token, method) {
2025-11-24 16:01:45 +08:00
const fullUrl = `${BASE_URL}${url}`;
console.log(`[网络请求] ${method} ${fullUrl}`, data);
2025-11-11 17:07:13 +08:00
return new Promise((resolve, reject) => {
uni.request({
2025-11-24 16:01:45 +08:00
url: fullUrl,
2025-11-11 17:07:13 +08:00
method: method,
header: {
"Content-Type": "application/json;charset=utf-8",
"Authorization": token
},
dataType: 'json',
data: data,
success: res => {
2025-11-24 16:01:45 +08:00
console.log(`[网络响应] ${method} ${fullUrl}`, res.data);
// 首先检查HTTP状态码
if(res.statusCode === 200) {
// 无论返回内容是什么格式,都视为成功
resolve(res)
2025-11-11 17:07:13 +08:00
} else {
reject(res)
}
},
fail: err => {
2025-11-24 16:01:45 +08:00
console.error(`[网络错误] ${method} ${fullUrl}`, err);
// 提供更友好的错误信息
let errorMsg = "网络请求失败";
if(err.errMsg && err.errMsg.includes('url not in domain list')) {
errorMsg = "请求地址未在小程序管理后台配置,请联系管理员";
} else if(err.errMsg && err.errMsg.includes('connect fail')) {
errorMsg = "网络连接失败,请检查网络设置";
}
err.userFriendlyMsg = errorMsg;
2025-11-11 17:07:13 +08:00
reject(err)
}
})
})
}
export default {
GET,
POST,
DELETE,
PUT,
GET_TOKEN
}