import Cookie from 'js-cookie' // axios拦截器 // 401拦截 const resp401 = { /** * 响应数据之前做点什么 * @param response 响应对象 * @param options 应用配置 包含: {router, i18n, store, message} * @returns {*} */ onFulfilled(response, options) { // 成功回调 const {message} = options // 消息提示 if (response.code === 401) { // 未登录 message.error('无此权限') } return response }, /** * 响应出错时执行 * @param error 错误对象 * @param options 应用配置 包含: {router, i18n, store, message} * @returns {Promise} */ onRejected(error, options) { // 失败回调 const {message} = options const {response} = error if (response.status === 401) { message.error('无此权限') } return Promise.reject(error) } } const resp403 = { onFulfilled(response, options) { const {message} = options if (response.code === 403) { message.error('请求被拒绝') } return response }, onRejected(error, options) { const {message} = options const {response} = error if (response.status === 403) { message.error('请求被拒绝') } return Promise.reject(error) } } const reqCommon = { // 请求拦截器 /** * 发送请求之前做些什么 * @param config axios config * @param options 应用配置 包含: {router, i18n, store, message} * @returns {*} */ onFulfilled(config, options) { const {message} = options // 消息提示 const {url, xsrfCookieName} = config // 获取config中的url和xsrfCookieName if (url.indexOf('login') === -1 && xsrfCookieName && !Cookie.get(xsrfCookieName)) { // 如果url中不包含login并且xsrfCookieName存在并且Cookie中不存在xsrfCookieName if (localStorage.getItem(process.env.VUE_APP_UID_KEY)) { message.warning('认证 token 已过期,请重新登录') // 提示 } } return config }, /** * 请求出错时做点什么 * @param error 错误对象 * @param options 应用配置 包含: {router, i18n, store, message} * @returns {Promise} */ onRejected(error, options) { const {message} = options message.error(error.message) return Promise.reject(error) } } export default { request: [reqCommon], // 请求拦截 response: [resp401, resp403] // 响应拦截 }