Files
-----/scoring/utils/request.js
2025-11-24 16:01:45 +08:00

149 lines
4.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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) {
// 从本地存储获取token
var token = uni.getStorageSync("APP_TOKEN") || "";
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) {
// 声明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);
}
} else if(requestTime == 0) {
requestTime += 1;
}
const fullUrl = `${BASE_URL}${url}`;
console.log(`[网络请求] ${method} ${fullUrl}`, data);
return new Promise((resolve, reject) => {
uni.request({
url: fullUrl,
method: method,
header: {
"Content-Type": "application/json;charset=utf-8",
"Authorization": token
},
dataType: 'json',
data: data,
success: res => {
console.log(`[网络响应] ${method} ${fullUrl}`, res.data);
// 首先检查HTTP状态码
if(res.statusCode === 200) {
// 无论返回内容是什么格式,都视为成功
resolve(res)
} else {
reject(res)
}
},
fail: err => {
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;
reject(err)
}
})
})
}
export function SIMPLE_TOKEN(url, data, token, method) {
const fullUrl = `${BASE_URL}${url}`;
console.log(`[网络请求] ${method} ${fullUrl}`, data);
return new Promise((resolve, reject) => {
uni.request({
url: fullUrl,
method: method,
header: {
"Content-Type": "application/json;charset=utf-8",
"Authorization": token
},
dataType: 'json',
data: data,
success: res => {
console.log(`[网络响应] ${method} ${fullUrl}`, res.data);
// 首先检查HTTP状态码
if(res.statusCode === 200) {
// 无论返回内容是什么格式,都视为成功
resolve(res)
} else {
reject(res)
}
},
fail: err => {
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;
reject(err)
}
})
})
}
export default {
GET,
POST,
DELETE,
PUT,
GET_TOKEN
}