Vue-admin工作整理(十六):Ajax-axios进行请求封装+拦截器
典型的工具类封装,增加拦截起来做相应的处理
user.js:
import axios from './index'
export const getUserInfo = ({ userId }) => {
return axios.request({
url: '/getUserInfo',
method: 'post',
data: { // POST参数的请求是需要放在data里的
userId
}
})
}
axios.js 工具类:
import axios from 'axios'
import { baseURL } from '@/config'
// 以类的形式来进行封装,使用es6的class
class HttpRequest {
constructor (baseUrl = baseURL) { // 每个类必须的方法,在这个方法中,可以默认接收一些参数:options(参数对象),
// 该定义为:传入一个baseUrl参数,当没有这个参数的时候直接取配置内的baseURL数据进行赋值,这种写法为es6的写法
this.baseUrl = baseUrl // 当使用new HttpRequest的时候,this.baseUrl会将baseUrl返给变量
this.queue = {} // 设置一个队列(空对象),以队列形式管理请求
}
// 在内容设置一个全局的配置,使用方法来实现,通过该方法,来返回一个内部的配置
getInsideConfig () {
const config = {
baseUrl: this.baseUrl,
headers: {
//
}
}
return config
}
// 全局拦截器
interceptors (instance, url) { // 请求拦截器
instance.interceptors.request.use(config => {
// 添加一个请求前的控制,比如这里添加一个全局的loading...
// Spin.show() // Spin为一个加载中的组件,通过该方法可以控制该组件的显示,此时的页面是不允许点击的,此时多有的组件都会调用这个来进行显示
if (!Object.keys(this.queue).length) {
// Spin.show() // 通过Object.keys获取队列的所有属性名,如果没有请求,那么就调用一个全局的loading组件
}
this.queue[url] = true // 把url作为一个属性值来传入
console.log(config)
return config // 将请求return出去,请求才会继续。
}, error => { // 当请求出现错误的时候的处理,会提供一个错误信息
return Promise.reject(error) // 将错误信息返回
})
// 定义一个响应拦截器,就是调了接口之后服务端给出响应返回的东西,此时就通过这个方法进行拦截
instance.interceptors.response.use(res => { // 第一个回调函数,就是服务端返回的内容
console.log(res)
delete this.queue[url] // 如果成功响应,那么我就把队列里的对应的数据删掉
const { data, status } = res // 响应返回内容做一个筛选,提取我们想要使用的两个数据
return { data, status } // 将请求return出去,请求才会继续,只返回我们想要的数据。
}, error => { // 第二个函数,用来获取错误信息
delete this.queue[url] // 如果失败了,也需要把队列里该数据删掉
return Promise.reject(error) // 将错误信息返回
})
}
request (options) { // 定义完constructor之后,用request来创建一个请求,以参数方式插入一个配置,在使用的时候就是一个实例,调用request方法,插入一个配置
const instance = axios.create() // 使用axios的create方法创建一个实例,它是一个函数,我们给它传入一个配置
options = Object.assign(this.getInsideConfig(), options) // es6的方法,通过Object.assign方法将两个对象里
// 的属性合并成一个对象中去,如果两个对象存在相同的属性,那么取后面的值,所以要把请求的时候传入的配置放在后面,来覆盖全局的配置
this.interceptors(instance, options.url) // 给实例添加拦截器
return instance(options)
}
} export default HttpRequest
Vue-admin工作整理(十六):Ajax-axios进行请求封装+拦截器的更多相关文章
- vue中采用axios发送请求及拦截器
这几天在使用vue中axios发送get请求的时候很顺手,但是在发送post请求的时候老是在成功的回调函数里边返回参数不存在,当时就纳闷了,经过查阅资料,终于得到了解决方案,在此做一总结: 首先我们在 ...
- 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用
目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...
- 十. Axios网络请求封装
1. 网络模块的选择 Vue中发送网络请求有非常多的方式,那么在开发中如何选择呢? 选择一:传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢?非常好解释配置和调用方式等非常混 ...
- Solon Web 开发,六、过滤器、处理、拦截器
Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...
- Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求
Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...
- Vue 爬坑之路—— 使用 Vuex + axios 发送请求
Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...
- vue axios请求/响应拦截器
// main.js中配置 // 引入 axios import Axios from 'axios' // 这时候如果在其它的组件中,是无法使用 axios 命令的. // 但如果将 axios 改 ...
- vue cli+axios踩坑记录+拦截器使用,代理跨域proxy(更新)
16319 1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点建议方式 在main.js中如下声明使用 import axios from 'ax ...
- vue cli+axios踩坑记录+拦截器使用,代理跨域proxy
1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点 建议方式 在main.js中如下声明使用 import axios from 'axios'; ...
随机推荐
- zabbix基础服务搭建
监控系统的介绍 性能优化和监控点 1.cpu 调度器 有效的分配cpu的时间片 上下文切换 运行队列 ...
- 【VIM】-NO.140.VIM.1 -【VIM】
Style:Mac Series:Java Since:2018-09-10 End:2018-09-10 Total Hours:1 Degree Of Diffculty:5 Degree Of ...
- table-cell width:1% 深入理解
问题描述 今天在使用Bootstrap给页面添加底部导航栏时,需要在手机下也使导航栏呈现水平排列的效果.最后在网上查找解决方法是,看到这样一个解决方法: .nav-justified > li ...
- python 图像处理,画一个正弦函数
import numpy as np from PIL import Image import matplotlib.pyplot as plt import math size = 300 new_ ...
- 解决git冲突造成的Please move or remove them before you can merge
git clean -d -fx “” 其中x —–删除忽略文件已经对git来说不识别的文件d —–删除未被添加到git的路径中的文件f —–强制运行如果你确定这货已经没用了,并且git status ...
- 在C#中,Windows Console控制台 设置控制台标题、禁用关闭按钮、关闭快速编辑模式、插入模式
设置控制台标题 禁用关闭按钮 关闭快速编辑模式 关闭插入模式 设置控制台标题.禁用关闭按钮 #region 设置控制台标题 禁用关闭按钮 [DllImport("user32.dll&quo ...
- Unity shader之ColorMask
Color Mask解释,见unity文档: ColorMask ColorMask RGB | A | 0 | any combination of R, G, B, A Set color cha ...
- js时间国际化
d = new Date(); localTime = d.getTime();localOffset = d.getTimezoneOffset() * 60000; utc = localTime ...
- ubuntu18.04 安装pip3
Ubuntu18.04默认内嵌python2.python3,pip安装时,python2对应安装pip,python3对应安装pip3. sudo apt install python3-pip 检 ...
- ASP.NET页面之间传值的方式之Server.Transfer(个人整理)
Server.Transfer 这个方法相比以前介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写 ...