1.请求封装及参数携带规范
import Vue from 'vue'
import axios from 'axios'
import router from '@/router'
import qs from 'qs'
import merge from 'lodash/merge'
import { clearLoginInfo } from '@/utils'
const http = axios.create({
timeout: 1000 * 30,
withCredentials: true,
headers: {
'Content-Type': 'application/json; charset=utf-8'
}
})
// 接口配置的数组对象转化为方法
// const withAxios = apiConfig =>{
// const serviceMap = {}
// apiConfig.map(({name, url, method}) => {
// serviceMap[name] = async function (data = {}) {
// let key = 'params'
// if (method === 'post' || method === 'get') {
// key = 'data'
// }
// return axios({
// method,
// url: '/api' + url,
// [key]: data
// })
// }
// })
// return serviceMap
// }
/**
* 请求拦截
*/
http.interceptors.request.use(config => {
config.headers['token'] = Vue.cookie.get('token') // 请求头带上token
config.headers['username'] = Vue.cookie.get('username') // 请求头带上token
return config
}, error => {
return Promise.reject(error)
})
/**
* 响应拦截
*/
http.interceptors.response.use(response => {
if (response.data && response.data.code === 401) { // 401, token失效
clearLoginInfo()
router.push({ name: 'login' })
}
return response
}, error => {
return Promise.reject(error)
})
http.adornUrl = (actionName) => {
// 非生产环境 && 开启代理, 接口前缀统一使用[/proxyApi/]前缀做代理拦截!
// return (process.env.NODE_ENV !== 'production' && process.env.OPEN_PROXY ? '/proxyApi/' : window.SITE_CONFIG.baseUrl) + actionName
return '/api' + actionName
}
http.adornNoApiUrl = (actionName) => {
return actionName
}
http.adornParams = (params = {}, openDefultParams = true) => {
var defaults = {
't': new Date().getTime()
}
return openDefultParams ? merge(defaults, params) : params
}
http.adornData = (data = {}, openDefultdata = true, contentType = 'json') => {
var defaults = {
't': new Date().getTime()
}
data = openDefultdata ? merge(defaults, data) : data
return contentType === 'json' ? JSON.stringify(data) : qs.stringify(data)
}
export default http
2.普通文件下载的请求,比如流文件的格式及参数
export const exportNavControl = (data) => httpXG.post(`接口名称`, data, 'application/json', 'blob')
// (‘接口名称’,‘携带参数’,'请求参数格式',‘流文件格式’)
3.git的坑加入后端需要的参数是后尾拼接的话就用params接收如果需要将参数放入body中的话就用data接收在封装时应封装两个git与delete请求(这两个请求方式大致相同)
//拼接参数写法
get: (url, data) => {
return axios({
method: 'get',
url,
params: data
}).then((res) => {
return checkStatus(res)
}).catch((error) => {
console.log(error)
})
//携带参数写法
get: (url, data) => {
return axios({
method: 'get',
url,
data: data
}).then((res) => {
return checkStatus(res)
}).catch((error) => {
console.log(error)
})
这就是一套近乎完美的请求封装了
版权声明:本文为m0_59630275原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。