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工具来 ...
随机推荐
- 087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点
087 01 Android 零基础入门 02 Java面向对象 02 Java封装 01 封装的实现 01 封装的概念和特点 本文知识点:封装的概念和特点 说明:因为时间紧张,本人写博客过程中只是对 ...
- matlab中imfinfo 有关图形文件的信息
来源:https://ww2.mathworks.cn/help/matlab/ref/imfinfo.html?searchHighlight=imfinfo&s_tid=doc_srcht ...
- 简单区间dp
题目链接 对于基本区间dp,设dp[l][r]是区间l到r的最大价值. 我们可以枚举区间的长度,在枚举左端点,判断即可. 当右端点大于n,就break. dp[l][r]=max(dp[l+1][r] ...
- 在uniapp或者vue中单行文字或者符号无法换行的终极解决方案
在VUE开发过程中,会出现比较诡异的情况. 比如常规的英文或中文显示都是很正常的,但是当出现了一些中文符号(比如,!等等)在文末的时候,总是会超出view的显示区域. 那么在遇到上面这种问题我们记得检 ...
- fastadmin 增加批量操作字段 提示无权限
是这样的找了权限节点的问题,始终找不到,后来 在社区传世人回答别人问题是提及到 $multiFields 就全局搜了下 在基类 Backend 里找到了这个.然后拿到 控制器中添加需要的参数 再次尝 ...
- 在Linux命令行内的大小写转换
在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令.接下来让我们看看都有哪些完成大小写转换的命令. tr 命令 tr (t ...
- abp(net core)+easyui+efcore实现仓储管理系统——出库管理之三(五十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统--ABP总体介绍(一) abp(net core)+ ...
- spring boot:使用mybatis访问多个mysql数据源/查看Hikari连接池的统计信息(spring boot 2.3.1)
一,为什么要访问多个mysql数据源? 实际的生产环境中,我们的数据并不会总放在一个数据库, 例如:业务数据库:存放了用户/商品/订单 统计数据库:按年.月.日的针对用户.商品.订单的统计表 因为统计 ...
- linux(centos8):awk在系统运维中的常用例子
一,awk的作用 1,用途 AWK是一种处理文本文件的语言, 是一个强大的文本分析工具 2,awk和sed的区别 awk适合按列(域)操作, sed适合按行操作 awk适合对文件的读取分析, sed适 ...
- 服务器同一个tomcat部署2两个相同的项目
项目A,B(B 是A 的复制) 若把A,B工程同时部署到tomcat下,会发生只能访问A,B工程中的其中一个,而另一个会出现404错误(或者无法访问),此时可参照如下方法解决: 步骤1:找到工程下的w ...