Vue axios封装 实现请求响应拦截
封装
axios.js
import axios from 'axios'
import {
baseURL
} from '@/config'
class HttpRequest {
constructor (baseURL = baseURL) {
this.baseURL = baseURL
this.queue = {} // 队列中有请求时 显示loadong界面, 反之同理
}
getInsideConfig () {
const config = {
baseURL: this.baseURL,
header: {
//
}
}
return config
}
// 全局响应拦截器
interceptors (instance, url) {
instance.interceptors.request.use(config => { // 请求拦截器
// 添加全局的loading...
// Spin.show() ---遮罩组件
// 队列中有请求时 显示loadong界面, 反之同理
if (!Object.keys(this.queue).length) {
// Spin.show()
}
this.queue[url] = true
console.log(config)
/*
* {adapter: ƒ, transformRequest: {…}, * transformResponse: {…}, timeout: 0, xsrfCookieName: * "XSRF-TOKEN", …}
* adapter: ƒ xhrAdapter(config)
* baseURL: undefined
* data: undefined
* header: {}
* maxContentLength: -1
* method: "get"
* timeout: 0
* transformRequest: {0: ƒ}
* transformResponse: {0: ƒ}
* url: "/userinfo"
* validateStatus: ƒ validateStatus(status)
* xsrfCookieName: "XSRF-TOKEN"
* xsrfHeaderName: "X-XSRF-TOKEN"
* __proto__: Object
*/
return config
}, error => {
return Promise.reject(error)
})
instance.interceptors.response.use(res => { // 响应拦截器, res为服务端返回数据
delete this.queue[url]
console.log(res)
/*
* {data: {…}, status: 200, statusText: "OK", headers: {…}, config: {…}, …}
* config: {adapter: ƒ, transformRequest: {…}, transformResponse: {…}, timeout: 0, xsrfCookieName: "XSRF-TOKEN", …}
* data: {code: 1, msg: "请先登陆"}
* headers: {date: "Wed, 29 May 2019 17:14:59 GMT", etag: "W/"1f-DqVJ3VSipebpjnlLj9vGsYkCMOw"", x-powered-by: "Express", content-length: "31", content-type: * "application/json; charset=utf-8"}
* request: XMLHttpRequest {onreadystatechange: ƒ, readyState: 4, timeout: 0, withCredentials: false, upload: XMLHttpRequestUpload, …}
* status: 200
* statusText: "OK"
* __proto__: Object
*/
const {
data,
status
} = res
return {
data,
status
}
}, error => {
delete this.queue[url]
return Promise.reject(error)
})
}
request (options) {
console.log(options) // {url: "/userinfo", method: "get"}
const instance = axios.create()
// 合并为一个对象, 如果有相同的key值 后者覆盖前者
options = Object.assign(this.getInsideConfig(), options)
this.interceptors(instance, options.url)
return instance(options)
}
}
export default HttpRequest
api/index.js
import HttpRequest from '@/lib/axios'
const axios = new HttpRequest()
export default axios
使用
- 创建发送请求的api
user.js
import axios from './index'
export const getUserInfo = ({ userId }) => {
return axios.request({
url: '/userinfo',
method: 'post',
data: {
userId: userId
}
})
}
- 在页面中引入使用
- home.vue
<template>
<div>
<h1>home page</h1>
</div>
</template>
<script>
import { getUserInfo } from '@/api/user';
export default {
mounted () {
this.getInfo()
},
methods: {
getInfo () {
getUserInfo({ userId: 21 }).then(res => {
console.log(res)
})
}
}
}
</script>
Vue axios封装 实现请求响应拦截的更多相关文章
- vue中使用axios与axios的请求响应拦截
VUE中使用Axios axios的安装 npm install axios vue-axios axios在vue的配置与使用 在main.js中引入axios和vue-axios import a ...
- vue axios请求/响应拦截器
// main.js中配置 // 引入 axios import Axios from 'axios' // 这时候如果在其它的组件中,是无法使用 axios 命令的. // 但如果将 axios 改 ...
- axios请求响应拦截器的应用
什么是axios拦截器? 一般在使用axios时,会用到拦截器的功能,一般分为两种:请求拦截器.响应拦截器. 请求拦截器在请求发送前进行必要操作处理 例如添加统一cookie.请求体加验证.设置请求头 ...
- vue+axios 对restful 请求封装
礼拜天来公司整理项目,项目是最近开始重构的,里面的各种http请求接口是restful结构的(为了提升项目的比格),整理一下笔记 [restful介绍][1]博主讲的很详细 技术栈: vue + vu ...
- vue axios封装以及登录token过期跳转问题
Axios配置JWT/封装插件/发送表单数据 首先请务必已仔细阅读 Axios 文档并熟悉 JWT: 中文文档 JWT 中文文档 安装 npm install axios npm install es ...
- vue axios 封装(二)
封装二: http.js import axios from 'axios' import storeHelper from './localstorageHelper' // 全局设置 const ...
- vue Axios 封装与配置项
import axios from "axios"; import qs from "qs"; import { Message } from "el ...
- vue axios配置 发起请求加载loading请求结束关闭loading
axios带有请求拦截器,避免在每个请求里面加loading重复操作,可以封装进去,在请求开始时加载loading层,请求结束关闭,loading层用vux的loading加载 axios.js im ...
- vue axios封装
前言: 对第三方库进行二次封装和抽离到统一模块,项目面对自己的模块进行开发.如果有一天更换库,只需要修改自己模块中的代码,无需对整个项目进行重构. 将axios网络请求库封装到network文件下的r ...
随机推荐
- Angular Datatable的一些问题
这几天改bug中发现的一些问题,小结一下.从简单到复杂逐个讲. angular datatable实质上是对jquery库的包装,但包装后不太好用,定制功能比较麻烦. 1. 基本用法 最简单的用法,大 ...
- echars 饼图使用
option = { tooltip: { trigger: 'item', formatter: '{a} <br/>{b}: {c} ({d ...
- ceph osd跟cpu进行绑定
通过cgroup将ceph-osd进程与某一个 CPU core 绑定脚本: mkdir -p /sys/fs/cgroup/cpuset/ceph # cup number : ,,, = - ec ...
- linux下显示dd命令的进度
sudo dd if=/dev/zero of=/tmp/zero.img status=progresslinux下显示dd命令的进度:dd if=/dev/zero of=/tmp/zero.im ...
- appium配置
前言 最近报了个班,学习关于全栈自动化相关内容.学归学.培训就像敲门砖,领人入门,同时可以比较系统性的给学习到关于这块的基础知识(比较好的培训机构).其次想着总结一些培训知识和遇到的一些问题,以供自己 ...
- 内存不够用还要速度快,终于找到可以基于 File 的 Cache 了
一:背景 1. 讲故事 18年的时候在做纯内存项目的过程中遇到了这么一个问题,因为一些核心数据都是飘在内存中,所以内存空间对我们来说额外宝贵,但偏偏项目中有些数据需要缓存,比如说需要下钻的报表上的点, ...
- latex:公式的序号
1.排序单位 在文类book或report中,行间公式是以章为排序单位的,即每一新章节开始,公式序号计数器equation就被清零.比如第1章第3个公式的序号是(1.3),第2章第1个公式的序号是(2 ...
- JS 对象基本用法
声明对象的两种语法 let obj = { 'name': 'frank', 'age': 18 } let obj = new Object({'name': 'frank'}) 如何删除对象的属性 ...
- codeforce Round #605(Div.3)
A. Three Friends 题目链接 题目意思:有三个好朋友a,b,c.他们在一个坐标轴上,他们的位置分别是xa 和xb ,xc,他们三个人都可以往前或者往后走一步,只能走一步.问你他们走了(也 ...
- DNSPod 修改NS 服务器?
其实我几乎没在国内注册过域名,更没想过用国内的DNS 服务,DNSPod 也是属于听说过名字的地步而已,但是正好在腾讯云注册了一个cn 域名,又觉得对DNSPod 的DNS 服务不是特别满意,所以想把 ...