典型的工具类封装,增加拦截起来做相应的处理

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进行请求封装+拦截器的更多相关文章

  1. vue中采用axios发送请求及拦截器

    这几天在使用vue中axios发送get请求的时候很顺手,但是在发送post请求的时候老是在成功的回调函数里边返回参数不存在,当时就纳闷了,经过查阅资料,终于得到了解决方案,在此做一总结: 首先我们在 ...

  2. 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用

    目录 学习笔记:CentOS7学习之十六:LVM管理和ssm存储管理器使用 16.1 LVM的工作原理 16.1.1 LVM常用术语 16.1.2 LVM优点 16.2 创建LVM的基本步骤 16.2 ...

  3. 十. Axios网络请求封装

    1. 网络模块的选择 Vue中发送网络请求有非常多的方式,那么在开发中如何选择呢? 选择一:传统的Ajax是基于XMLHttpRequest(XHR) 为什么不用它呢?非常好解释配置和调用方式等非常混 ...

  4. Solon Web 开发,六、过滤器、处理、拦截器

    Solon Web 开发 一.开始 二.开发知识准备 三.打包与运行 四.请求上下文 五.数据访问.事务与缓存应用 六.过滤器.处理.拦截器 七.视图模板与Mvc注解 八.校验.及定制与扩展 九.跨域 ...

  5. Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

    Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 >>>>>>>>>>>>>>&g ...

  6. Vue 爬坑之路—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios  ...

  7. vue axios请求/响应拦截器

    // main.js中配置 // 引入 axios import Axios from 'axios' // 这时候如果在其它的组件中,是无法使用 axios 命令的. // 但如果将 axios 改 ...

  8. vue cli+axios踩坑记录+拦截器使用,代理跨域proxy(更新)

    16319 1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点建议方式 在main.js中如下声明使用 import axios from 'ax ...

  9. vue cli+axios踩坑记录+拦截器使用,代理跨域proxy

    1.首先axios不支持vue.use()方式声明使用,看了所有近乎相同的axios文档都没有提到这一点 建议方式 在main.js中如下声明使用 import axios from 'axios'; ...

随机推荐

  1. vue页面无操作10分钟内调转到登录页面

    https://blog.csdn.net/lbPro0412/article/details/83864454 页面在设定时间内无任何操作(鼠标的点击.滑动.路由的切换.是否请求接口等),跳转到登录 ...

  2. Mysql集群原理

    一. 主从复制概述  在实际生产中,数据的重要性不言而喻,提供安全可靠的数据保障是技术与运维部门的职责所在:如果我们的数据库只有一台服务器,那么很容易产生单点故障的问题,比如这台服务器访问压力过大而没 ...

  3. spark-shell的Scala的一些方法详解

    Tom,DataBase,80 Tom,Algorithm,50 Tom,DataStructure,60 Jim,DataBase,90 Jim,Algorithm,60 Jim,DataStruc ...

  4. ubuntu16.04 backup and restore

    http://blog.csdn.net/qq_35523593/article/details/78545530

  5. c++ 单元测试框架 gmock 深度剖析

    c++ 单元测试框架 gmock 深度剖析 随着微服务和CI的流行,在目前的软件工程领域中单元测试可以说是必不可少的一个环节,在TDD中,单元测试更是被提高到了一个新的高度.但是很多公司由于很多不同的 ...

  6. git之push

    git push :将本地的哪个分支推送到哪个远程主机上的哪个分支.因此明确主机.本地分支名.远程分支名这三个要素. git push命令用于将本地分支的更新,推送到远程主机.它的格式与git pul ...

  7. 【论文速读】Shitala Prasad_ECCV2018】Using Object Information for Spotting Text

    Shitala Prasad_ECCV2018]Using Object Information for Spotting Text 作者和代码 关键词 文字检测.水平文本.FasterRCNN.xy ...

  8. JAVA 11初体验

    JAVA 11初体验 随着JAVA没半年发布一次新版本,前几天JAVA 11隆重登场.在JAVA 11中,增加了一些新的特性和api, 同时也删除了一些特性和api,还有一些性能和垃圾回收的改进. 作 ...

  9. 2017-2018-2 20155228 《网络对抗技术》 实验三:MAL_免杀原理与实践

    2017-2018-2 20155228 <网络对抗技术> 实验三:MAL_免杀原理与实践 实验内容 正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasi ...

  10. 字符串Contains匹配失效

    参考博客:https://blog.csdn.net/lewky_liu/article/details/79353151 在编码过程中发现一个很神奇的事情,使用String.contains方法失效 ...