• 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
    })
    

      

      

      

  • 相关阅读:
    关于datax的SqlServerReader 插件文档读取设置
    SQLyog13.1.1连接MySQL 8.0.19时出现的2058错误,加密方式因版本支持问题解决方法。
    mysql客户端版本太低的问题,应该是先改变加密方式再修改密码.client does not support authentication protocol requested by server consider upgrading mysql client
    IntelliJ IDEA的JavaWeb开发环境搭建
    异构数据源同步工具DataX Web用户手册(一、安装)
    datax安装
    Sql Server 中 根据具体的值 查找该值所在的表和字段
    1202. 交换字符串中的元素
    路径总和
    买卖股票的最佳时机(II)
  • 原文地址:https://www.cnblogs.com/zmztya/p/14461230.html
Copyright © 2020-2023  润新知