功能特点

  1. 在浏览器中发送XMLHttpRequests请求
  2. 在node.js总发送http请求
  3. 支持Promise API
  4. 拦截请求和相应
  5. 转换请求和响应数据

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网络封装模块的更多相关文章

  1. Axios 网络请求组件封装 (鉴权、刷新、拦截)

    一.前言 注意:本教程需要你对axios有一定的了解,不适用于小白(只能借鉴,希望你能自己动手),注释都写的很清楚.此封装并非完整版,已进行部分删减修改操作,但仍然适用于大部分业务场景,如果不适用于你 ...

  2. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  3. 聊聊 Vue 中 axios 的封装

    聊聊 Vue 中 axios 的封装 axios 是 Vue 官方推荐的一个 HTTP 库,用 axios 官方简介来介绍它,就是: Axios 是一个基于 promise 的 HTTP 库,可以用在 ...

  4. YTKNetwork网络封装

    本篇是答应在端午写iOS网络-四篇源码解析以及封装的最后一篇,是针对上一篇YTKNetwork源码解析后的一次封装,也是自己实际项目中所使用过的.在对YTKNetwork封装的时候,还是需要对YTKN ...

  5. vue中axios的封装以及简单使用

    一.axios的封装 在vue中为了使用axios使用方便,不需要每一个模块进行导入,就需要对其进行封装: 1.新建http.js模块 import axios from 'axios' // 设置基 ...

  6. 一篇文章带你了解axios网络交互-Vue

    来源:滁州SEO 1 **什么是axios呢?**了解,并去使用它,对于axios发送请求的两种方式有何了解,以及涉及axios跨域问题如何解决. 对于axios网络交互,去使用axios的同时,首先 ...

  7. [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作

    [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 目录 [从源码学设计]蚂蚁金服SOFARegistry之网络封装和操作 0x00 摘要 0x01 业务领域 1.1 SOFARegis ...

  8. 第五十五篇:Axios的封装

    好家伙, 上图 1.为什么需要封装axios? 当我们改变项目的使用环境时候,url也会随之改变,那么我们就需要改很多axios请求中的url配置 现在我们将axios封装,在项目使用环境改变时我们只 ...

  9. Java 9 揭秘(6. 封装模块)

    Tips 做一个终身学习的人. 在这章节中, 主要介绍以下内容: 封装Java模块的不同格式 JAR格式增强 什么是多版本JAR 如何创建和使用多版本JAR JMOD是什么格式 如何使用jmod工具来 ...

随机推荐

  1. 068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题——基本数据类型传值

    068 01 Android 零基础入门 01 Java基础语法 08 Java方法 06 参数传递问题--基本数据类型传值 本文知识点:参数传递问题--基本数据类型传值 说明:因为时间紧张,本人写博 ...

  2. C++枚举变量与switch

    转载:https://www.cnblogs.com/banmei-brandy/p/11263927.html 枚举类型和变量如何定义,下篇博客讲得十分详细: https://blog.csdn.n ...

  3. DES加解密算法(C语言实现)

    DES加密和解密算法的实现(C语言) 主要是做个记录,害怕以后代码丢了,先放到这里了. DES再不进行介绍了,可以看上一篇的 DES 的python实现 转载请注明出处:https://www.cnb ...

  4. Rolf Dobelli 《清醒思考的艺术》

    为了避免输光自己靠勤奋积累的财产,罗尔夫·多贝里列了一份系统性思维错误的清单.这一份清单可以和查理·芒格的<人类误判心理学>对照查看. 自本杰明·富兰克林以来,电闪雷鸣没有减少变弱或响声变 ...

  5. 搭建zabbix+grafana监控

    编写一件安装脚本 #!/bin/sh echo "\033[32;1m脚本作者:fage\033[0m" #sleep 10 zabbix_version=4.0.2 zabbix ...

  6. 「Redis」字符串

    原文链接:https://www.changxuan.top/?p=1109 简介 Redis 中自定义的字符串结构. 字符串是 Redis 中最常用的一种数据类型,在 Redis 中专门封装了一个字 ...

  7. 推荐Java字节码解析工具classpy

    Classpy Classpy is a GUI tool for investigating Java class file, Lua binary chunk, Wasm binary code, ...

  8. ASP.Net Core3.1 生成二维码填坑

    ASP.Net Core3.1 使用QrCode生成二维码 部署到Linux报错 The type initializer for 'System.DrawingCore.GDIPlus' threw ...

  9. 【C语言程序设计】小游戏之俄罗斯方块(二)!适合初学者上手、练手!

    第二篇,主要实现俄罗斯方块中的主体部分,包括容器的数据结构以及容器的相关操作,特别是大方块和容器之间的交互逻辑,包括碰撞检测,消除检测等等. 1. 容器的表示 大方块的实现涉及到位运算,而容器同样如此 ...

  10. npoi 设置单元格格式

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...