vue+axios 请求封装

mac2025-03-30  6

import axios from 'axios' import router from '../router/index' import { Message } from 'element-ui' import { showFullScreenLoading, tryHideFullScreenLoading } from '@/utils/loading' import { getToken, getUser } from '@/utils/auth' import QS from 'qs' // 引入qs模块,用来序列化post类型的数据,后面会提到 // 创建axios实例 const service = axios.create({ baseURL: process.env.BASE_URL, // api的base_url timeout: 5000 // 请求超时时间 }) // request拦截器 service.interceptors.request.use( config => { config.headers = { UserId: getUser(), Authorization: getToken() } showFullScreenLoading() return config }, error => { Promise.reject(error) } ) // respone拦截器 service.interceptors.response.use( response => { //当返回信息为未登录或者登录失效的时候重定向为登录页面 tryHideFullScreenLoading() return response }, error => { tryHideFullScreenLoading() //当返回信息为未登录或者登录失效的时候重定向为登录页面 if (error.response.status == '401') { router.push({ path: '/login', query: { redirect: router.currentRoute.fullPath } //从哪个页面跳转 }) } Message({ message: error.message, type: 'error', duration: 5 * 1000 }) return Promise.reject(error) } ) /** * get方法,对应get请求 * @param {String} url [请求的url地址] * @param {Object} params [请求时携带的参数] */ export function get(url, params) { return new Promise((resolve, reject) => { service .get(url, { params: params }) .then(res => { resolve(res.data) }) .catch(err => { reject(err.data) }) }) } /** * post方法,对应post请求 * @param {String} url [请求的url地址] * @param {Object} params [请求时携带的参数] */ export function post(url, params) { return new Promise((resolve, reject) => { service .post(url, params) .then(res => { resolve(res.data) }) .catch(err => { reject(err.data) }) }) }
最新回复(0)