2025-03-JS-SDK-PDA/common/MyRequest.js

83 lines
2.8 KiB
JavaScript
Raw Normal View History

2025-03-11 09:45:29 +08:00
import store from '../store'; // 引入 Vuex store
import { navigateToLogin } from '@/utils/navigationUtils'; // 引入导航工具函数
const baseurl = store.state.backendUrl;
/**
* 封装的请求函数
* @param {string} url - 请求的URL路径
* @param {Object} data - 请求的数据
* @param {string} method - 请求的方法默认为 'POST'
* @returns {Promise} - 返回一个Promise对象
*/
export default function MyRequest(url = '', data = {}, method = 'POST') {
const myurl = baseurl + url; // 拼接完整的请求URL
console.log(myurl);
console.log(data);
// 从Vuex store获取token和session
const token = store.state.token;
const session = store.state.session;
return new Promise((resolve, reject) => {
uni.request({
url: myurl, // 请求的完整URL
method: method, // 请求方法,默认为 'POST'
header: {
'Content-Type': 'application/json;charset=utf-8',
'Authorization': `Bearer ${token}`, // 添加token到请求头
'Session': session // 添加session到请求头
}, // 请求头,指定数据格式为 JSON
data: data, // 请求数据
success: (res) => {
console.log(res);
if (res.statusCode === 200) {
// 检查响应数据中的错误信息
if (res.data && res.data.statusCode === 401) {
// console.error("请求被拒绝token失效");
// navigateToLogin(); // 跳转到登录页面
// reject(res.data);
resolve(res.data); // 返回响应数据
} else {
resolve(res.data); // 返回响应数据
}
} else {
handleRequestError(res); // 处理其他状态码错误
reject(res);
}
},
fail: (err) => {
console.log(err);
handleRequestError(err); // 处理请求错误
reject(err);
}
});
});
}
/**
* 处理请求错误
* @param {Object} err - 错误对象
*/
function handleRequestError(err) {
console.log("状态码: " + err.statusCode);
const statusCode = err.statusCode;
switch (statusCode) {
case 401:
console.error("请求被拒绝token失效");
navigateToLogin(); // 跳转到登录页面
break;
case 404:
console.error("没有找到页面");
break;
case 405:
console.error("错误的请求方法");
break;
case 415:
console.error("不支持的媒体类型");
break;
default:
console.error(`请求失败,状态码: ${statusCode}`, err);
}
}