axios的简易二次封装

基本使用
import axios from 'axios';
import qs from 'qs'
// 引入进度条
import nprogress from 'nprogress'
// 引入进度条样式
import 'nprogress/nprogress.css'
//axios 基本使用
axios.get(url, {
    params: {

    }
}).then(() => {

}).catch(() => {

})
1:根据环境变量区分接口默认地址
switch(process.env.NODE_ENV){
    case 'production':
        axios.defaults.baseURL = 'http://生产:3000'
        break
    case 'beat':
        axios.defaults.baseURL = 'http://测试:3000'
        break
    default:
        axios.defaults.baseURL = 'http://测试:3000'
        break
}
2:配置超时时间和跨域的时候 是否携带凭证
 axios.defaults.timeout = 10000
 axios.defaults.withCredentials = true
3:设置请求传递的数据的格式 x-www-form-urlencoded 看服务器要求什么格式
 axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded'
 axios.defaults.transformRequest = data =>qs.stringify(data)
4:拦截器:请求拦截器 响应拦截器
设置请求拦截器 reuqest
 axios.interceptors.request.use(config=>{
            // congig 配置对象 里面有请求头
            // 携带token
            let token = localStorage.getItem('TOKEN')
            token &&  (config.headers.Authorization = token)
            nprogress.start() // 开启进度条
            return config;
        },error=>{
            return Promise.reject(error)
        })
设置响应拦截器 服务器返回信息-> 响应拦截器(网络错误处理,授权错误处理 普通错误处理) -> 客户端处理
  axios.interceptors.response.use(response=>{
        nprogress.end()// 关闭进度条
        return response.data // 响应拦截器中返回主体
        },error =>{
            let {response} = error
            if(response){
                //服务器最起码返回结果了
                switch(response.status){// 根据不同状态码做不同处理
                    case 401 : // =>权限
                    // 跳转路由或提示
                    break;
                    case 403 : // TOKEN过期 服务器拒绝执行
                    // dosomthing
                    break
                    case 404 : // 找不到地址
                    //dosomthing
                    break
                }
            }else{
                // 服务器连结果都没有返回,
                if(!Window.navigator.onLine){//断网
                    //断网处理:可以跳转断网页面/根据需求处理
                    return
                }
                return Promise.reject(error)
            }
        })
五:取消请求

使用场景:快速连续点击一个按钮,比如是订单的 就会生成两个订单。tab切换频繁的切换查询,如果响应很慢,也会产生重复请求
如何解决:XMLHttpRquest对象中有个属性 .abort(),就是可以中断用已经发生的请求。
https://juejin.cn/post/6968630178163458084#heading-28

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值