Axios语法
Created|Updated
|Word count:1.5k|Reading time:7min|Post View:
AXIOS
Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中,向服务器发送AJAX请求进行数据交换
安装
使用 npm:
使用 bower:
使用 cdn:
1
| <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.21.1/axios.min.js"></script>
|
基本使用
默认发送
1 2 3 4
| <script> axios({url:'https://www.fastmock.site/mock/a62b6007be40808b2edb8a8a3fb54c6a/api/book'}) .then(res =>{ console.log(res.data.data.list);}) </script>
|
使用get发送无参请求
1 2 3 4
| <script> axios({url:'https://www.fastmock.site/mock/a62b6007be40808b2edb8a8a3fb54c6a/api/book', method:'get'}) .then(res =>{ console.log(res.data.data.list);}) </script>
|
通过axios使用get发送有参请求
1 2 3 4 5 6 7 8 9
| <script> axios({url:'https://www.fastmock.site/mock/a62b6007be40808b2edb8a8a3fb54c6a/api/book?id:999', }) .then(res=>console.log(res)) </script>
<script> axios({url:'https://www.fastmock.site/mock/a62b6007be40808b2edb8a8a3fb54c6a/api/book, params:{ id:1002 } }).then(res=>console.log(res)) </script>
|
使用post发送无参请求
1 2 3 4 5
| <script> axios({url:'https://www.fastmock.site/mock/5130d2d2fbd00f0defbe3da6e10cd169/books/serach', method:'post'}) .then(res =>{ console.log(res.data.data);}) </script>
|
使用axios发送post发送有参请求
1 2 3 4 5 6
| <script> axios({url:'https://www.fastmock.site/mock/a62b6007be40808b2edb8a8a3fb54c6a/api/tests', method:'post', data:'忽如寄'}) .then(res =>{ console.log(res.data.data);}) </script>
|
axios基本使用
使用axios.get发送无参请求
1 2 3 4
| <script> axios.get('https://www.fastmock.site/mock/a62b6007be40808b2edb8a8a3fb54c6a/api/book') .then(res => console.log(res.data.desc)) .catch(err => console.warn('失败了' +err)) </script>
|
使用axios.get发送有参请求
1 2 3 4 5 6 7
| <script> axios.get('https://www.fastmock.site/mock/a62b6007be40808b2edb8a8a3fb54c6a/api/book', {params:{id:1002}}) .then(res => console.log(res.data.desc)) .catch(err => console.warn('失败了' +err)) </script>
|
使用axios.post发送有参请求 – 只修改前端代码
1 2 3 4 5 6 7
| <script> axios.post('https://www.fastmock.site/mock/5130d2d2fbd00f0defbe3da6e10cd169/books/serach', "id:1002&&bookname:'Web前端开发实战") .then(res => {console.log(res.data.data.list)}) .catch(err => console.log(err)) </script>
|
使用data传递数据 后台需要将axios自动装换的json数据转换为java对象 – 修改后台代码
1 2 3 4 5 6
| <script> axios.post('https://www.fastmock.site/mock/5130d2d2fbd00f0defbe3da6e10cd169/books/serach',{bookname:'Web前端开发实战'}) .then(res => {console.log(res.data.data.list)}) .catch(err => console.log(err)) </script> ` 接收参数添加 @requestBody 注解`
|
axios并发请求
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <script> axios.all([ axios.get('https://www.escook.cn/api/cart'), axios.get('https://www.escook.cn/api/cart', { params: { id: 2 } }), ]) .then(res => console.log(res[0], res[1])) .catch(err => console.log(err)) </script>
<script> axios.all([ axios.get('https://www.escook.cn/api/cart'), axios.get('https://www.escook.cn/api/cart', { params: { id: 2 } }), ]) .then( axios.spread((res1, res2) => { console.log(res1); console.log(res2); }) ).catch(err => console.log(err)) </script>
|
axios全局配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <script> axios.defaults.baseURL = "https://www.escook.cn/api";
axios.defaults.timeout = 5000;
axios.get('cart') .then(res=>console.log(res))
axios.post('***') .then(res=>console.log(res)) .catch(err=>console.log(err)) </script>
|
axios实例
1 2 3 4 5 6 7 8 9 10
| <script> let newVar = axios.create({ baseURL:'https://www.escook.cn/api', timeout: 5000 }) newVar({ url:'cart' }).then(res=>console.log(res)) </script>
|
axios拦截器
拦截器的作用:用于我们在网络请求的时候发起请求或者响应时对操作进行响应的处理
场景:发起请求时可以添加页面加载的动画 强制登录 响应时进行相应的数据处理
axios提供了两大类拦截器
请求方向的拦截( 成功请求,失败请求 )
1 2 3 4 5 6 7 8 9 10 11 12 13
| <script> axios.interceptors.request.use(config => { console.log('进入拦截器'); console.log(config); return config; }),err=>{ console.warn('请求拦截失败'); console.warn(err); }
axios.get('https://www.escook.cn/api/cart') .then(res=>console.log(res)) </script>
|
请求响应的拦截( 成功的, 失败的)
1 2 3 4 5 6 7 8 9 10 11
| <script> axios.interceptors.response.use(config => { console.log('进入响应截器'); return config.data.list; }), err => { console.warn('响应方向失败'); }
axios.get('https://www.escook.cn/api/cart') .then(res => console.log(res)) </script>
|
axios在vue中的模块封装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
`封装的位置` import axios from 'axios'
export function request(config, success, fail) { axios({ url: config }).then(res => { success(res) }).catch(err => { fail(err) }) }
`调用的位置` import { request } from "./network/request"; request('https://www.escook.cn/api/cart', res => console.log(res), err => console.log(err), )
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
`封装的位置` import axios from 'axios' export function request(config) { axios.defaults.baseURL = "https://www.escook.cn/api/cart" axios(config.url) .then( res => config.success(res) ) .catch( err => config.fail(err) ) }
`调用的位置` import { request } from "./network/request"; request({ url: 'https://www.escook.cn/api/cart', success: res => { console.log(res) }, fail: err => { console.log(err) } })
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
`封装的位置` import axios from 'axios' export function request(config){ return new Promise((resolve,reject) => { let newVar = axios.create({ baseURL: 'https://www.escook.cn/api', timeout: 5000 }); newVar(config).then(res => { resolve(res); }).catch(err => { reject(err) }) }) }
`调用的位置` import { request } from './network/request' request({ url:'cart' }).then(res => {console.log(res) }).catch(err => console.log(err))
|
终极方案<推荐>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| `封装的位置`
import axios from 'axios' export function request(config){ let newVar = axios.create({ baseURL:'https://www.escook.cn/api', timeout: 5000 }) return newVar(config) }
`调用的位置` import { request } from './network/request' request({ url: 'cart' }).then(res => { console.log(res) }).catch(err => console.log(err))
|