zoukankan      html  css  js  c++  java
  • Vue-Aixos

    Axios

    • npm install axios
    • 在 main.js
    import Axios from "axios";
    Vue.prototype.$Axios = Axios;
    

    5 种请求方法

    • get =获取数据
    • post = 提交数据(表单提交,文件上传) 一般用于新建、添加
    • put = 更新数据(所有数据都推送到后端,后端更新数据库) 一般用于更新
    • patch = 更新数据(只把修改的数据推送到后端,后端更新数据库)
    • delete = 删除数据

    get | post | put | patch | delete 请求

    this.$Axios.get("/data.json").then(res => {
      console.log(res);
    });
    

    并发请求, 使用 axios.all 与 axios.spread 这 2 个 api 来进行 请求与处理数据

    this.$Axios
      .all([this.$Axios.get("/data.json"), this.$Axios.get("/city.json")])
      .then(
        this.$Axios.spread((dataRes, cityRes) => {
          console.log(dataRes);
          console.log(cityRes);
          // 或者
          console.log(dataRes, cityRes);
        })
      );
    

    Axios 参数配置

    baseURL: "http://localhost:8080"; //请求的域名、基本地址
    timeout: 1000; //请求超时时长 默认1000ms,一般后端定义
    url: "/data.json"; //请求路径
    method: "get、post、put、patch、delete"; //请求方法
    headers: {
      token: "密钥之类";
    } //设置请求头
    params: {
    } //请求参数拼接在url上
    data: {
    } //亲求参数放在请求体里
    

    1、axios 全局配置

    axios.defaults.timeout = 1000;
    axios.defaults.baseURL = "http://localhost:8080";
    

    2、axios 实例配置

    let instance = axios.create();
    instance.defaults.timeout = 3000;
    

    3、axios 请求配置

    instance.get("/data.json", {
      timeout: 5000
    });
    

    有优先级高-低:3-2-1

    在实际开发过程中全局配置用的比较少

    • 2 种请求接口:
    • http:localhost:9090
    • http:localhost:9091
    	let instacne = axios.create({
        	baseURL:'http:localhost:9090'
            timeout:1000
        })
    	let instacne1 = axios.create({
        	baseURL:'http:localhost:9091'
            timeout:3000
        })
    //baseURL | timeout | url | method | params
    instacne.get('/contactlist',{params{}).
    then(res=>console.log(res))
    //baseURL | timeout | url | method
    instacne1.get('/orderList',{timeout:5000}).
    then(res=>console.log(res))
    

    Axios 拦截器

    • 在请求或者响应被处理前拦截他们
    • 请求拦截器 | 响应拦截器

    请求拦截器

    axios.interceptors.request.use(
      config => {
        //发送请求前,做些什么
        return config;
      },
      err => {
        //请求错误时,做些什么
        return Promise.reject(err);
      }
    );
    

    响应拦截器

    axios.interceptors.response.use(
      response => {
        //发送成功对响应数据做出处理
        return response;
      },
      err => {
        //响应错误做些什么
        return Promise.reject(err);
      }
    );
    //这里return一个 response出来,带有then方法与数据。不理解可以去看下Promise
    axios
      .get("/xxx")
      .then(res => console.log(res))
      .catch(err => console.log(err));
    

    取消拦截器(了解即可)

    let interceptors = axios.interceptors.request.use(config => {
      config.headers.auth = ture;
      return config;
    });
    // 取消
    axios.interceptors.request.eject(interceptors);
    

    case

    • 微博评论,登录状态(token:'')
    // 访问需要登录的接口
    let instance = axios.create({});
    instance.interceptors.request.use(config => {
      config.headers.token = "密钥token";
      return config;
    });
    
    • 微博你不登录,也是可以看别人的微博的
    // 访问不需要登录的接口
    let instance = axios.create({});
    instance.get('/xxxx').then(res=>console.log(res));
    
    • 移动端开发
    let instance_phone = axios.create({});
    instance_phone.interceptors.request.use(config => {
      //请求加载模态框
      $("#modal").show();
      return config;
    });
    instance_phone.interceptors.response.use(response => {
      //关闭模态框
      $("#modal").hide();
      return response;
    });
    

    错误处理-请求错误时进行对应的处理

    axios.interceptors.request.use(
      config => {
        return config;
      },
      err => {
        return Promise.reject(err);
      }
    );
    axios.interceptros.response.uer(
      response => {
        return response;
      },
      err => {
        return Promise.reject(err);
      }
    );
    this.$Axios
      .post("/data.json")
      .then(res => {
        console.log(res);
      })
      .catch(err => {
        console.log(err);
      });
    
    • 实际开发过程中,一般统一添加错误处理
    let instance = axios.create({});
    //  请求拦截
    instance.interceptors.request.use(
      config => {
        return config;
      },
      err => {
        //请求错误 这里 http状态码 以4开头
        //401 超时
        //404 找不到
        // 模态框
        $("#Modal").show();
        setTimeout(function() {
          $("#Modal").hide();
        }, 2000);
        return Promise.reject(err);
      }
    );
    // 响应拦截
    instance.interceptors.response.use(
      res => {
        return res;
      },
      err => {
        // 响应错误处理, http状态码 以5开头
        // 500 系统错误
        // 502 系统重启
        // 模态框
        $("#Modal").show();
        setTimeout(function() {
          $("#Modal").hide();
        }, 2000);
        return Promise.reject(err);
      }
    );
    // 请求案例
    instance
      .get("/xxxx")
      .then(res => {
        console.log("请求成功");
      })
      .catch(err => {
        console.log("如果上面的弹窗还不够,需要特殊处理,那么我们在这里搞定");
      });
    

    取消请求

    用于取消正在进行的http请求(了解即可)
    实际项目中,使用并不多

    let source = axios.CancelToken.source();
    axios.get('/xxx'{cancelToken:source.token}).
    then(res=>console.log(res)).
    catch(err=>console.log(err))
    //取消请求(message可选)
    source.cancel('cancel http')
    //什么情况下使用取消请求
    // CRM管理系统,大批量查询,响应需要3-5秒时间,这时候我不想查这个东西,我要查其他的了,就要取消请求了。节省资源
  • 相关阅读:
    心得
    第七章
    第六章
    第五章
    第四章
    第三章
    第二章
    第一章
    实验2(4)
    实验2(3)
  • 原文地址:https://www.cnblogs.com/suni1024/p/12575717.html
Copyright © 2011-2022 走看看