axios拦截,api统一管理

axios

我们在请求数据的时候使用到axios,但我们每一个页面的数据请求都需要用到axios,如果重复的使用,造成代码的繁多,且占据了大量内存,所以,我们可以把axios进行封装,在页面进行调用就可以了,使用axios以及他的封装具体操作如下
1)首先,先引入插件axios

npm install axios --save-dev

2)在我们的项目src文件下创建一个http的文件夹,创建一个http.js和api.js
http.js用来写我们的封装,api.js用来写我们封装的接口

下面进行axios封装

1)引入axios

import axios from “axios”;

2)引入vuex

import store from “@/store/index”;

3)引入vant

import { Toast } from “vant”;

4)引入我们的环境变量

import baseUrl from “@/config/index”;

5)创建axios实例

const instance = axios.create({
	// axios.create 创建axios实例
    timeout: 5000,
    // 如果请求超过事件,就放弃这个请求
    baseUrl
    // 域名
})

6)添加请求拦截
我们可以在请求拦截上添加loading动画,以及携带token

// 添加请求拦截器
// 在发送请求之前进行拦截
instance.interceptors.request.use(
  //
  function(config) {
    // 在发送请求之前做些什么

    if (store.state.token) {
      config.headers.Authorization = store.state.token;
      //在配置的头信息里添加授权字段=vuex里的token
    }
    //如果vuex中有token,证明已经登陆了,在发送请求的时候携带token
    // 在请求的头信息里 的Authorization字段携带token
    return config;
  },
  function(error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  }
);

7)响应拦截
我们在响应拦截中,可以关闭loading动画,判断返回的状态码来做响应的操作

// 添加响应拦截器
instance.interceptors.response.use(
  function(response) {
    // 对响应数据做点什么
    // console.log(response);
    if (response.data.msg === "无效token") {
      router.push({
        path: "/login",
      });
    }
    return response;
    //如果后台返回的数据告诉我们 token是无效的 就跳转到登陆页面
  },
  function(error) {
    // 对响应错误做点什么
    return Promise.reject(error);
  }
);

7)导出封装的axios函数

// 封装http方法,如果请求成功就把请求到的数据return 如果响应失败就执行失败的catch函数
// data是post的传参  params是get的传参
export default function http(url, method, data = {}, params = {}) {
  return instance({
    url,
    data,
    method,
    params,
  })
    .then((res) => {
      console.log(res);
      if (res.status >= 200 && res.status < 300) {
        return res;
      } else {
        return Promise.reject(res.data.meta.msg);
        //失败的回调
      }
    })
    .catch((err) => {
      return Promise.reject(err);
      //走失败的回调
    });
}

// axios拦截器 就是对请求和响应进行拦截,拦截之后做一些事情,做完之后才继续放行

api的统一管理

在api.js写入我们封装的接口
qs是一个插件
需要下载

yarn add qs -S
import request from "./http"; //导入axios实例
import qs from "qs" 

let obj={
getlist(){
  return request({
      url:"/index.json",//我们需要请求的接口
      method:"get",
      params:{},
      hideloading:true
  })  
},

}
export default obj;

index.js代码:

/** 
 * api接口的统一出口
 */
// 文章模块接口
import article from '@/api/article';
// 其他模块的接口……
 
// 导出接口
export default {    
    article,
    // ……
}

在组件中的使用(按需导入)

import {article} from '@/api/index'

created(){
   article.articleList().then(info=>{
       if(info.code==200)
     this.num=info.data
  }
     })
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值