axios

  金牌会员 | 2024-7-27 01:05:32 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 780|帖子 780|积分 2340

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:删除数据


  1. buts[0].onclick=function(){
  2.             //发送axios   put请求
  3.             axios({
  4.                 method:'get',
  5.                 url:'http://localhost:3000/post/2',
  6.             }).then(response=>{
  7.                 console.log(response);
  8.             });
  9.         }
  10.         buts[1].onclick=function(){
  11.             //发送axios      post请求
  12.             axios({
  13.                 method:'post',
  14.                 url:'http://localhost:3000/post',
  15.                 //设置响应体
  16.                 data:{
  17.                     'title':"你好中国",
  18.                     'author':"赵四"
  19.                 }
  20.             }).then(response=>{
  21.                 console.log(response);
  22.             });
  23.             
  24.         }
  25.         buts[2].onclick=function(){
  26.             //发送axios    put请求
  27.             axios({
  28.                 method:'put',
  29.                 url:'http://localhost:3000/post/2',
  30.                 //put修改数据
  31.                 data:{
  32.                   
  33.                     author:"张三"
  34.                 }
  35.             }).then(response=>{
  36.                 console.log(response);
  37.             });
  38.             
  39.         }
  40.         buts[3].onclick=function(){
  41.             //发送axios  delete请求
  42.             axios({
  43.                 method:'delete',
  44.                 url:'http://localhost:3000/post/7c59',
  45.             }).then(response=>{
  46.                 console.log(response);
  47.             });
  48.             
  49.         }
复制代码

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企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表