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