zoukankan      html  css  js  c++  java
  • axios的简单的使用

    Axios 是什么?

    Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 XMLHttpRequests。

    特性

    • 从浏览器创建 XMLHttpRequests
    • 从 node.js 创建 http 请求
    • 支持 Promise API
    • 拦截请求和响应
    • 转换请求和响应数据
    • 取消请求
    • 自动转换JSON数据
    • 客户端支持防御XSRF

    基础用法

    引入之后直接使用,不做任何配置

    import axios from 'axios';
    
    // 向给定ID的用户发起请求
    axios.get('/user?ID=12345')
      .then((response) => {
        // 处理成功情况
        console.log(response);
      })
      .catch((error) => {
        // 处理错误情况
        console.log(error);
      })
    

    常规用法

    一般我们在项目中使用都会统一的配置接口的baseUrl,超时时间等等

    import axios from 'axios';
    
    const _axios = axios.create({
        baseUrl: 'http://localhost:9333/api',
        timeout: 1000 * 15,
    })
    

    配置请求拦截器

    在请求拦截器中可以做一些常规配置,比如要给请求头添加token或附加一些特殊的共有数据等等

    _axios.interceptors.request.use(config=>{
        // 添加token
        config.headers.token = 'token';
        // do something
    },error=>Promise.reject(error))
    

    配置返回拦截器

    在请求拦截器中可以做一些常规配置,比如要给请求头添加token或附加一些特殊的共有数据等等

    _axios.interceptors.response.use(config=>{
        // do something
    },error=>{
        // 做一些统一的错误处理
        // 401 需要授权
        // 404 接口不存在
        // 405 请求方式不允许,本来接口是get的而你使用了post
        // 等等
    })
    

    取消重复请求

    在项目中会经常碰到一个按钮连续多次的快速点击,这样就会在极短的时间内请求多次,实际上我们只需要一次返回结果就可以,这个时候就可以取消之前多次的重复提交。

    在此我们会用到 axios.CancelToken 这个方法,具体使用方法可以查看文档

    封装取消请求的方法

    class CancelToken {
      constructor() {
        this.store = new Map();
      }
      add (config)  {
          const key = this.getKey(config);
          new axios.CancelToken((cancel) => {
            if (this.store.has(key)) {
                this.remove(config)
            }
            this.store.set(key, cancel);
          });
      }
      remove (config)  {
          const key = this.getKey(config);
        if (this.store.has(key)) {
          let cancel = this.store.get(key);
          cancel(key);
          this.store.delete(key);
        }
      }
      // 根据请求参数获取唯一的key
      getKey(config){
        const { method, url, params, data } = config;
        return [method, url, params, data].join('-');
      }
    }
    

    使用CancelToken方法

    const cancelToken = new CancelToken();
    // 请求拦截器
    axios.interceptors.request.use(config=>{
        cancelToken.add(config);
    },error=>Promise.reject(error))
    
    // 接收拦截器
    axios.interceptors.response.use(
        response => {
            const config = response.config;
            cancelToken.remove(config)
            Promise.resolve(response)
        },
        error => {
            return Promise.reject(error);
        }
    );
    

    至此,axios的常规使用就介绍完了,感谢各位的阅读。

  • 相关阅读:
    double 和 int 同时存在时的运算
    快速排序
    案例:商品放大镜效果
    淘宝flexible.js源码分析
    案例:模态框拖拽
    Web APIs——BOM
    案例:获取URL参数数据
    案例:5秒之后自动跳转页面
    JS中this指针的指向
    按钮:点击发送短信按钮60秒内不能再次点击的功能
  • 原文地址:https://www.cnblogs.com/guojikun/p/15336686.html
Copyright © 2011-2022 走看看