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'; ...
随机推荐
- JavaScript实现预览本地上传图片
<html> <head> <title> www.jb51.net图片上传预览 </title> <script> function Pr ...
- 《图解HTTP》读书笔记(六:HTTP状态码)
状态码的职责是当客户端向服务器端发送请求时, 描述返回的请求结果. 借助状态码, 用户可以知道服务器端是正常处理了请求, 还是出现了错误. 状态码类别 HTTP状态码由三个十进制数字组成,第一个十进制 ...
- zabbix基础服务搭建
监控系统的介绍 性能优化和监控点 1.cpu 调度器 有效的分配cpu的时间片 上下文切换 运行队列 ...
- python range的用法小题
题目(1)for i in range(10): print(i) 结果:123456789 题目(2) for lst in range(100): if lst % 7 == 0 and str( ...
- 基于Spark自动扩展scikit-learn (spark-sklearn)(转载)
转载自:https://blog.csdn.net/sunbow0/article/details/50848719 1.基于Spark自动扩展scikit-learn(spark-sklearn)1 ...
- table-cell width:1% 深入理解
问题描述 今天在使用Bootstrap给页面添加底部导航栏时,需要在手机下也使导航栏呈现水平排列的效果.最后在网上查找解决方法是,看到这样一个解决方法: .nav-justified > li ...
- 2019年IntelliJ IDEA 最新注册码,亲测可用(截止到2020年3月11日)
2019年IntelliJ IDEA 最新注册码(截止到2020年3月11日) 操作步骤: 第一步: 修改 hosts 文件 ~~~ 在hosts文件中,添加以下映射关系: 0.0.0.0 acco ...
- js获取 gif 的帧数
使用 javascript 获取 GIF 图的帧数,如果帧数过大,则不让传到服务器 这里是使用一个插件: github地址为: https://github.com/buzzfeed/libgif-j ...
- JAVA时间Date工具类
package com.common.util; import java.text.DateFormat; import java.text.ParseException; import java.t ...
- 10#Windows注册表的那些事儿
引言 用了多年的Windows系统,其实并没有对Windows系统进行过深入的了解,也正是由于Windows系统不用深入了解就可以简单上手所以才有这么多人去使用.笔者是做软件开发的,使用的基本都是Wi ...