axios
简述
- 是什么
- 前端最流行的ajax请求库
- react/vue官方都推荐使用axios发ajax请求
- 特点
- 基本promise的异步ajax请求库
- 浏览器端/node端都可以使用
- 支持请求/响应拦截器
- 支持请求取消
- 请求/响应数据转换
- 批量发送多个请求
请求方式
- GET 请求指定的页面信息,并返回实体主体
- POST 向指定资源提交数据进行处理请求(如提交表单或者上传文件),数据被包含在请求体中,POST请求可能会导致新的资源的建立和或已有资源的修改
- PUT 从客户端向服务器传送的数据取代指定的文档的内容
- DELETE 请求服务器删除指定的页面
- CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
- OPTIONS 允许客户端查看服务器的性能
- TRACE 回显服务器收到的请求,主要用于测试或诊断
- HEAD 类似get请求,不过返回的响应中没有具体的内容,用于获取报头
请求参数
- query参数
- 该参数包含在请求地址中,格式为:/xx?name=tom&age=18
- 敏感数据不要使用该参数,因为参数是地址的一部分,比较危险
- 该参数又称为查询字符串,编码格式为urlencoded
- params参数
- 该参数包含在请求地址中,格式为:xx/tom/18
- 敏感数据不要使用该参数,因为参数是地址的一部分,比较危险
- 请求体参数
- 该参数包含在请求体中,可以通过浏览器开发工具或抓包工具查看
- 该参数的格式有3种
1.urlencoded格式
如:name=tom&age=18
对应请求头:Content-Type:application/x-www-form-urlencoded
2.json格式
如:{"name":"tom","age":18}
对应请求头:Content-Type:application/json
3.form-date格式(用于文件上传请求)
对应请求头:Content-Type:multipart/from-data
请求参数与方式的对应关系
- GET请求的参数只可以为query参数和params参数
- POST请求的参数可以为任意,但是一般只用请求体参数
- 其他的请求方式的参数也是可以为任意,但是一般只用请求体参数
API的分类
- API是什么
请求方式、请求地址以及请求参数一起构成了API
- 分类
- 发送请求进行CRUD哪个操作有请求方式决定
- 同一个请求路径可以进行多个操作
- 请求方式一般为GET/POST/PUT/DELETE
- 请求方式不决定请求的CRUD操作
- 一个请求路径只对应一个操作
- 一般只有GET/POST
XHR的API
- XMLHttpRequest():创建xhr对象的构造函数
- status:响应状态码值:如200,404
- statusText:响应状态文本
- readyState:标识请求状态的只读属性
- 0:初始
- 1:open()之后,send()之前
- 2:send()之后
- 3:请求中
- 4:请求完成
- onreadystatechange:绑定readyState改变的监听
- responseType:指定响应数据类型,如果是'json',得到响应后自动解析响应体数据
- response:响应体数据,类型取决于responseType的指定
- timeout:指定请求超时时间,默认0代表为没有限制
- ontimeout:绑定超时的监听
- onerror:绑定请求网络错误的监听
- open():初始化一个请求,参数为:(method,url[,async])
- send(data):发送请求
- abort():请求终断
- getResponseHeader(name):获取指定名称的响应头值
- getAllResponseHeaders():获取所有响应头组成的字符串
- setRequestHeader(name,value):设置请求头
axios用法
- 完整
- axios(obj),返回一个promise对象
- obj
{
method:'请求方式',
url:'请求路径'
params:{},
data: {},
}
- 简写
- axios.get('请求路径',obj),返回一个promise对象
- obj请求参数,{
params:{},
}
{},
- axios.defaults.baseURL = "默认的api";
axios.defaults.baseURL = "http://49.232.47.192:9527/api";
axios.get("/goodList", { params: { page: 1 } })
- axios.create(obj)
- 根据指定配置创建一个新的axios,也就是每个新的axios都有自己的配置
- 新axios只是没有取消和批量发送请求的方法,其他所有语法都是一致的
- 例子
const instance = axios.create({
baseURL: "http://49.232.47.192:9527/api",
})
instance({
method: "GET",
url: "/goodList",
params: {
page: 1,
},
})
- 拦截器
- 请求拦截器,在请求还没发出去之前,第一步把请求拦截,第二步根据具体业务逻辑,决定是否放行
axios.interceptors.request.use(
(config) => {
return config;
},
(error) => {}
);
.....此处跟上普通的axios请求.....
- 响应拦截器,在响应数据回来的时候,对其进行一步拦截检查操作
axios.interceptors.response.use(
(response) => {
return response;
},
(error) => {}
);
.....此处跟上普通的axios请求.....
- 取消请求
const { CancelToken } = axios;
axios({
method: "GET",
url: "http://49.232.47.192:9527/api/goodList",
params: {
page: 1,
},
CancelToken: new CancelToken((c) => {
this.cancel = c;
}),
}).then(
(value) => {},
(reason) => {}
);
this.cancel()