axios.interceptors.request.use(
config => {
// do something before request is sent
config.headers['Accept'] = 'application/json'
config.headers['Accept-Language'] = getLanguage()
config.headers['Content-Type'] = 'application/json; charset=utf-8'
config.headers['channel'] = '3S'
if (getToken()) {
config.headers['Authorization'] = 'Bearer ' + getToken()
}
return config
},
error => {
// do something with request error
console.log(error) // for debug
Message.error(error)
return Promise.reject(error)
}
)
axios.interceptors.response.use(
response => {
if (response.headers && response.headers.access_token) {
setToken(response.headers.access_token)
}
const res = response.data
if (response.request.responseType === "blob") {
const blob = new Blob([res], { type: response.headers["content-type"] })
const href = URL.createObjectURL(blob)
const a = document.createElement('a')
a.style.display = 'none'
a.href = href
a.download = response.headers.filename
a.click()
URL.revokeObjectURL(href)
} else if (response.request.responseType === "arraybuffer") {
return response
}
// if the custom code is not 20000, it is judged as an error.
if (res.code !== '0') {
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
if (res.code === 50008 || res.code === 50012 || res.code === 50014) {
// to re-login
Modal.warning({
title:'Confirm logout',
content:'You have been logged out, you can cancel to stay on this page, or log in again',
okText: 'Re-Login',
cancelText: 'Cancel',
onOk:function() {
}
})
} else if (res.code === undefined) {
return res
} else if (res.code === "duplicate_doc_no") {
return res
} else if (res.code === "choice_not_found") {
return res
} else if (res.code === 'holiday_camp_information_code_duplicated') {
return res
} else {
Message.error(res.message || "Error")
return Promise.reject(new Error(res.message || 'Error'))
}
} else {
return res
}
},
error => {
console.log(error)
if (error.response.status === 401) {
removeToken()
return
}
Message({
message: error.message,
type: 'error',
duration: 5 * 1000
})
return Promise.reject(error)
}
);
通过请求拦截器和响应拦截器来设置在接口请求头中携带token
最新推荐文章于 2024-07-11 16:43:54 发布