json-server 快速搭建http服务
json-server包快速搭建http服务
axios
axios特性
axios界说
axios 就是一个建立在HTTP客户端的Promise对象用于浏览器和nodejs发送Ajax请求
browser 端 发送AJax请求
Nodejs端 发送http请求
支持PromiseAPI
请求响应拦截器
对请求和响应数据做转换
取消请求
自动将结果转化为JSON数据
做保护拦截跨站攻击
axios安装
npm install axios
npm uninstall axios
axios基础设置
axios常用属性:method url data请求体
get请求:得到post/2 的数据信息
因为axios返回结果是一个Promise对象 所以其后可以跟
.then 指定成功的回调
post发送:上传一份post数据
put请求:进行数据更新
delete:删除数据
- buts[0].onclick=function(){
- //发送axios put请求
- axios({
- method:'get',
- url:'http://localhost:3000/post/2',
- }).then(response=>{
- console.log(response);
- });
- }
- buts[1].onclick=function(){
- //发送axios post请求
- axios({
- method:'post',
- url:'http://localhost:3000/post',
- //设置响应体
- data:{
- 'title':"你好中国",
- 'author':"赵四"
- }
- }).then(response=>{
- console.log(response);
- });
-
- }
- buts[2].onclick=function(){
- //发送axios put请求
- axios({
- method:'put',
- url:'http://localhost:3000/post/2',
- //put修改数据
- data:{
-
- author:"张三"
- }
- }).then(response=>{
- console.log(response);
- });
-
- }
- buts[3].onclick=function(){
- //发送axios delete请求
- axios({
- method:'delete',
- url:'http://localhost:3000/post/7c59',
- }).then(response=>{
- console.log(response);
- });
-
- }
复制代码
axios其他利用方式(axios常用方法)
axios.request()
得到所有批评
axios.post()
添加批评
axios响应
response
response结果
config 设置对象
data 响应体
axios自动将服务器返回结果进行json解析,转成对象,方便对结果进行处理
headers 响应头信息
行 头 空行 体
request 原生AJax请求对象
request属性所保存的就是当前AJax发送请求时所创建 的AJax请求对象
status 响应状态码
statusText 响应状态字符串
axios请求对象
指axios在调用时所接受的参数对象
请求设置 | Axios中文文档 | Axios中文网 (axios-http.cn)
不但指axios请求对象的参数对象,还包括request post等他们当中都用到config设置对象
{
url:'',
method:'',
baseURL:'',
// `transformRequest` 答应在向服务器发送前,修改请求数据
// 它只能用于 'PUT', 'POST' 和 'PATCH' 这几个请求方法
// 数组中末了一个函数必须返回一个字符串, 一个Buffer实例,ArrayBuffer,FormData,或 Stream
// 你可以修改请求头。
transformRequest: [function (data, headers) {
// 对发送的 data 进行恣意转换处理
return data;
}],
// `transformResponse` 在传递给 then/catch 前,答应修改响应数据
transformResponse: [function (data) {
// 对吸收的 data 进行恣意转换处理
return data;
}],
//自界说请求头
headers: {'X-Requested-With': 'XMLHttpRequest'},
// `params` 是与请求一起发送的 URL 参数
// 必须是一个简单对象或 URLSearchParams 对象
params: {
ID: 12345
},
data: {
firstName: 'Fred'
},//传递json情势的数据 要求请求体为json情势
data: 'Country=Brasil&City=Belo Horizonte',
//传递URL参数情势 要求请求体为URL参数情势
// `timeout` 指定请求超时的毫秒数。
// 如果请求时间凌驾 `timeout` 的值,则请求会被停止
timeout: 1000, // 默认值是 `0` (永不超时)
}
头信息 url参数
axios默认设置
axios创建实例对象发送ajax请求
创建axios实例对象利用的优势 提供数据服务的服务器不只一个
用axios默认设置设置baseurl只能用于向一个端口发送请求
此时在发送请求时可以做到逐一对应,想向哪一个端口发送请求,直接调用呢个对象利用方法就行
想给谁发 调哪个对象
应用场景:发送请求时逐一对应
拦截器(回调函数)
设置拦截器
发送请求
请求拦截器成功回调=》响应拦截器成功回调=》自界说成功回调
多个拦截器执行次序
请求拦截器,后进后执行
响应拦截器,先进先执行
请求拦截器中config设置对象
设置响应拦截器的response
axios取消请求
请求部分的设置
取消请求的设置
json-server延时响应
报错cancle不是函数的,跟是否弃用无关,大概是json-server的 -d 2000没有成功开启,另一种快捷方法是network改成慢3G,在请求完成前点击取消按钮,就不会报这个错了
-d 这个api似乎弃用了
axios连续请求自动将前次未完成的请求取消设置
axios源码分析
utils工具函数文件
index.js整个包的入口文件
axios 与 Axios
axios由来
模仿axios的制作过程
构造函数
原型添加相关方法
为什么get等方法可以发送请求,因为 该方法内部调用了request方法
声明函数
最闭幕果axios既是函数,又是对象
模仿axios发送请求(核心结构)
request函数
dispatchRequest
adapter 适配器
axios
adapter=> dispatchRequest => request => axios
axios拦截器运行原理
interceptors
axios.interceptors.request === new InterceptorManager()
执行use方法时
use方法只是保存回调函数,保存到request的hendlers
axios的request请求对hendlers数组进行美满,将请求拦截器回调往前放,响应拦截器回调往后放
最终通过循环的方式 以跳板的方式执行
模仿实现axios拦截器
构造函数
Axios设置
拦截器管理器构造函数
创建axios函数
请求执行拦截器回调
用拦截器管理器保存回调
在request中调用拦截器回调函数
axios取消请求工作原理
xhr.js文件中
request.abort()AJax取消请求
只要config.cancelToken.promise状态发生改变,就会执行取消请求的下令
在取消请求文件中
运行cancel()
模仿实现axios取消请求
cancelToken函数
cancel 执行=》 resolvePromise执行=》 this.promise状态变为成功
关于取消请求的处理
xhr.abort()的位置
在xhradapter中 xhr变乱绑定下面
原理:cancelToken身上维护了一个属性Promise,将改变该Promise状态的变量暴露到全局
cancel执行 内部resolvePromise执行 cancelToken.promise(resolve执行) 状态变为成功
发送xhr请求中 Promise.then 中回调执行,xhr.abort 执行
总结
axios与Axios的关系
整体流程
拦截器
响应拦截器
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |