83 lines
2.8 KiB
JavaScript
83 lines
2.8 KiB
JavaScript
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);
|
||
}
|
||
}
|