Axios 使用小结
工作的项目是前后端分离的,前端项目采用 Vue
相关的技术栈进行搭建,与此同时,前端请求的方式也发生了改变,由原来 Jquery
中 ajax
变为 axios
;
在使用的过程中当然存在一些疑问,在这里作下小小的汇总;
axios 是什么
GitHub 地址:https://github.com/axios/axios,aixos 是一个基于Promise
的Http
库,主要使用在浏览器和以node.js
作为后端的应用中。安装和使用官网里已经有了,可以看下中文网的文档。
简单对比
两种库的请求:
1 | // Jquery ajax post 侵吞跪求 |
执行多个并发请求
1 | // 获取用户公开信息 |
项目中的封装
axios
提供api
来传递配置创建请求,所以可以进行一个简易的封装,方便前端统一管理接口。避免在main.js
或者各个vue
文件中重复引入axios
;或者写相同的接口,如:axios.get('/user?ID=12345')
。
简单封装 request.js
使用自定义配置创建一个axios
实例,其他api.js
使用这个实例进行创建
1 | import axios from 'axios' |
请求拦截,在 axios 中,post 请求中的数据会传递 json 形式的数据回到后端,即Content-Type
为appliaction/json
;后端的接口需要加上注解@RequestBody
来接收json
参数,为了兼容一下老的接口需要作一定的处理
1 | // request interceptor |
返回信息拦截
1 | // response interceptor |
使用 request.js
1 | import request from "@/http/request"; |
为了方便维护前端 api 函数,在 vue 项目生成的 src 中创建api
文件夹。
1 | +---api |
封装 BaseApi
随着写模块越来越多,自热而然会产生一些重复的代码,比如:
a-api.js
1 | import request from '@/http/request' |
b-api.js
1 | import request from '@/http/request' |
接口形式差不多,感觉可以抽离一个公共的 js 进行调整,当然这个封装的前提是前后端都约定后一些通用的接口形式
1 | export default class BaseApi { |
使用 BaseApi
user-sign.js 用户注册相关 api
1 | import BaseApi from "@/api/base"; |
其他:
其他一些比较重要的,就列在这里,来源官网
请求方法的别名
为方便起见,为所有支持的请求方法提供了别名
1 | axios.request(config) |
注意
在使用别名方法时, url
、method
、data
这些属性都不必在配置中指定。
并发
处理并发请求的助手函数
1 | axios.all(iterable); |
创建请求的配置
1 | { |
响应结构
1 | { |