发表于 2024-7-27 01:05:32

axios

json-server     快速搭建http服务

json-server包快速搭建http服务
https://img-blog.csdnimg.cn/direct/5066715662344ff5a7e4f2beb640d487.png


https://img-blog.csdnimg.cn/direct/060cdf98421c4597a3e80ea4a0973366.png
axios


axios特性

axios界说

axios 就是一个建立在HTTP客户端的Promise对象用于浏览器和nodejs发送Ajax请求
https://img-blog.csdnimg.cn/direct/579b354983924c7394c871f6912a4b3e.png
browser 端 发送AJax请求
Nodejs端 发送http请求

https://img-blog.csdnimg.cn/direct/7f2ac6a02b4c4fee95bfb4ed9882528e.png
支持PromiseAPI
请求响应拦截器
对请求和响应数据做转换
取消请求
自动将结果转化为JSON数据
做保护拦截跨站攻击 

axios安装

https://img-blog.csdnimg.cn/direct/0c9bbe91ffb74d168bc72a9cb1d17e35.png

https://img-blog.csdnimg.cn/direct/6ade72f97e164e7cb0571380adb4edbc.png



npm install axios
npm uninstall axios


axios基础设置

axios常用属性:method  url  data请求体
get请求:得到post/2 的数据信息

https://img-blog.csdnimg.cn/direct/7671f591cdca409ca148512fabda08bd.png

因为axios返回结果是一个Promise对象          所以其后可以跟
.then 指定成功的回调


post发送:上传一份post数据

https://img-blog.csdnimg.cn/direct/eb8eb766f3a4437aaafb631f0be68d28.png
https://img-blog.csdnimg.cn/direct/44429a7d6cab461ab28c9047ea68cbaa.png



put请求:进行数据更新

https://img-blog.csdnimg.cn/direct/dc450870c5654d749ac94e3c3a40bb8b.png
delete:删除数据

https://img-blog.csdnimg.cn/direct/03b370ebc0004c8183223130802dc91b.png
buts.onclick=function(){
            //发送axios   put请求
            axios({
                method:'get',
                url:'http://localhost:3000/post/2',

            }).then(response=>{
                console.log(response);
            });
      }
      buts.onclick=function(){
            //发送axios      post请求
            axios({
                method:'post',
                url:'http://localhost:3000/post',
                //设置响应体
                data:{
                  'title':"你好中国",
                  'author':"赵四"
                }

            }).then(response=>{
                console.log(response);
            });
            
      }
      buts.onclick=function(){
            //发送axios    put请求
            axios({
                method:'put',
                url:'http://localhost:3000/post/2',
                //put修改数据
                data:{
                  
                  author:"张三"
                }

            }).then(response=>{
                console.log(response);
            });
            
      }
      buts.onclick=function(){
            //发送axiosdelete请求
            axios({
                method:'delete',
                url:'http://localhost:3000/post/7c59',

            }).then(response=>{
                console.log(response);
            });
            
      }
axios其他利用方式(axios常用方法)

https://img-blog.csdnimg.cn/direct/a71958b892e545cdb53f33275a34eb35.png
axios.request()

得到所有批评
https://img-blog.csdnimg.cn/direct/f3d5c368078f407491a98484bdb7f203.png
axios.post()

添加批评
https://img-blog.csdnimg.cn/direct/fd1f9db198844a17aeb6d2903f6ab75c.png
https://img-blog.csdnimg.cn/direct/e0b5dad2a3094da192a38f534365427d.png
axios响应

response


response结果
config   设置对象

https://img-blog.csdnimg.cn/direct/439929b83dab40dbbc4ae8e43b94adbf.png
https://img-blog.csdnimg.cn/direct/2c58070a29094d56a97752c03131e368.png
data        响应体

https://img-blog.csdnimg.cn/direct/5ebe38f53cdd49b9a4249adb1eb9e8ee.png
axios自动将服务器返回结果进行json解析,转成对象,方便对结果进行处理
https://img-blog.csdnimg.cn/direct/d7a1b3f28da94beb9bddd911fb61212c.png

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` (永不超时)
}

https://img-blog.csdnimg.cn/direct/002e5089a4b74b41845f6e8b4c82086b.png
https://img-blog.csdnimg.cn/direct/21a23ae0a07540b48e49062570b476b8.png
头信息         url参数


axios默认设置

https://img-blog.csdnimg.cn/direct/bfb8b9333cec4d398e78063b1530e71c.png



axios创建实例对象发送ajax请求


https://img-blog.csdnimg.cn/direct/6ddda4a858c845f8a6d4fa5ab30f0a8a.png
https://img-blog.csdnimg.cn/direct/df08dc5fd3c24568b4d07806c7f29c08.png
https://img-blog.csdnimg.cn/direct/d7c45de4b9ad4bd9a0c4056f71a0b676.png


创建axios实例对象利用的优势       提供数据服务的服务器不只一个
用axios默认设置设置baseurl只能用于向一个端口发送请求

https://img-blog.csdnimg.cn/direct/c302dc273a51487f990443a2578c5f17.png
此时在发送请求时可以做到逐一对应,想向哪一个端口发送请求,直接调用呢个对象利用方法就行
  想给谁发  调哪个对象




应用场景:发送请求时逐一对应

拦截器(回调函数)

https://img-blog.csdnimg.cn/direct/f2906a9db2e94a9ba64c1e48248738a6.png
https://img-blog.csdnimg.cn/direct/82f4c2a8da9c44558365f91b7b0de7c5.png

设置拦截器

https://img-blog.csdnimg.cn/direct/62c96f023910467997e820d8938f93d5.png
发送请求

https://img-blog.csdnimg.cn/direct/c9ce4460accd4495a3a6a78d8b038282.png
请求拦截器成功回调=》响应拦截器成功回调=》自界说成功回调



多个拦截器执行次序

https://img-blog.csdnimg.cn/direct/05960b13798b47b0bf966960a596dcdc.png

请求拦截器,后进后执行
响应拦截器,先进先执行

请求拦截器中config设置对象

https://img-blog.csdnimg.cn/direct/49479f4350664c3684dbf2a5e15830b6.png
设置响应拦截器的response
https://img-blog.csdnimg.cn/direct/8f1154f6f64044569aad9c2e45912ab4.png



axios取消请求


https://img-blog.csdnimg.cn/direct/bab2f7ff3df3460d934cf576ab6d0df1.png
https://img-blog.csdnimg.cn/direct/8b5c83ab8c614b1bb4b41622efef7515.png




请求部分的设置

https://img-blog.csdnimg.cn/direct/3f56387da673413cb76af1c86da067e8.png

取消请求的设置
https://img-blog.csdnimg.cn/direct/0054bf998fbc4f5ba0a9336dfba5fe14.png

json-server延时响应

https://img-blog.csdnimg.cn/direct/1ec05483d8124e52811fa0e13cad6bea.png
报错cancle不是函数的,跟是否弃用无关,大概是json-server的 -d 2000没有成功开启,另一种快捷方法是network改成慢3G,在请求完成前点击取消按钮,就不会报这个错了
-d 这个api似乎弃用了

axios连续请求自动将前次未完成的请求取消设置


https://img-blog.csdnimg.cn/direct/10af6110d37e4a8b847525811681f2a2.png

axios源码分析

https://img-blog.csdnimg.cn/direct/67612da427e246bca677751c5fd671e5.png
https://img-blog.csdnimg.cn/direct/05c9a7ccd9ea496ba9b5f37d9eb1d976.pngutils工具函数文件 
index.js整个包的入口文件







axios 与 Axios  

axios由来

https://img-blog.csdnimg.cn/direct/7d45e23efb0442cfb99f7eb6d3a40031.png
https://img-blog.csdnimg.cn/direct/32fec4a181a7484abd378f18c7f53244.png






模仿axios的制作过程


构造函数

https://img-blog.csdnimg.cn/direct/8f6fb18057764499a4216809d7539903.png
https://img-blog.csdnimg.cn/direct/7ecb0250460844f4b7edff35048aed0b.png


原型添加相关方法

https://img-blog.csdnimg.cn/direct/b139f98031734de3a96d2b3806eba686.png
为什么get等方法可以发送请求,因为 该方法内部调用了request方法


声明函数

https://img-blog.csdnimg.cn/direct/6c4b5e9d308e437a96363e0e9c019e67.pnghttps://img-blog.csdnimg.cn/direct/54a46bc0509843d8be753424143d93ce.png


最闭幕果axios既是函数,又是对象
















模仿axios发送请求(核心结构)


https://img-blog.csdnimg.cn/direct/aba6ab1ed4f949579628f33d86f822b4.png
https://img-blog.csdnimg.cn/direct/40a924c716ff4ea5b797a885e2fb8f99.png



request函数
https://img-blog.csdnimg.cn/direct/a49a9ed43311498a914d74f682a05137.png
dispatchRequest
https://img-blog.csdnimg.cn/direct/cdd3f6fbaf7e4448ac951feec2eac8e1.png
https://img-blog.csdnimg.cn/direct/3dd91ed4b34a4301b5e31118c8e3b2dc.png
adapter 适配器
https://img-blog.csdnimg.cn/direct/7c096f8091fc4765947a8f9588cdfee0.png

https://img-blog.csdnimg.cn/direct/f857de9b722742de9db5060067d82d68.png

axios
https://img-blog.csdnimg.cn/direct/7d35b890392c4a2b94b436944674f1ab.png
adapter=>        dispatchRequest     =>              request      =>     axios


axios拦截器运行原理

https://img-blog.csdnimg.cn/direct/2273a3d4cd2a44458351a5c15cde8bb0.png

interceptors
https://img-blog.csdnimg.cn/direct/8857ff9aacc64050b858455154d7b95f.png

axios.interceptors.request    ===    new  InterceptorManager()
执行use方法时
https://img-blog.csdnimg.cn/direct/a61093fe9c3f4416a4b4e4d55ef7bf91.png
https://img-blog.csdnimg.cn/direct/34e1bd4a3a0f4d1292cf202710e7217c.png
use方法只是保存回调函数,保存到request的hendlers 
axios的request请求对hendlers数组进行美满,将请求拦截器回调往前放,响应拦截器回调往后放
最终通过循环的方式    以跳板的方式执行


模仿实现axios拦截器

构造函数
https://img-blog.csdnimg.cn/direct/0c43380d7e0b4c639406d616d00eb7ce.png
Axios设置
https://img-blog.csdnimg.cn/direct/7d90428645e045a7a4022b30f68a9fed.png


拦截器管理器构造函数
https://img-blog.csdnimg.cn/direct/d8dff3fb6db24f63b0606112c25916d7.png
创建axios函数
https://img-blog.csdnimg.cn/direct/7912ce378a9c4bb888b7ed7f8df414cb.png



请求执行拦截器回调
https://img-blog.csdnimg.cn/direct/c569268a1d314d248b573c12539d6c9c.png
https://img-blog.csdnimg.cn/direct/5a0046433d9d4d67aefe2f09be47167d.png

用拦截器管理器保存回调
在request中调用拦截器回调函数




axios取消请求工作原理


https://img-blog.csdnimg.cn/direct/8a9d51e5604e4965a1559b5f02da64ed.png
https://img-blog.csdnimg.cn/direct/4f5df50ec6a144e2a7368e19c01c14b3.png


xhr.js文件中
https://img-blog.csdnimg.cn/direct/ae64470964414ed8869a271fa9d30d8a.png
request.abort()AJax取消请求
只要config.cancelToken.promise状态发生改变,就会执行取消请求的下令





在取消请求文件中 
   https://img-blog.csdnimg.cn/direct/7bf7eabf77e64238aa48677b173d55bf.png运行cancel()   



模仿实现axios取消请求



https://img-blog.csdnimg.cn/direct/2dc4ecb074a44198829fac15d1c89563.pnghttps://img-blog.csdnimg.cn/direct/b536b17618f64095b85dddbe2db8e77d.png



https://img-blog.csdnimg.cn/direct/54934db66e6a451c918f60e6ea01621a.png

cancelToken函数
https://img-blog.csdnimg.cn/direct/f46a4cde5cac442d8c0934dbf5d0e3a4.png

cancel  执行=》  resolvePromise执行=》      this.promise状态变为成功


关于取消请求的处理
xhr.abort()的位置
在xhradapter中   xhr变乱绑定下面

https://img-blog.csdnimg.cn/direct/f40ad24605f7448d97db739d7e5724ea.png


原理:cancelToken身上维护了一个属性Promise,将改变该Promise状态的变量暴露到全局
cancel执行   内部resolvePromise执行      cancelToken.promise(resolve执行) 状态变为成功
发送xhr请求中https://img-blog.csdnimg.cn/direct/3eacc338d84f4f8ab21abb14fa85a036.png   Promise.then 中回调执行,xhr.abort 执行

https://img-blog.csdnimg.cn/direct/45f2fe03d21a4ce2974f5576e421782a.png
https://img-blog.csdnimg.cn/direct/21de28ff6db4492e8f404dcdce811833.png
总结

axios与Axios的关系
https://img-blog.csdnimg.cn/direct/d2a8554fc6cc430fbc54820016a8d01c.png





https://img-blog.csdnimg.cn/direct/d5192a0f00a1444ba68d62a17670da29.png
https://img-blog.csdnimg.cn/direct/763f031831b049319bb133e6e04d7b9f.png





 整体流程https://img-blog.csdnimg.cn/direct/d39e9381784945d9bd1f77cc1e665ffa.pnghttps://img-blog.csdnimg.cn/direct/d1455b148dad41f695bef73b17210dc0.png



拦截器
https://img-blog.csdnimg.cn/direct/e583f8cf67914a178ee5325309496605.png

        https://img-blog.csdnimg.cn/direct/bfc9669b252344f394b848fcde95468f.png
响应拦截器
https://img-blog.csdnimg.cn/direct/28fde20fc0174c2aa169bcd7c95a55c2.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: axios