封装的js文件如下:

/* 用于修改 axios 的一些公用配置,具体参看文档 */
import axios from 'axios'
import store from '@/store/index.js'
import qs from 'qs'
import { isJSON } from '@/utils/utils'
import { getToken } from '@/common/js/cache'
// import { ROOT_URL } from '@/configs/config'

axios.defaults.transformRequest = (data, headers) => {
if (store.getters.token) {
headers['accesstoken'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
}
if (headers['Content-Type'] === 'application/x-www-form-urlencoded' && data && Object.prototype.toString.call(data) === '[object Object]') {
data = qs.stringify(data)
}
return data
}

const newAxios = axios.create({
timeout: 1500000
})

newAxios.interceptors.request.use(config => {
return config
}, err => {
return Promise.reject(err)
})

newAxios.interceptors.response.use(response => {
const accesstoken = response.headers.accesstoken
// debugger
const res = isJSON(response.data) ? response.data : JSON.parse(response.data)
if (accesstoken && isJSON(res.data)) {
res.data.accesstoken = accesstoken
}
return response.data
}, err => {
if (err.code === 'ECONNABORTED' && err.message.indexOf('timeout') !== -1) {
// Message.error('请求超时。。。')
console.log('请求超时。。。')
}

console.log(err)
return Promise.reject(err)
})

export function request (_param) {
const {
method = 'get',
// `responseType` 表示服务器响应的数据类型,可以是 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'
responseType = 'json', // 默认的
headers = {},
url = '',
params,
data,
...otherData
} = _param

if (!url) {
return new Promise((resolve, reject) => {
reject(new Error('url is null'))
})
}
const _method = method.toLowerCase()

if (_method === 'get') {
return newAxios({
responseType,
url,
headers,
method,
params: params || data || otherData
})
}

if (_method === 'post' || _method === 'delete' || _method === 'put') {
if (!headers.hasOwnProperty('Content-Type')) {
headers['Content-Type'] = 'application/x-www-form-urlencoded'
}
if (params && data) {
return newAxios({
responseType,
url,
headers,
method,
params,
data
})
} else {
const { start, limit, ...resetData } = otherData
return newAxios({
responseType,
url,
headers,
method,
params: params || { start, limit },
data: data || resetData
})
}
}
}

export default newAxios

接下来就是其他文件作为公用的请求进行使用了,以登陆为例子:

import { request } from '@/common/js/ajax'
import MD5 from 'crypto-js/md5'
import { getToken } from '@/common/js/cache'

export function login ({ userNo, password }) {
const url = '/v1/security/logon'
return request({
url,
method: 'post',
data: {
userNo,
password: MD5(password).toString()
}
})
}

a#x#i#o#s封装的更多相关文章

  1. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. iOS开发之App间账号共享与SDK封装

    上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...

  3. Ajax实现原理,代码封装

    都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...

  4. 用C语言封装OC对象(耐心阅读,非常重要)

    用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...

  5. 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~

    一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...

  6. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  7. 封装集合(Encapsulate Collection)

    封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...

  8. CSharpGL(29)初步封装Texture和Framebuffer

    +BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...

  9. CSharpGL(7)对VAO和VBO的封装

    CSharpGL(7)对VAO和VBO的封装 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入门参考 ...

  10. Swift -- 对AFN框架的封装

    Swift -- 对AFN框架的封装 一.封装AFN的目的 简单的说: 解耦 日常工作中,我们一般都不会去直接使用AFNetWorking来直接发送网络请求,因为耦合性太强,假设有多个控制器都使用AF ...

随机推荐

  1. printf和scanf中的%控制

    输出函数的格式字符:printf(): 附加的格式说明符: 格式输入函数的格式控制符:scanf(): 版权声明:本文为博主原创文章,未经博主允许不得转载.

  2. kendo Grid 列添加自定义模板

    columns: [ {field: "行为",template: "<a href='#= 行为#'>#= 行为#</a>"}, {f ...

  3. vim第五章 命令行模式

    vim第五章命令行模式 技巧 27 结识vim的命令行模式 在命令行模式中执行的命令有被称作ex命令    在按/调出查找提示符或者<C-r>=访问表示寄存器时 命令行模式也被激活     ...

  4. I/O输入系统

    I/O输入系统 计算机有两个主要任务:I/O操作与计算处理.在许多情况下,主要任务是I/O操作.而计算处理只是附带的. 操作系统在计算机I/O方面的作用是管理和控制I/O操作和I/O设备. 概述 对与 ...

  5. spring实战 — spring数据库事务

    欢迎加入程序员的世界,添物科技为您服务. 欢迎关注添物网的微信(微信号:tianwukeji),微博(weibo.com/91tianwu/),或下载添物APP,及时获取最新信息. 免费加入QQ群:5 ...

  6. 【Luogu】P2158仪仗队(欧拉函数)

    题目链接 首先来介绍欧拉函数. 设欧拉函数为f(n),则f(n)=1~n中与n互质的数的个数. 欧拉函数有三条引论: 1.若n为素数,则f(n)=n-1; 2.若n为pa,则f(n)=(p-1)*(p ...

  7. poj2945 Find the Clones

    Find the Clones Time Limit: 5000MS   Memory Limit: 65536K Total Submissions: 8490   Accepted: 3210 D ...

  8. 【angularjs学习】简单的语法

    <div ng-app="" ng-init="names=[{name:'Jani',country:'Norway'},{name:'Hege',country ...

  9. uva 10710 快速幂取模

    //题目大意:输入一个n值问洗牌n-1次后是不是会变成初始状态(Jimmy-number),从案例可看出牌1的位置变化为2^i%n,所以最终判断2^(n-1)=1(mod n)是否成立#include ...

  10. 【SPOJ687&POJ3693】Maximum repetition substring(后缀数组)

    题意: n<=1e5 思路: From http://hzwer.com/6152.html 往后匹配多远 r 用ST表求lcp即可...往前 l 就把串反过来再做一下.. 但是有可能求出来的最 ...