关于vue.js:Vue封装Axios网络请求

须要先得有两个概念:

  1. 申请胜利和申请失败
  2. 申请胜利之后,获取后果的胜利与失败

因为工作中网络申请的数据有很多,所以咱们须要将网络申请封装

  1. 筹备工作:src文件夹下创立utils文件夹,在utils文件夹下创立request.js文件,接着上代码
//封装网络申请
    import $axios from "axios"
    import qs from "query-string"

    // 错误信息的响应办法
    const errorHandle = (status,other) => {
            switch(status){
                case 400:
                // 申请头和服务器的限度
                    console.log(" 服务器不了解申请的语法");
                    break;
                case 401:
                    // token验证失败,用户身份验证失败
                    console.log("(未受权) 申请要求身份验证");
                    break;
                case 403:
                    // 用户身份过期了,服务器申请限度
                    console.log("(禁止) 服务器拒绝请求");
                    break;
                case 404:
                    // 网络申请地址谬误
                    console.log("(未找到) 服务器找不到申请的网页。");
                    break;
                default:
                    console.log(other);
                    break;
            }
             }


// 创立axios对象
const instance = $axios.create({
    timeout:5000  // 申请超时
})

// 全局配置
instance.defaults.baseURL = 'http://iwenwiki.com';
// instance.defaults.headers.common['Authorization'] = AUTH_TOKEN;
instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

// 创立申请拦挡和响应拦挡操作
instance.interceptors.request.use(config =>{
        // 配置
        if(config.method === 'post'){
            config.data = qs.stringify(config.data);
        }
        return config;
    },
    error => Promise.reject(error)
)

instance.interceptors.response.use(
    // 胜利 
    /**
     * 胜利和失败的判断:
     *  1.申请胜利和申请失败
     *  2.申请胜利:后果的胜利和后果的失败
     */
    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),
    error => {
        const { response } = error; // ES6的解构赋值
        /**
         * response蕴含的信息:
         *  status
         *  data
         */

        // if(response){
        //     // 给出开发者具体的错误信息
        //     // errorHandle(response.status,response.data);
        //     return Promise.reject(response);
        // }else{
        //     console.log("申请中断或者断网了");
        // }

        
        if(error){
            errorHandle(error.status,error.data);
            return Promise.reject(error);
        }else{
            console.log('申请中断那或者断网');
        }
        
    }
)

export default instance;
  1. src文件夹下创立api文件夹,api文件夹下创立base.js (存储全副申请门路)
const base = {
    baseURL : "http://xxx",
    xx : "xxx"
    }
 export default base;
  1. api文件夹下创立index.js (申请办法的对立解决 )
import $axios from '../utils/request'
         import base from './base'
               const api = {
           xx函数(){
                 //return  $axios.get|post(base.baseURL + base.xx)
                 return  $axios.get|post(base.baseURL + base.xx,{
                             params
                         })
                }
        }
          export default api;
  1. 组件引入并应用
    import api from ‘../xxx;
    api.xx函数(无参|有参).then()……
    或者将api挂载到全局
    import api from ‘../xxx’ ;
    Vue.prototype.$api = api ;
    this.$api.get | post(申请)

【腾讯云】轻量 2核2G4M,首年65元

阿里云限时活动-云数据库 RDS MySQL  1核2G配置 1.88/月 速抢

本文由乐趣区整理发布,转载请注明出处,谢谢。

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据