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

  

 

 

 

 

  

  

 

posted @ 2021-02-28 23:25  zmztyas  阅读(175)  评论(0编辑  收藏  举报