Axios数据:封装请求的方法DEMO。上代码:
import axios from 'axios'
import Qs from 'qs'
import { Notification } from 'element-ui'
import { API_HOST } from '@/config'
import { getToken } from '@/utils/auth'
// 若有多个业务域名,则创建多个实例
const instance = axios.create({
baseURL: API_HOST || process.env.VUE_APP_API_HOST,
timeout: 10 * 1e3
})
/**
* 实例请求拦截函数
* @param {Object} config 请求配置信息
* @return {Object | Promise} 请求配置信息或错误信息
*/
instance.interceptors.request.use(config => {
// Set token here
config.headers['TICKET'] = getToken()
// transform post data to queryString
if (config.method === 'post' && config.headers['Content-Type'] !== 'multipart/form-data') {
config.data = Qs.stringify(config.data)
}
// 文件上传
// 只需要在Post请求时候将opts的headers属性设置为
// { 'Content-Type': 'multipart/form-data' }
// 即可。例:
// const uploadImage = params => request('post', '/upload', params, {
// headers: {
// 'Content-Type': 'multipart/form-data'
// }
// })
//
// 下面以使用FormData的file字段名来保存文件举例。
// 若为单图上传,则将File类型保存到字段名`file`中即可。
// 若为多图上传,则需将File类型的数据数组保存在`file[]`形式的字段内。
if (config.headers['Content-Type'] === 'multipart/form-data') {
const { data } = config
let fd = new FormData()
for (const key in data) {
if (data.hasOwnProperty(key)) {
if (key.endsWith('[]')) {
data[key].forEach(item => {
fd.append(key, item);
})
} else {
fd.append(key, data[key])
}
}
}
config.data = fd;
}
return config
}, err => {
return Promise.reject(err)
})
/**
* 实例响应拦截函数
* @param {Object} res 请求响应信息
* @return {Object | Promise} 请求响应信息或错误信息
*/
instance.interceptors.response.use(res => {
const { data } = res
if (data.code && data.code === '200') {
return data
} else if (data.code && data.code === '401') {
window.location.href = '/path_to_your/login.html'
return Promise.reject(data)
} else {
Notification.error(data.msg || '接口返回出错!')
return Promise.reject(data)
}
}, err => {
if (err.code === 'ECONNABORTED' && err.message.indexOf('timeout') !== -1) {
Notification.error('接口请求超时,请刷新!')
} else {
Notification.error(err.msg || '接口返回出错!')
}
return Promise.reject(err)
})
/**
* 封装后导出的数据请求函数
* @param {String} method HTTP请求类型
* @param {String} path 请求路径
* @param {Object} params 请求参数
* @param {Object} opts 请求配置参数
* @return {Promise} 异步Promise
*/
export default function (method, path, params = {}, opts = {}) {
method = method.toLowerCase()
switch (method) {
case 'get':
return instance.get(path, { params })
case 'post':
return instance.post(path, params, opts)
case 'delete':
return instance.delete(path, { params })
case 'put':
return instance.put(path, params)
default:
return Promise.reject(`未知的method---${method}`)
}
}学习下咯。





网友评论文明上网理性发言 已有0人参与
发表评论: