Vue-axios 封装了一手好axios:)
请求方式

很多种请求方式,重点还是第一种吧
下载
npm install axios --save
下载完成
直接导入
import axios from 'axios'
简单配置
axios({
  url: 'http://'
}).then(res => {
  console.log(res);
})
并合请求
//并和请求
axios.all([
axios({
url: "http://123.207.32.32:8000/home/multidata"
}),
axios({
url: 'http://123.207.32.32:8000/home/multidata',
method: 'get',
params: {
type: 'pop',
page: 3 }
})
// 就是对象的解构
]).then(axios.spread((res1, res2) => {
console.log(res1);
console.log(res2);
}))
全局配置
axios.defaults.baseURL = "http://123.207.32.32:8000" 地址
axios.defaults.timeout = 5000 超时时间
请求配置
axios.all([
axios({
url: "/home/multidata"
}),
axios({
url: '/home/multidata',
method: 'get',
params: {
type: 'pop',
page: 3 }
})
// 就是对象的解构
]).then(axios.spread((res1, res2) => {
console.log(res1);
console.log(res2);
}))
常见的配置选项

get 传 params
post 传 data

axios 实例
解释
有些时候url地址的ip可能会不同
那么就会出现多个baseURL和多个axios
这个时候就是创axios实例,不同的实例就可以配置不同的url 使用不同的 axios
// 创造axios实例instance1
const instance1 = axios.create({
baseURL: 'http://123.207.32.32:8000',
timeout: 5000
})
// 然后就可以使用这个实例axios(instance1)进行使用
instance1({
url: "/home/multidata"
}).then(res => {
console.log(res);
}) // 创造axios实例instance1
const instance2 = axios.create({
baseURL: 'http://123.207.32.32:8000',
timeout: 5000
})
// 然后就可以使用这个实例axios(instance2)进行使用
instance2({
url: '/home/multidata',
method: 'get',
params: {
type: 'pop',
page: 3
}
}).then(res => {
console.log(res);
})
这样写在main.js就是太多太麻烦
然后我们直接写在组件里的create(){}中,每次重新创建一个组件就调用axios,但是每个组件都写,又是太过于麻烦。
这是个危险的行为,如果有一天axios下架了那么项目里的的每个地方都要改,工作量可想而知。
于是我们有思路:

那一天axios没用了我们就直接改我们自己封装的三方插件文件
第一种:
创建一个request.js文件
import axios from 'axios'
export function request(config, success, failure) {
    //1。创建axiso的实例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000
    })
    //发送真正的网络请求
    instance(config)
        .then(res => {
            // console.log(res);
            success(res)
        })
        .catch(err => {
            // console.log(err);
            failure(err)
        })
}
在main.js文件里
// 5.封装request模块
import { request } from './network/request.js' request({
url: "/home/multidata"
}, res => {
console.log(res);
}, err => {
console.log(err);
})
这个封装还是有些问题,我们可以不用三个参数吗?直接用一个对象包三个变量就行,我们继续改进
第二种:
export function request(config) {
    //1。创建axiso的实例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000
    })
    //发送真正的网络请求
    instance(config.baseConfig)
        .then(res => {
            // console.log(res);
            config.success(res)
        })
        .catch(err => {
            // console.log(err);
            config.failure(err)
        })
}
request({
  baseConfig: {
    url: "/home/multidata"
  },
  success: res => {
    console.log(res);
  },
  failure: err => {
    console.log(err);
  }
})
第三种
因为是请求函数所以我们直接Promise
export function request(config) {
    return new Promise((resolve, reject) => {
        //1。创建axiso的实例
        const instance = axios.create({
            baseURL: 'http://123.207.32.32:8000',
            timeout: 5000
        })
        //发送真正的网络请求
        instance(config)
            .then(res => {
                resolve(res)
            })
            .catch(err => {
                reject(err)
            })
    })
}
request({
  url: "home/multidata",
}).then(res => {
  console.log(res);
}).catch(err => {
  console.log(err);
})
第四种 终极方案
因为 instance就是axios本身就是一个Promise所以直接return
export function request(config) {
    //1。创建axiso的实例
    const instance = axios.create({
        baseURL: 'http://123.207.32.32:8000',
        timeout: 5000
    })
    //发送真正的网络请求
    return instance(config)
}
request({
  url: "home/multidata",
}).then(res => {
  console.log(res);
}).catch(err => {
  console.log(err);
})
axios拦截器
请求拦截:
instance.interceptors.request.use(config => {
        console.log(config);
        // 1.config中的一些信息不符合服务器的要求
        // 2.每次请求时显示动画 请求成功隐藏
        // 3.当登陆时,如果没有携带token就拦截请求,提示去登录
        return config
    })
页面打印:

所以拦截了一定要return拦截内容
响应拦截
instance.interceptors.response.use(res => {
        console.log(res);
    }, err => {
        console.log(err);
    })
页面打印

所以也一定要return
axios 结束!!!!!!!!!!!!!!!!!!!!!
Vue-axios 封装了一手好axios:)的更多相关文章
- Vue(二十三)vuex + axios + 缓存 运用 (以登陆功能为例)
		(一)axios 封装 (1)axios拦截器 可以在axios中加入加载的代码... (2)封装请求 后期每个请求接口都可以写在这个里面... (二)vuex user.js import { lo ... 
- vue axios封装以及登录token过期跳转问题
		Axios配置JWT/封装插件/发送表单数据 首先请务必已仔细阅读 Axios 文档并熟悉 JWT: 中文文档 JWT 中文文档 安装 npm install axios npm install es ... 
- vue中的axios封装
		import axios from 'axios'; import { Message } from 'element-ui'; axios.defaults.timeout = 5000;axios ... 
- 把axios封装为vue插件使用
		前言 自从Vue2.0推荐大家使用 axios 开始,axios 被越来越多的人所了解.使用axios发起一个请求对大家来说是比较简单的事情,但是axios没有进行封装复用,项目越来越大,引起的代码冗 ... 
- vue中封装axios方法
		axios基本配置 使用方法 import axios from 'axios' // 创建axios实例 const service = axios.create({ baseURL: proces ... 
- vue项目搭建 (二) axios 封装篇
		vue项目搭建 (二) axios 封装篇 项目布局 vue-cli构建初始项目后,在src中进行增删修改 // 此处是模仿github上 bailicangdu 的 ├── src | ├── ap ... 
- 三、VUE项目BaseCms系列文章:axios 的封装
		项目开发中 ajax 是不可缺少的,一个好的封装可以减少我们很多的重复代码,维护也更方便.在 vue 开发中我们用的比较多的就是 axios.下面代码是项目中用到的 axios 的封装. http.j ... 
- axios  interceptors 拦截 , 页面跳转, token 验证 Vue+axios实现登陆拦截,axios封装(报错,鉴权,跳转,拦截,提示)
		Vue+axios实现登陆拦截,axios封装(报错,鉴权,跳转,拦截,提示) :https://blog.csdn.net/H1069495874/article/details/80057107 ... 
- 【Vue】axios封装,更好的管理api接口和使用
		在现在的前端开发中,前后端分离开发比较主流,所以在封装方法和模块化上也是非常需要掌握的一门技巧.而axios的封装也是非常的多,下面的封装其实跟百度上搜出来的axios封装或者axios二次封装区别不 ... 
随机推荐
- 8、WindowServer离线安装.NET Framework 3.5
			WindowsServer 默认是不安装 .netframework3.5 的. 8.1.WindowsServer2012R2: 1.把镜像目录下的"sources"目录复制到 ... 
- 如何使用「mkvtoolnix」和「GoldWave」仅保留视频中左、右声道的其中一个声道?
			为什么要这样做? 我手上有一部电视剧的视频文件(.rmvb),每个视频文件都是"国/粤双语"的,与其他双语视频的两种语言的音频保存在两个音轨上不同,我这里的视频文件的双语是分别保存 ... 
- layui 列合并相同内容
			table.render({ elem: '#tbdata', method: 'post', data: jsonData, height: temphei, limit: 20, limits: ... 
- SpringBoot | 1.4 数据库事务处理
			前言 前面讲解了Sring的AOP,可以知道它是用来抽取公共代码,增强方法的.而在JDBC操作数据库进行数据处理时,有很多重复的公共代码:事务的提交与回滚跟AOP的约定流程很相似.因此,Spring数 ... 
- 打通“任督二脉”:Android 应用安装优化实战
			疑问: (1)了解APK安装流程有什么好处 (2)了解APK安装流程可以解决什么问题 一.可以在安装流程里做什么 安装就分为下面三个阶段,每个阶段可以做些什么工作,可以帮助我们优化安装流程,解决安装后 ... 
- com.rabbitmq.client.impl.Frame.readFrom(Frame.java:95)
			RabbitMQ 基于Erlang 实现, 客户端可以用Python | Java | Ruby | PHP | C# | Javascript | Go等语言来实现.这里做个java语言的测试.首先 ... 
- 大数据-Hadoop安装
			进入到Hadoop安装包路径下 [atguigu@hadoop101 ~]$ cd /opt/software/ 解压安装文件到/opt/module下面 [atguigu@hadoop101 sof ... 
- STM32笔记三
			1.单片机有两种存储器,程序存储器用来存储编写的程序,数据存储器用来存储单片机工作时的临时数据.内部存储器分为工作寄存器区.位寻址区.数据缓存区和特殊功能寄存器区. 2.位:数据存储的最小单位.在计算 ... 
- Serverless与Web后端天生不合?
			Serverless/Faas/BaaS 等概念在这几年的技术圈中是绝对的热点词汇之一,国内外众多云厂商也纷纷推出自家的 Serverless 和函数计算产品,微信也依托腾讯云推出了基于 Server ... 
- python pycharm 正则表达式批量替换
			{accept:application/json, text/plain, */*,accept-encoding:gzip, deflate, br,accept-language:zh-CN,zh ... 
