@@ -17,10 +17,11 @@ import {Message} from 'element-ui';
import { Base64 } from 'js-base64' ;
import NProgress from 'nprogress' ;
const replaceStr = JSON . parse ( process . env . VUE _APP _REPLACE _STR )
//默认超时时间
axios . defaults . timeout = 60000 ;
//返回其他状态码
axios . defaults . validateStatus = function ( status ) {
axios . defaults . validateStatus = function ( status ) {
return status >= 200 && status <= 500 ;
} ;
//跨域请求, 允许保存cookie
@@ -34,7 +35,7 @@ axios.interceptors.request.use(config => {
const meta = ( config . meta || { } ) ;
const isToken = meta . isToken === false ;
config . headers [ 'Authorization' ] =
` Basic ${ Base64 . encode ( ` ${ website . clientId } : ${ website . clientSecret } ` ) } ` ;
` Basic ${ Base64 . encode ( ` ${ website . clientId } : ${ website . clientSecret } ` ) } ` ;
if ( getToken ( ) && ! isToken ) {
//让每个请求携带token--['Authorization']为自定义key 请根据实际情况自行修改
config . headers [ 'Jobslink-Auth' ] = 'bearer ' + getToken ( )
@@ -44,42 +45,68 @@ axios.interceptors.request.use(config => {
config . data = serialize ( config . data ) ;
}
return config
} , error => { return Promise . reject ( error ) } ) ;
} , error => {
return Promise . reject ( error )
} ) ;
// http response 拦截
axios . interceptors . response . use (
res => {
//关闭 progress bar
NProgress . done ( ) ;
//获取状态码
const status = res . data . code || res . status ;
const statusWhiteList = website . statusWhiteList || [ ] ;
const message = res . data . msg || res . data . error _description || '未知错误' ;
//如果在白名单里则自行catch逻辑处理
if ( statusWhiteList . includes ( status ) ) return Promise . reject ( res ) ;
//如果是401则跳转到登录页面
if ( status === 401 )
store . dispatch ( 'FedLogOut' ) . then ( ( ) => router . push ( { path : '/login' } ) ) ;
// 如果请求为500统一处理
const err = new Error ( message )
err . response = res
err . status = status
if ( message . length > 100 ) {
Message ( { message : '系统繁忙' , type : 'error' } ) ;
return Promise . reject ( err )
res => {
//关闭 progress bar
NProgress . done ( ) ;
//获取状态码
const status = res . data . code || res . status ;
const statusWhiteList = website . statusWhiteList || [ ] ;
const message = res . data . msg || res . data . error _description || '未知错误' ;
//如果在白名单里则自行catch逻辑处理
if ( statusWhiteList . includes ( status ) ) return Promise . reject ( res ) ;
//如果是401则跳转到登录页面
if ( status === 401 )
store . dispatch ( 'FedLogOut' ) . then ( ( ) => router . push ( { path : '/login' } ) ) ;
// 如果请求为500统一处理
const err = new Error ( message )
err . response = res
err . status = status
if ( message . length > 100 ) {
Message ( { message : '系统繁忙' , type : 'error' } ) ;
return Promise . reject ( err )
}
// 如果请求为非200否者默认统一处理
if ( status !== 200 ) {
Message ( { message : message , type : 'error' } ) ;
return Promise . reject ( err , res )
}
return transformReplaceStr ( res ) ;
} ,
error => {
NProgress . done ( ) ;
if ( error . message . includes ( 'timeout' ) ) {
Message ( { message : '请求超时' , type : 'error' } ) ;
}
return Promise . reject ( new Error ( error ) , error ) ;
} ) ;
// 递归替换 url
function transformReplaceStr ( props ) {
if ( typeof props !== 'object' || props === null ) {
for ( const key in replaceStr ) {
if ( typeof props === 'string' ) {
props = props . replace ( key , replaceStr [ key ] ) ;
}
// 如果请求为非200否者默认统一处理
if ( status !== 200 ) {
Message ( { message : message , type : 'error' } ) ;
return Promise . reject ( err , res )
}
return res ;
} ,
error => {
NProgress . done ( ) ;
if ( error . message . includes ( 'timeout' ) ) {
Message ( { message : '请求超时' , type : 'error' } ) ;
}
return Promise . reject ( new Error ( error ) , error ) ;
} ) ;
}
return props ;
}
let result ;
if ( props instanceof Array ) {
result = [ ] ;
} else {
result = { } ;
}
for ( let key in props ) {
if ( props . hasOwnProperty ( key ) ) {
result [ key ] = transformReplaceStr ( props [ key ] ) ;
}
}
return result ;
}
export default axios ;