热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【Vue2】七.网络封装

1.网络模块选择选择一:传统的Ajax是基于XMLHttpRequest(XHR)为什么不用它呢?配置和调用方式等非常混乱.编码起来看起来就非常复杂.所以真实开发中很少直接使

1. 网络模块选择


选择一: 传统的Ajax是基于XMLHttpRequest(XHR)

为什么不用它呢?

  • 配置和调用方式等非常混乱.
  • 编码起来看起来就非常复杂.
  • 所以真实开发中很少直接使用, 而是使用jQuery-Ajax

选择二: 经常会使用jQuery-Ajax

为什么不选择它呢?

  • 首先, 我们先明确一点: 在Vue的整个开发中都是不需要使用jQuery了.
  • 那么, 就意味着为了方便我们进行一个网络请求, 特意引用一个jQuery, 你觉得合理吗?
    jQuery的代码1w+行.
    Vue的代码才1w+行.
  • 完全没有必要为了用网络请求就引用这个重量级的框架.

选择三: 官方在Vue1.x的时候, 推出了Vue-resource.

为什么不选择它呢?

  • 在Vue2.0退出后, Vue作者就在GitHub的Issues中说明了去掉vue-resource, 并且以后也不会再更新.
  • 那么意味着以后vue-reource不再支持新的版本时, 也不会再继续更新和维护.
  • 对以后的项目开发和维护都存在很大的隐患.

选择四: Vue作者推荐的axios


2. JSON的封装

使用JSONP最主要的原因往往是为了解决跨域访问的问题.

JSON原理的回顾

JSONP的原理是什么呢?

  • JSONP的核心在于通过

JSON代码的封装

在这里插入图片描述
在这里插入图片描述

3. axios的使用


认识axios

为什么选择axios

  • 在浏览器中发送 XMLHttpRequests 请求
  • 在 node.js 中发送 http请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据

axiox请求方式

  • axios(config)
  • axios.request(config)
  • axios.get(url[, config])
  • axios.delete(url[, config])
  • axios.head(url[, config])
  • axios.post(url[, data[, config]])
  • axios.put(url[, data[, config]])
  • axios.patch(url[, data[, config]])

发送请求


发送get请求

axios({url: 'http://xxx.com/data',// method: 'post'
}).then(res => {console.log(res);
})axios({url: 'http://xxx.com/data',// 专门针对get请求的参数拼接params: {type: 'pop',page: 1}
}).then(res => {console.log(res);
})

发送并发请求

有时候, 我们可能需求同时发送两个请求

  • 使用axios.all, 可以放入多个请求的数组.
  • axios.all([]) 返回的结果是一个数组,使用 axios.spread 可将数组 [res1,res2] 展开为 res1, res2

axios.all([axios({url: 'http://xxx.com/data'
}), axios({url: 'http://xxx.com/data',params: {type: 'sell',page: 5}
})]).then(results => {console.log(results);console.log(results[0]);console.log(results[1]);
})

axios全局配置

axios.defaults.baseURL = 'http://xxx.com/data'
axios.defaults.timeout = 5000axios.all([axios({url: '/home/multidata'
}), axios({url: '/home/data',params: {type: 'sell',page: 5}
})]).then(axios.spread((res1, res2) => {console.log(res1);console.log(res2);
}))

常见配置选项


  • 请求地址
    • url: ‘/user’,
  • 请求类型
    • method: ‘get’,
  • 请根路径
    • baseURL: ‘http://www.mt.com/api’,
  • 请求前的数据处理
    • transformRequest:[function(data){}],
  • 请求后的数据处理
    • transformResponse: [function(data){}],
  • 自定义的请求头
    • headers:{‘x-Requested-With’:‘XMLHttpRequest’},
  • URL查询对象
    • params:{ id: 12 },
  • 查询对象序列化函数
    • paramsSerializer: function(params){ }
  • request body
    • data: { key: ‘aa’},
  • 超时设置s
    • timeout: 1000,
  • 跨域是否带Token
    • withCredentials: false,
  • 自定义请求处理
    • adapter: function(resolve, reject, config){},
  • 身份验证信息
    • auth: { uname: ‘’, pwd: ‘12’},
  • 响应的数据格式 json / blob /document /arraybuffer / text / stream
    • responseType: ‘json’,

axios实例


为什么创建axios实例


  • 当我们从axios模块中导入对象时, 使用的实例是默认的实例.
  • 当给该实例设置一些默认配置时, 这些配置就被固定下来了.
  • 但是后续开发中, 某些配置可能会不太一样.
  • 比如某些请求需要使用特定的baseURL或者timeout或者content-Type等.
  • 这个时候, 我们就可以创建新的实例, 并且传入属于该实例的配置信息.

如何创建axios实例

const instance1 = axios.create({baseURL: 'http://xxx.com/data',timeout: 5000
})instance1({url: '/home/multidata'
}).then(res => {console.log(res);
})instance1({url: '/home/data',params: {type: 'pop',page: 1}
}).then(res => {console.log(res);
})const instance2 = axios.create({baseURL: 'http://222.111.33.33:8000',timeout: 10000,// headers: {}
})

axios的封装

import axios from 'axios'export function request(config) {// 1.创建axios的实例const instance = axios.create({baseURL: 'http://***:8000',timeout: 5000})// 2.axios的拦截器// 2.1.请求拦截的作用instance.interceptors.request.use(config => {// console.log(config);// 1.比如config中的一些信息不符合服务器的要求// 2.比如每次发送网络请求时, 都希望在界面中显示一个请求的图标// 3.某些网络请求(比如登录(token)), 必须携带一些特殊的信息return config}, err => {// console.log(err);})// 2.2.响应拦截instance.interceptors.response.use(res => {// console.log(res);return res.data}, err => {console.log(err);})instance.interceptors.response.use(res => {return res.data}, err => {console.log(err)})// 3.发送真正的网络请求return instance(config)
}

axios的拦截器

axios提供了拦截器,用于我们在发送每次请求或者得到相应后,进行对应的处理

请求拦截器

请求拦截中错误拦截较少,通常都是配置相关的拦截
可能的错误比如请求超时,可以将页面跳转到一个错误页面中

响应拦截器

响应拦截中完成的事情:

  • 响应的成功拦截中,主要是对数据进行过滤。
  • 响应的失败拦截中,可以根据status判断报错的错误码,跳转到不同的错误提示页面。

推荐阅读
  • 使用nodejs爬取b站番剧数据,计算最佳追番推荐
    本文介绍了如何使用nodejs爬取b站番剧数据,并通过计算得出最佳追番推荐。通过调用相关接口获取番剧数据和评分数据,以及使用相应的算法进行计算。该方法可以帮助用户找到适合自己的番剧进行观看。 ... [详细]
  • 网络请求模块选择——axios框架的基本使用和封装
    本文介绍了选择网络请求模块axios的原因,以及axios框架的基本使用和封装方法。包括发送并发请求的演示,全局配置的设置,创建axios实例的方法,拦截器的使用,以及如何封装和请求响应劫持等内容。 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 本文介绍了闭包的定义和运转机制,重点解释了闭包如何能够接触外部函数的作用域中的变量。通过词法作用域的查找规则,闭包可以访问外部函数的作用域。同时还提到了闭包的作用和影响。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了C++中省略号类型和参数个数不确定函数参数的使用方法,并提供了一个范例。通过宏定义的方式,可以方便地处理不定参数的情况。文章中给出了具体的代码实现,并对代码进行了解释和说明。这对于需要处理不定参数的情况的程序员来说,是一个很有用的参考资料。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
author-avatar
cresslyty_723
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有