axios网络封装模块
功能特点
- 在浏览器中发送XMLHttpRequests请求
- 在node.js总发送http请求
- 支持Promise API
- 拦截请求和相应
- 转换请求和响应数据
axios请求方式
支持多种请求方式
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]])
安装、使用axios框架
npm install axios --save
之后在main.js
import Vue from 'vue'
import App from './App'
import axios from 'axios'
Vue.config.productionTip = false
new Vue({
el: '#app',
render: h => h(App)
})
// 这里默认使用axios(config)方法
axios({
url:'服务器地址',
method:'post' // 请求方法 默认为get
}).then(res => {
console.log(res); // 返回promise
})
axios({
url:'服务器地址',
// 专门get请求的参数拼接
params:{
type:'pop',
page: 1
}
}).then(res => {
console.log(res);
})
发送并发请求
- 使用axios.all 可以放入多个请求数组
- axios.all([])返回的结果是一个数组,使用axios.spread可以将数组[res1,res2]展开
同样是在main.js下
import Vue from 'vue'
import App from './App'
import axios from 'axios'
Vue.config.productionTip = false
new Vue({
el: '#app',
render: h => h(App)
})
axios.all([axios({
url:'服务器地址'
}),axios({
// 专门get请求的参数拼接
params:{
type:'pop',
page: 3
}
})]).then(result => {
console.log(result);
console.log(result[0]);
console.log(result[0]);
})
/* 使用axios.spread展开result */
axios.all([axios({
url:'服务器地址'
}),axios({
// 专门get请求的参数拼接
params:{
type:'pop',
page: 3
}
})]).then(axios.spread((res1, res2)) => {
console.log(res1);
console.log(res2);
})
对公共部分的抽取
事实上,开发中很多参数是固定的,可以进行抽取或者axios的全局配置
import Vue from 'vue'
import App from './App'
import axios from 'axios'
Vue.config.productionTip = false
new Vue({
el: '#app',
render: h => h(App)
})
// 公共配置
axios.defaults.baseURL = '地址'
axios.defaults.timeout = 100 // 请求访问超时时间
axios({
// baseURL: , 也可以写在这里
url:'服务器地址',
method:'post' // 请求方法 默认为get
}).then(res => {
console.log(res); // 返回promise
})
常见的配置选项
用到再去查文档
| 方法 | 语法 |
|---|---|
| 请求地址 | url:'/user', |
| 请求类型 | method:'get', |
| 请求根路径 | baseURL:‘地址’, |
| 请求前的数据处理 | transformRequest:[function(data){}], |
| 请求后的数据处理 | transformResponse:[function(data){}], |
| 自定义请求头 | headers:{'x-Requested-With':'XMLHttpRequest'}, |
| URL查询对象 | params:{id:123}, |
| 查询对象序列化函数 | 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/docuent/arraybuffer/text/stream | responseType:'json', |
创建对应的axions实例
import Vue from 'vue'
import App from './App'
import axios from 'axios'
Vue.config.productionTip = false
new Vue({
el: '#app',
render: h => h(App)
})
// 创建第一实例
const instance1 = axios.creat({
baseURL: '服务器地址',
timeout: 1000
})
instance1({
url: '与服务器地址拼接的后续地址'
}).then(res => {
console.log(res);
})
instance1({
url: '可以与上面实例不同的后续地址',
params:{
type: 'pop',
page: 1
}
}).then(res => {
console.log(res);
})
//创建不同配置的实例
const instance2 = axios.creat({
baseURL: '地址',
timeout: 10000,
headers: {}
})
封装网络请求模块
正常在app.vue下复用性很低的请求网络数据
<template>
<div id="app">
<div>{{result}}</div>
</div>
</template>
<script>
import axios from 'axios'
export default{
name:'App',
components:{
},
data(){
return{
result:''
}
},
created(){
axios({
url:'服务器地址'
}).then(res => {
console.log(res);
this.result = res;
})
}
}
</script>
建立network文件夹,并在其中创建request.js的请求配置
import axios from 'axios'
/******************************/
// 方法1 //
/*****************************/
export function request(config, success, failure){
// 1. 创建axios的实例
const instance = axios.creat({
baseURl: '服务器地址',
timeout: 100
})
// 发送真正的网络请求
instance(config)
.then(res => {
//console.log(res);
success(res)
})
.catch(err => {
//cnsole.log(err);
failure(err)
})
}
/******************************/
// 方法2 //
/*****************************/
export function request(config){
// 1. 创建axios的实例
const instance = axios.creat({
baseURl: '服务器地址',
timeout: 100
})
// 发送真正的网络请求
instance(config.baseConfig)
.then(res => {
//console.log(res);
config.success(res)
})
.catch(err => {
//cnsole.log(err);
config.failure(err)
})
}
/******************************/
// 方法3 promise 方法【推荐】 //
/*****************************/
export new Promise((resolve, reject) => {
// 1. 创建axios的实例
const instance = axios.creat({
baseURl: '服务器地址',
timeout: 100
})
// 发送真正的网络请求
instance(config) // 这里或者直接 return instance(config) 这里返回值为就为promise
.then(res => {
resolve(res)
})
.catch(err => {
reject(err)
})
}
并在需要使用的地方请求
import {request} from "./network/request";
/******************************/
// 方法1对应请求方法 //
/*****************************/
request({
url: '/home/multidata'
}), res => {
console.log(res);
}, err => {
console.log(err);
}
/******************************/
// 方法2对应请求方法 //
/*****************************/
request({
caseConfig:{
},
success: function(res){
},
failure: function(err){
}
})
/******************************/
// 方法3 promise对应请求方法 //
/*****************************/
request({
url:'地址'
}).then(res => {
console.log(res);
}).catch(err => {
console.log(err);
})
拦截网络请求
请求拦截
import axios from 'axios'
export function request(config){
// 1. 创建axios的实例
const instance = axios.creat({
baseURl: '服务器地址',
timeout: 100
})
// 2. axios的拦截器
instance.interceptors.request.use(config => {
console.log(config);
// - 比如config中的一些信息不符合服务器的要求
// - 比如每次发送网络请求时,在界面中显示请求图标
// - 某些网络请求(比如登录token)必须携带一些东西
return config
}), err => {
console.log(err);
}
// 3. 发送真正的网络请求
return instance(config)
}
响应拦截
import axios from 'axios'
export function request(config){
// 1. 创建axios的实例
const instance = axios.creat({
baseURl: '服务器地址',
timeout: 100
})
// 2. axios的拦截器
instance.interceptors.response.use(res => {
console.log(res);
return res.data // 返回有用的信息
}), err => {
console.log(err);
}
// 3. 发送真正的网络请求
return instance(config)
}
axios网络封装模块的更多相关文章
- Axios 网络请求组件封装 (鉴权、刷新、拦截)
一.前言 注意:本教程需要你对axios有一定的了解,不适用于小白(只能借鉴,希望你能自己动手),注释都写的很清楚.此封装并非完整版,已进行部分删减修改操作,但仍然适用于大部分业务场景,如果不适用于你 ...
- vue中Axios的封装和API接口的管理
前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...
- 聊聊 Vue 中 axios 的封装
聊聊 Vue 中 axios 的封装 axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在 ...
- YTKNetwork网络封装
本篇是答应在端午写iOS网络-四篇源码解析以及封装的最后一篇,是针对上一篇YTKNetwork源码解析后的一次封装,也是自己实际项目中所使用过的.在对YTKNetwork封装的时候,还是需要对YTKN ...
- vue中axios的封装以及简单使用
一.axios的封装 在vue中为了使用axios使用方便,不需要每一个模块进行导入,就需要对其进行封装: 1.新建http.js模块 import axios from 'axios' // 设置基 ...
- 一篇文章带你了解axios网络交互-Vue
来源:滁州SEO 1 **什么是axios呢?**了解,并去使用它,对于axios发送请求的两种方式有何了解,以及涉及axios跨域问题如何解决. 对于axios网络交互,去使用axios的同时,首先 ...
- [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作
[从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 目录 [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 0x00 摘要 0x01 业务领域 1.1 SOFARegis ...
- 第五十五篇:Axios的封装
好家伙, 上图 1.为什么需要封装axios? 当我们改变项目的使用环境时候,url也会随之改变,那么我们就需要改很多axios请求中的url配置 现在我们将axios封装,在项目使用环境改变时我们只 ...
- Java 9 揭秘(6. 封装模块)
Tips 做一个终身学习的人. 在这章节中, 主要介绍以下内容: 封装Java模块的不同格式 JAR格式增强 什么是多版本JAR 如何创建和使用多版本JAR JMOD是什么格式 如何使用jmod工具来 ...
随机推荐
- 编程体系结构(06):Java面向对象
本文源码:GitHub·点这里 || GitEE·点这里 一.基础概念 1.面向对象概念 面向对象编程的主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一 ...
- farbic-sdk-java 学习部署
准备工作 1.fabric基础网络环境 2.环境准备(jdk环境.maven环境) 3.启动fabric测试网络 4.在idea中测试java-sdk 1.fabric环境准备 1.fabric基础环 ...
- Go path/filepath包
path/filepath 标准库path中有的功能filepath全部具备, 所以使用filepath即可. isABS() 判断一个路径是不是绝对路径. package main import ( ...
- 深入了解如何构建您的第一个多语言ASP。NET MVC 5 Web应用程序
下载demo - 3.9 MB 介绍 这篇文章解释了如何创建一个简单的多语言ASP.NET MVC 5 Web应用程序.该应用程序将能够处理英语(美国),西班牙语和法语.英语将是默认语言.当然,扩展解 ...
- mycat ER分片
有一类业务,例如订单(ORDER)跟订单明细表(ORDER_DETAIL),明细表会依赖于订单,就是该会存在表的主从关系,这类似业务的切分可以抽象出合适的切分规则,比如根据用户ID切分,其它相关的表都 ...
- linux块设备驱动---概念与框架(转)
基本概念 块设备(blockdevice) --- 是一种具有一定结构的随机存取设备,对这种设备的读写是按块进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性 ...
- 华为方舟编译器正式支持C语言:完全开源
投递人 itwriter 发布于 2020-10-14 19:08 评论(15) 有1938人阅读 原文链接 2019 年 8 月底,华为方舟编译器(OpenArkCompiler)正式开源,迈出了跨 ...
- MeteoInfoLab脚本示例:subplot
subplot命令可以自动等间距分配多个坐标系(Axes),命令中有三个参数,前两个定义了行数和列数,第三个指定了当前的坐标系(Axes),绘图命令是作用在当前坐标系中的. 脚本程序: def f(t ...
- day25 Pyhton学习 约束和异常处理
一.类的约束 约束是对类的约束 有两种方法: 1.提取一个父类,在父类中给出一个方法,并且在方法中不给出任何代码,直接抛异常 class Base: def login(self): raise Ex ...
- day22 函数整理
# 1.计算 年月日时分秒 于现在之间差了多少 格式化时间 # 现在 # 某一个年月日时分秒 参数 # import time # def get_time(old_t,fmt = '%Y-%m-%d ...