初识 axios

作者: Guangchao | 来源:发表于2021-08-23 12:20 被阅读0次

    axios 是什么?

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

    为什么选择 axios ?

    选择一:

    传统的Ajax 是基于XMLHttpRequest(XHR)

    配置和调用方式非常混乱

    选择二:

    jQuery -Ajax

    在使用vue搭建框架,构建项目时完全没有必要为了网络请求就引用这个重量级的框架

    选择三:

    Vue-resource

    不再更新

    选择四:

    axios vue官方推荐

    • 作者推荐
    • 在浏览器中发送 XMLHttpRequests 请求
    • 在 node.js 中发送 http 请求
    • 支持 Promise API
    • 拦截请求和响应
    • 转换请求和响应数据

    要学习 axios 的什么内容?

    1.认识 axios 网络模块
    2.发送基本请求
    3.axios 创建实例
    4.axios 拦截器的使用

    使用 axios

    安装

     npm install axios
    

    最简单的网络请求

    <script>
      axios({
          url:" //",
          methods: 'get'  //get请求 或者post请求
      }).then(res => {  
              console.log(res);
          })
    </script>
    
    • axios 对象调用 get 方法
      .then() 成功回调, .catch() 失败回调。
      get 方法也可以把url 中的参数提出来单独放到一个对象中。 axios 中的 all() 方法,传入一个数组,数组元素即为函数调用,函数中即为请求调用。然后 , then() 回调方法中调用 axios 自己的spread() 方法 .只有 url 是必须的。在请求或响应 被 then 或 catch 处理前拦截他们

    基本使用

    <script>
      axios({
          url: '//',
            params: {
                type:'pop',
                page:1 
            }
      }).then(res => {
          console.log(res);
      }
    <script/>
    //这里的params 是对象类型
    
    //发送post请求
    axios.post('/user',{
         firstName:'simon',
         lastName:'kli'
    }).then(res => console.log(res))
        .catch(err => console.log(err));
    
    //执行get请求
    import axios from 'axios'
    axios.default.baseURL = 'http://localhost:3000/api/products'
    axios.get('/user?ID = 12345')
            .then(res => console.log(res))
            .catch(err => console.log(err));
    //可配置参数的方式
     axios.get('/user',{
        params: {
            ID:12345
        }
    }).then(res => console.log(res))
        .catch(err => console.log(err));
    

    params 是添加到 url 的请求字符串中的,一般用于 get 请求,data 是添加到 请求体(body)中的,一般用于 post 请求

    axios 的请求方式

    axios 是基于 Promise 的,因此可以使用 Promise ApI
    axios的请求方式:

    axios(config)
    axios.request(config)
    axios.get(url [,config])
    axios.post(url [,data [,config]])
    axios.put(url [,data [,config]])
    axios.delete(url [,config])
    axios.patch(url [,data [,config]])
    axios.head(url [,config])

    axios 发送并发请求

    有时候我们可能会需要同时发送两个请求

    • 使用axios.all 可以放入多个请求的数组
    • axios.all([]) 返回的结果是一个数组,使用 axios.spread可以将数组[res1.res2]展开为res1,res2
    axios.all([axios({
        url:'//' ,   
    }),axios ([
        url:'//',
            params: {
                type:'sell',
                page:4
            }
    ])]).then(axios.spread(res1,res2) =>{
            console.log(res1);
            console.log(res2);
    }
    

    设置全局配置

      axios.defaults.baseURL = '//';
      axios.defaults.timeout = 5000;
    

    axios 实例

    为避免设置全局的默认请求地址不符合想要的请求时,设置 axios 实例,设置后可以灵活使用地址

    const instance1 = axios.create({
        baseURL: 'http://ssssss',
        timeout:5000
    })
    instance1 ({
        url: '/kkk/lll/kfse'
    }).then(res => {
        console.log(res);
    })
      instance1({
          url:'/sdfs/sggg',
          params: {
              type:'pop',
               page:1
           }
     })
    

    模块封装

    为避免对第三方框架的依赖,实现模块封装,避免因框架问题导致的项目出错
    将网络请求的封装单独放在一个文件中利用一个媒介去使用框架,而不是每个需要请求数据的地方都去请求一次

    import axios from 'axios'
    export function request1(config) {
      return new Promis ((resolve,reject) => {
          const instance = axios.create({
               baseURL:'//',
                timeout: 5000 
           })  
            instance(config)
              .this(res => {
                resolve(res)
              })
              .catch(err => {
                   reject(err)
              })
      })
    }
    

    使用axios 拦截器

    什么是 axios 拦截器?

    封装一个对象对请求成功和请求失败、响应成功和响应失败进行拦截

    有什么用?

    • config 中一些信息不符合服务器的要求
    • 每次发送网络请求时,都希望界面中显示一个请求的图标
    • 某些网络请求(比如登录(taken)) 必须携带一些特殊的信息
    <script>
    instance.interceptors.request.use(config =>{    
        console.log(config);
        return config  
        },err =>{ 
            console.log(err);
        })
    </script>
    
    响应拦截
    <script>//对结果进行拦截
        instance.interceptors.response.use(res => {
            console.log(res);
            return res.data;
        },err => {
            console.log(err);
        })
    </script>
    

    相关文章

      网友评论

        本文标题:初识 axios

        本文链接:https://www.haomeiwen.com/subject/ujbkiltx.html