// URL 记录器
|
import Vue from 'vue'
|
import urlRecorder from './url-recorder'
|
import {
|
tryHideFullScreenLoading
|
} from '../utils/loading'
|
/**
|
* 对成功返回的请求回包进行数据预处理
|
* @param response
|
* @returns {Promise}
|
*/
|
export function handleResponseSuccess(response) {
|
tryHideFullScreenLoading()
|
urlRecorder.remove(response.config)
|
const result = response.data
|
|
// return result.content
|
if (result.code === 200) {
|
return result.data || result.content
|
} else if (result.code && result.code !== 0) {
|
return handleError(response.config, result)
|
} else if (result === '') {
|
Vue.prototype.$message({
|
type: 'error',
|
message: '服务内部错误'
|
})
|
return result
|
} else {
|
// 来自其它服务器的请求
|
return result
|
}
|
}
|
|
/**
|
* 对发送失败的请求进行数据预处理,将error对象封装为统一的形式
|
* @param error
|
* @returns {Promise}
|
*/
|
export function handleResponseFail(error) {
|
tryHideFullScreenLoading()
|
urlRecorder.remove(error.config)
|
let result
|
if (error.response) {
|
// 请求已发送,响应中返回了非2xx的错误码,包括304等
|
result = {
|
data: error.response.data,
|
msg: error.response.statusText
|
}
|
} else if (error.request) {
|
// 请求没有发送成功时的错误
|
result = {
|
data: error.request,
|
msg: error.message
|
}
|
} else {
|
// 设置请求时出错
|
result = {
|
msg: error.message
|
}
|
}
|
|
return handleError(error.config, result)
|
}
|
|
/**
|
* 统一的异常对象封装逻辑,在这里抛出异常
|
* @param {object} requestConfig 发请求时传入axios的配置信息对象
|
* @param {object|Error} result 请求回包对象,或异常信息
|
* @param {object} result.content
|
* @param {number} result.code
|
* @param {string} result.msg
|
* @returns {Promise}
|
*/
|
export function handleError(requestConfig, result) {
|
// 必须是Error对象,否则throw时vuex要报warning
|
// let err
|
// if (result instanceof Error) {
|
// err = result
|
// } else {
|
// err = new Error(result.msg)
|
// err.content = result.content
|
// err.code = result.code
|
// err.msg = result.msg
|
// }
|
if (requestConfig && requestConfig.errorHandler) {
|
result.url = requestConfig.url
|
requestConfig.errorHandler(result)
|
result.processed = true
|
}
|
return Promise.reject(result)
|
}
|
|
/**
|
* 请求拦截器,添加用户token
|
*/
|
export function handleRequest(config) {
|
|
const token = sessionStorage.getItem('token');
|
const tokenHead = sessionStorage.getItem('tokenHead');
|
if (token && tokenHead) {
|
// 这里经常搭配token使用,将token值配置到tokenkey中,将tokenkey放在请求头中
|
config.headers['Authorization'] = tokenHead + token
|
}
|
return config
|
}
|