# 41.axios

# 1.axios 概述

# 1).axios 的基本特性

axios (官网: https//github.com/axios/axios) 是一个基于Promise用于浏览器和node.js的HTTP客户端.

  • 支持浏览器和node.js
  • 支持promise
  • 能拦截请求和响应
  • 自动转换JSON数据
  • 能转换请求和响应数据

# 2).axios的基本用法

axios.get('/adata')
	.then(ret => {
      // data 属性名称是固定的
  	  console.log(ret.data)
	})
1
2
3
4
5

# 2.axios 的常用API

  • get: 查询数据
  • post: 添加数据
  • put: 修改数据
  • delete: 删除数据

# 1).GET传递参数

  • 通过 URL 传递参数
  • 通过 params 选项传递参数
axios.get('/adata?id=123')
	.then(ret => {
      console.log(ret.data)
	})
1
2
3
4

Restful形式:

axios.get('/adata/123')
	.then(ret => {
      console.log(ret.data)
	})
1
2
3
4

通过 params 选项传递参数:

axios.get('/adata', {
  params: {
    id: 123
  }
})
  .then(ret => {
     console.log(ret.data)
  })
1
2
3
4
5
6
7
8

# 2).DELETE传递参数

  • 参数传递方式与GET类似
axios.delete('/adata?id=123')
	.then(ret => {
       console.log(ret.data)
	})
1
2
3
4

Restful形式:

axios.delete('/adata/123')
	.then(ret => {
       console.log(ret.data)
	})
1
2
3
4

通过 params 选项传递参数:

axios.delete('/adata', {
  params: {
    id: 123
  }
})
  .then(ret => {
     console.log(ret.data)
  })
1
2
3
4
5
6
7
8

# 3).POST传递参数

  • 通过选项传递参数 (默认传递的是json格式的数据)
axios.post('/adata',{
  uname: 'tom',
  pwd: 123
}).then(ret => {
  console.log(ret.data)
})
1
2
3
4
5
6
  • 通过 URLSearchParams传递参数 (application/x-www-form-urlencoded)
const params = new URLSearchParams();
params.append('param1','value1');
params.append('param2','value2');
axios.post('/api/test', params).then(ret=>{
  console.log(ret.data)
})
1
2
3
4
5
6

# 4).PUT传递参数

  • 参数传递方式与POST类似
axios.put('/adata/123',{
  uname: 'tom',
  pwd: 123
}).then(ret => {
  console.log(ret.data)
})
1
2
3
4
5
6

# 3.axios的响应结果

响应结果的主要属性

  • data: 实际响应回来的数据
  • headers: 响应头信息
  • status: 响应状态码
  • statusText: 响应状态信息
axios.post('/axios-json').then(ret => {
  console.log(ret)
})
1
2
3

# 4.axios 全局配置

#  配置默认地址
axios.defaults.baseURL = 'https://api.example.com';
#  配置超时时间
axios.defaults.timeout = 3000;
#  配置公共的请求头
axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;
axios.defaults.headers['mytoken'] = "aqwwssaafaafafafafafaa"  // 设置请求头
#  配置公共的 post 的 Content-Type
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
1
2
3
4
5
6
7
8
9

# 5.axios 拦截器

# 1).请求拦截器

  • 在请求发送前设置一些信息
    • 例如在每个请求体里加上token,统一做了处理如果以后要改也非常容易
// 添加一个请求拦截器
axios.interceptors.request.use(function(config){
  // 在请求发出之前进行一些信息设置
  # 1.1  任何请求都会经过这一步   在发送请求之前做些什么   
  config.headers.mytoken = 'nihao';
  # 1.2  这里一定要return   否则配置不成功  
  return config;
}, function(err){
  // 处理响应的错误信息
})
1
2
3
4
5
6
7
8
9
10

# 2).响应拦截器

  • 在获取数据之前对数据做一些加工处理
    • 例如在服务器返回登录状态失效,需要重新登录的时候,跳转到登录页
	// 添加一个响应拦截器
    axios.interceptors.response.use(function(res) {
      // 在这里对返回的数据进行处理
      #2.1  在接收响应做些什么  
      var data = res.data;
      return data;
    }, function(err){
      #2.2 对响应错误做点什么  
      console.log(err)
    })
1
2
3
4
5
6
7
8
9
10
上次更新: 2020/10/27 下午11:58:10