axios

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的关系

 整体流程

拦截器

        

响应拦截器

  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值