zoukankan      html  css  js  c++  java
  • vue 之 axios的使用(拦截器)

    为什么选择axios?作者推荐和功能特点

    作者在2016年11月发微博:vue-resource不在为官方推荐的ajax库,推荐使用axios

    功能特点:

       在浏览器中发送XMLHttpRequests请求

       在node.js中发送http请求

      支持Promise API

      拦截请求和响应

      转换请求和响应数据

    axios请求方式

       axios(config)

       axios.request(config)

      axios.get(url[,config])

      axios.delete(url[,config])

      axios.head(url[,config])

      axios.post(url[,data[,config]])

      axios.put(url[,data[,config]])

      axios.patch(url[,data[,config]])

    安装axios

    npm i axios -S
    

    常见用法

    axios({
        url:'请求地址',
    method:'get' //默认是get请求,可以不写 }).then(res=>{ console.log(res) })


    axios.post(url,{name:'',age:18})

    axios并发请求 axios.all

    axios.all(
    [
      axiost({
         url:''
      }),
      axios({
         url:'',
         params:{
             type:'',
             page:5
         }
     })
    ]
    ).then(result=>{
    
    })    

    延展写法,这里可以替换上面代码的then部分
    .then(axios.spread(res1,res2)=>{
    console.log(res1);
    console.log(res2);
    })

      

    axios全局配置,其他请查看官网

    axios.defaults.baseURL = 'http://123.123.123:8080'
    axios.defaults.timeout = 5
    

    axios 的实例和模块封装

    在main.js里面写,请看后面,是一定要封装的requrest.js

    const instance1 = axios.create({ baseURL:'http://123.123.123:8000', timeout:5000 }) instance1({ url:'/home/mltidata' }).then(res=>{ }) instance1({ url:'/home/data', params:{ name:'张三', age:'18' } })

    const instance2 = axios.create({
    baseURL:'http://345.345.345:8000',
    timeout:10000,
    headers:{}
    })

      

    request.js

    import axios from 'axios'
    
    export function request(config,success,failure){
        //1.创建axios的实例
         const instance = axios.create({
             baseURL:'http://123.123.123:8000',
             timeout:5000
         })  
    
    }
    
    //发送真正的网络请求
    instance(config).then(res=>{
       success(res)
    }).catch(err=>{
       failure(err)
    })
    
    //调用
    
    request({url:""},res=>{},err=>{})
    

      

    最终的解决方案(推荐使用)

    export function request(config)
    {
      return new Promise((resolve,reject)=>{
           //1.创建axios的实例
           const instance = axios.create({
              baseURL:'http://123.123.123:8000',
              timeout:5000
          })
          instance(config).then(res=>{
             resolve.log(res)
         }).catch(err=>{
              reject(err)
         })
      })
    }

    //调用
    request({url}).then(res=>{

    }).catch(err=>{

    }),

      

    最终解决方案简化版

    export function request(config)
    {
    
           //1.创建axios的实例
           const instance = axios.create({
              baseURL:'http://123.123.123:8000',
              timeout:5000
          })

    2.axios的拦截器


    3.发送真正的网络请求 return instance(config) } //调用 request({url}).then(res=>{ }).catch(err=>{ }),

      

    如何使用拦截器?

    使用场景:

     1.比如config中一些信息不符合服务器的要求

     2.比如每次发送网络请求时,都希望在界面中显示一个请求的图标

     3.某些网络请求(比如登录(token),必须携带一些特殊的信息)

    axios提供了拦截器,用于每次发送请求或者得到响应后,进行对应的处理

    //配置请求和响应拦截
    instance.interceptors.request.use(config=>{
       console.log('来到了request拦截success中');
       return config
    },err=>{
       console.log('来到了request拦截器failure中')
       return err
    })
    
    instance.interceptors.response.use(response=>{
       console.log('来到了response拦截success中');
       return response.data
    },err=>{
       console.log('来到了response拦截器failure中')
       return err
    })
    

      

      

      

  • 相关阅读:
    第13章 使用ADO.NET访问数据库
    第11章 连接查询和分组查询
    第10章 模糊查询和聚合函数
    第9章 数据查询基础
    数据库前三章测试题
    用表组织数据
    程序数据集散地:数据库
    深入C#的String类
    线程池
    hadoop-2.8.0 完全分布式运行模式
  • 原文地址:https://www.cnblogs.com/zmztya/p/14461230.html
Copyright © 2011-2022 走看看