axios封装

3,989 阅读1分钟

一. 配置

1.下载axios

npm i axios

2.在src目录新建文件夹 创建http.js文件

image.png

二. 封装内容

  • 通过axios封装可实现全局loading、配置请求头、操作提示、路由拦截等功能
// 引入axios
import axios from 'axios'
// 引入提示框(以实际项目为准)
import { Message } from "element-ui";
// 引入路由(以实际项目为准)
import router from '@/router'
//引入loading组件(以实际项目为准)
import { Loading } from 'element-ui';
// 创建的axios的实列 instance
const instance = axios.create({
    baseURL: '/api', // 基准地址  可直接配置路径,也可代理路径(以实际项目为准)
    timeout: 10000 // 超时时间
})
// 请求拦截
// 声明变量接收logding
let loadingInstance
instance.interceptors.request.use((config) => {
    // 设置请求头
    let token = localStorage.getItem('token')
    config.headers.Authorization = token
    //设置logding配置 赋值
    loadingInstance = Loading.service({
        lock: true,
        text: '拼命加载中...',
        spinner: 'el-icon-loading',
        background: 'rgba(0, 0, 0, 0.7)'
    });
   // 返回请求头
    return config
}, err => {
   // 请求失败返回失败信息
    return Promise.reject(err)
})

// 响应拦截
instance.interceptors.response.use((res) => {
    // 响应成功则关闭loading加载
    loadingInstance.close();
    //返回响应数据
    return res
}, err => {
    // 响应失败则关闭loading加载  
    setTimeout(() => {
        loadingInstance.close();
    }, 1000);
    // 响应失败返回失败信息
    return Promise.reject(err)
})
导出实例
export default instance

三. 实际应用

  • 在src文件夹继续创建接口文件 如api.js等 亦可依据实际开发需求分类创建文件夹

image.png

  • 在页面中引入,传递对应参数,即可实现请求接口
<script>
引入接口
import { reqLogin } from "@/utils/api";
export default {
  data() {
    return {
      form: {
        username: '',
        password: ''
      }
    };
  },
  methods: {
    // async配合await将异步转为同步  且等待接口完成返回再继续执行
    async login() {
      // 使用catch反向逻辑,避免过多逻辑嵌套
      const res = await reqLogin(this.from).catch(err => {
        // 提示错误, 终止执行
        return console.error(err)
      })
      console.log(res, '请求成功');
    }
  },
  created() { },
  computed: {},
  components: {},
};
</script>