// src/utils/request.js import axios from "axios"; // 创建 axios 实例 const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // 从环境变量中读取 API 基础地址 timeout: 60000, // 请求超时时间 headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, }); // 请求拦截器 service.interceptors.request.use( (config) => { // 在发送请求之前做一些处理,例如添加 token const token = localStorage.getItem("token"); if (token) { config.headers["Auth"] = `${token}`; } return config; }, (error) => { // 对请求错误做些什么 return Promise.reject(error); } ); // 响应拦截器 service.interceptors.response.use( (response) => { // 对响应数据做一些处理 const res = response.data; if (!res.status) { // 如果返回的 status 不是 true,则视为错误 // return Promise.reject(new Error(res.info || "请求失败")); } return res; }, (error) => { // 对响应错误做些什么 if (error.response) { switch (error.response.status) { case 401: // 未授权,跳转到登录页 window.location.href = "/login"; break; case 404: // 资源未找到 console.error("资源未找到"); break; case 500: // 服务器错误 console.error("服务器错误"); break; default: console.error("请求失败", error.message); } } return Promise.reject(error); } ); /** * 封装请求方法 * @param {string} method 请求方法 (GET, POST, PUT, DELETE 等) * @param {string} url 请求地址 * @param {object} data 请求参数 * @param {object} config 其他 axios 配置 * @returns {Promise} 返回请求结果 */ const request = (method, url, data = {}, config = {}) => { const lowerCaseMethod = method.toLowerCase(); if (lowerCaseMethod === "get") { // GET 请求将参数拼接到 URL 上 return service({ method: "get", url, params: data, ...config, }); } else { // 其他请求(POST, PUT, DELETE 等)将参数放在请求体中 return service({ method: lowerCaseMethod, url, data, ...config, }); } }; export default request;