vue cli3的http请求封装

本文详细介绍了如何在Vue CLI3项目中进行HTTP请求的封装,通过配置axios,实现请求拦截、响应拦截以及错误处理等功能,提升前端应用的网络请求效率和统一性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import Cookies from 'js-cookie'

const TokenKey = 'access_token'
const contractNo = 'contractNo'

export function getToken() {
  return Cookies.get(TokenKey)
}

export function setToken(token) {
  return Cookies.set(TokenKey, token)
}

export function removeToken() {
  return Cookies.remove(TokenKey)
}
export function getContractNo() {
    return Cookies.get(contractNo)
}
import axios from 'axios'
import { MessageBox,Toast,Indicator} from "mint-ui";
// import Qs from 'qs' //引入方式
import {getToken,getContractNo} from './auth'
//form数据格式化
function formdata(obj) {
    //表单格式提交
    let data = new FormData();
    for (let j in obj) {
      data.append(j, obj[j]);
    }
    return data;
  }
let request = axios.create({
    baseURL: process.env.NODE_ENV === 'production'?`${window.location.protocol}//${window.location.host}/api`:`http://sitxqy.bndxqc.com/api`,
    timeout: 2500,
    headers: {
        "Content-Type": "application/json",
        channel: "XQYH5",
    }
});

// 响应拦截
request.interceptors.request.use(
  config => {
    Indicator.open();
    config.headers.access_token = getToken();
    if (config.method === 'post') {
        if(!config.data.FLAG){
            config.data = formdata(config.data);
        }else{
            config.data = JSON.stringify(config.data);
        }
    }
    return config;
  },
  error => {
    setTimeout(()=>{
        Indicator.close()
      },1000);
    return Promise.reject(error)
  }
)
function layout(){
  MessageBox.alert('由于您登录时间过长,为确保您的账户安全,请重新登录', '提示').then(()=>{
    window.location.href = `/login?ht=${getContractNo()}`
  })
}
request.interceptors.response.use(
  response => {
      const {status,statusText,data}= response;
      const {httpCode,msg} = data;
      Indicator.close()
    if(status!==200){
      if(status==499||status==498){layout();}
      return Promise.reject(statusText)
    }
    //token过期了,需要重新登录
     if(httpCode == 499 || httpCode== 498){
      layout();
      return Promise.reject(msg)
    } else if (httpCode == 200) {
      return Promise.resolve(data)
    }else {
      MessageBox.alert(msg, "提示");
      return Promise.reject(msg)
    }
  },
  error => {
      Indicator.close()
      error = error?error.toString():"";
    if(error.includes('499')||error.includes('498')){
      layout();
      return Promise.reject(error)
    }
    Toast({
      message: '请重新请求!',
      duration: 5000
    });
    return Promise.reject(error)
  }
)

export default request
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值