隐藏
«

vue请求封装

时间:2024-7-25 10:09     作者:suxiaojun     分类:


1.创建环境文件.env.development和.env.production

// 开发环境
# 页面标题
VUE_APP_TITLE = 'Blog'

# 开发环境配置
ENV = 'development'

# 开发环境
VUE_APP_BASE_API = '开发环境域名'

# 路由懒加载
VUE_CLI_BABEL_TRANSPILE_MODULES = true

// 生产环境
# 页面标题
VUE_APP_TITLE = 'Blog'

# 生产环境配置
ENV = 'production'

# 生产环境
VUE_APP_BASE_API = '生产环境域名'

2.二次封装请求

// 1.引入 axios
import axios from 'axios';
import { Message } from 'element-ui';
// 引入 cookie
import { getCookie } from './cookie';

// 2.创建 axios 实例
const service = axios.create({
  // 3.配置
  baseURL: process.env.VUE_APP_BASE_API,
  timeout: 60 * 1000 //请求的超时时间
})

// 4.请求拦截
service.interceptors.request.use(
  config => {
      config.baseURL = process.env.VUE_APP_FastAdmin_API;

    //设置 token
    if (localStorage.getItem('token')) {
      config.headers.token = localStorage.getItem('token');//token  代表从后台传过来的token的令牌
    } else {
      config.headers.token = getCookie('token');//token  代表从后台传过来的cookie的令牌
      if (getCookie('token')) {
        localStorage.setItem('Token', getCookie('token'))
      }
    }
    if (config.method === 'get' && config.params) {
      let url = config.url + '?';
      let keys = Object.keys(config.params);
      for (let key of keys) {
        url += `${key}=${encodeURIComponent(config.params[key])}&`;
      }
      // let url = config.url + '?' + tansParams(config.params);
      url = url.slice(0, -1);
      config.params = {};
      config.url = url
    }
    return config;
  },
  err => {
    return Promise.reject(err);
  }
)

// 5.响应拦截
service.interceptors.response.use(
  res => {
    // console.log(res);
    const data = res.data;
    //如果后台返回的报错码和报错信息的话
    if (data.code === 1 || (data.code >= 200 && data.code <= 299)) {
      return data;
    } else if (data.code == 0) {
      Message({
        type: "error",
        message: data.msg,
        duration: 2000
      });
      return data;
    }
  },
  err => {
    console.log(err);
    if (err.response.data.code === 401) {
      localStorage.removeItem("UserInfo");
      localStorage.removeItem("myInfo");
      localStorage.removeItem("Token");
      Message({
        type: "error",
        message: '请先登录',
        duration: 2000
      })
    } else if (err.response.data.code === 50003) {
      Message({
        type: "error",
        message: '服务器维护中',
        duration: 2000
      })
    } else {
      Message({
        type: "error",
        message: err,
        duration: 2000
      })
    }
  }
)

// 6.导出
export default service;

3.cookie配置

// 封装了cookie
import Cookies from "js-cookie";

// 创建cookie
export function setCookie(key, value, expires) {
    return Cookies.set(key, value, { expires: expires })
}

// 获取 cookie
export function getCookie(key) {
    return Cookies.get(key);
}

// 删除cookie
export function removeCookie(key) {
    return Cookies.remove(key);
}