axios封装 (axios拦截,api统一管理)

本文介绍了如何在Vue项目中使用axios进行HTTP请求的封装,包括创建axios实例、环境配置切换、请求和响应拦截,以及如何通过模块化管理接口。还提及了必要的跨域处理和脚本配置,使得代码更具可维护性和复用性。
摘要由CSDN通过智能技术生成

首先在 src下新建 文件夹如 http 里面有
request.js 用来封装axios
api.js 用来放置我们的接口请求

然后就可以开始操作了
现在request.js里操作

先安装axios npm i axios --save

环境切换

创建config目录和src同级
config里创建env.development.js
env.production.js
env.test.js

如env.development.js

module.exports={
    baseUrl:' http://www.devele.com:4456' //开发环境用到的baseurl
}

切换环境
在request.js



 import axios from "axios" // 引入axios
import store from "@/store/index"  //引入vuex
import { Toast } from "vant"  // 引入vant的轻提示

// 环境的切换
const {baseUrl}=require('../config/env.'+process.env.NODE_ENV);

如果切换报错 可能我们还需要 跨域处理 vue.config.js

并且还需要在package.json里修改添加

 "scripts": {
    "serve": "vue-cli-service serve --open",
    "build": "vue-cli-service build",
    "test": "vue-cli-service build --mode testing"
  },

创建axios实例

 const instance = axios.create({
    timeout:5000,
    baseURL:``
})

添加请求拦截
使用 axios实例.interceptors.request.use(成功回调,失败回调);
我们可以在请求拦截中开启loading动画,判断用户是否登录,以及携带token


instance.interceptors.request.use(config=>{ // config(成功的回调) 就是我们一些请求的配置  
    // vant loading动画

    Toast.loading({
        message:'加载中...',
        forbidClick:true,
        loadingType:'splinner',
    })
    if(store.state.token){
        // vuex中的token是否是空,如果不为空就设置请求头,携带token
        config.headers.Authorization = store.state.token
    }
    // 一定要返回config,否则报错
    return config
},error=>{
    // 失败回调
    return Promise.reject(error)
})

响应拦截
使用 axios实例.interceptors.response.use(成功回调,失败回调);
我们在响应拦截中,可以关闭loading动画,判断返回的状态码来做响应的操作

instance.interceptors.response.use(response=>{ //成功的回调
    // 关闭vant动画

    Toast.clear();
    // 必须返回 返回值
    return response
    
}, 
//失败回调

// function (error){
//     // 必须有返回值
//     return Promise.reject(error)
// }
error=>{
    return Promise.reject(error)
}
)

导出封装的axios函数

export default (url,method,params)=>{
    // 返回我们的axios实例
    return instance({
        url:url,
        method:method,
        params:params,
        
    }).then((res)=>{// res 我们后端返回的数据

        // 如果我们返回的数据状态码为200-300之间就是成功
        if(res.status>=200&&res.status<300){
            return res
        }else{
             // 失败返回一个Promise对象
            return Promise.reject(res.data)
        }
        // 请求失败返回一个Promise对象
    }).catch(err=>{
        return Promise.reject(err)
    })
}

api统一管理
方便后期管理 接口(修改)、重复利用

import http from './request'  // 引入封装好的axios

async function getlist(obj){  //obj 可传参
    let res = await http('接口地址','方法',{需要传的参数})
    return res
}

export {
    getlist,  // 导出
}

然后在哪用就

 <script>
import {getlist} from "../http/api"  // 引入即可
export default {
  data(){
    return{

    }
  },
  mounted(){
    getlist().then((res)=>{
      console.log(res);
    })
  }
}
</script>
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值