| | |
| | | import Request from '@/common/luch-request/index.js' |
| | | import {ACCESS_TOKEN} from '@/common/util/constants.js' |
| | | import { |
| | | ACCESS_TOKEN |
| | | } from '@/common/util/constants.js' |
| | | import configService from './config.service.js' |
| | | import tip from '@/common/util/tip.js'; |
| | | import store from '@/store/index.js'; |
| | |
| | | |
| | | const getTokenStorage = () => { |
| | | let token = '' |
| | | try{ |
| | | try { |
| | | token = uni.getStorageSync(ACCESS_TOKEN) |
| | | }catch(e){ |
| | | } catch (e) { |
| | | //TODO handle the exception |
| | | console.log("getTokenStorage",token) |
| | | console.log("getTokenStorage", token) |
| | | } |
| | | return token |
| | | } |
| | |
| | | |
| | | |
| | | const http = new Request() |
| | | http.setConfig((config) => { /* 设置全局配置 */ |
| | | config.baseUrl = apiUrl /* 根域名不同 */ |
| | | config.header = { |
| | | ...config.header |
| | | } |
| | | return config |
| | | http.setConfig((config) => { |
| | | /* 设置全局配置 */ |
| | | config.baseUrl = apiUrl /* 根域名不同 */ |
| | | config.header = { |
| | | ...config.header |
| | | } |
| | | return config |
| | | }) |
| | | |
| | | /** |
| | |
| | | */ |
| | | // 有默认,非必写 |
| | | http.validateStatus = (statusCode) => { |
| | | return statusCode === 200 |
| | | return statusCode === 200 |
| | | } |
| | | |
| | | http.interceptor.request((config, cancel) => { /* 请求之前拦截器 */ |
| | | config.header = { |
| | | ...config.header, |
| | | 'X-Access-Token':getTokenStorage() |
| | | } |
| | | /* |
| | | if (!token) { // 如果token不存在,调用cancel 会取消本次请求,但是该函数的catch() 仍会执行 |
| | | cancel('token 不存在') // 接收一个参数,会传给catch((err) => {}) err.errMsg === 'token 不存在' |
| | | } |
| | | */ |
| | | return config |
| | | http.interceptor.request((config, cancel) => { |
| | | /* 请求之前拦截器 */ |
| | | config.header = { |
| | | ...config.header, |
| | | 'X-Access-Token': getTokenStorage() |
| | | } |
| | | /* |
| | | if (!token) { // 如果token不存在,调用cancel 会取消本次请求,但是该函数的catch() 仍会执行 |
| | | cancel('token 不存在') // 接收一个参数,会传给catch((err) => {}) err.errMsg === 'token 不存在' |
| | | } |
| | | */ |
| | | return config |
| | | }) |
| | | |
| | | // 必须使用异步函数,注意 |
| | | http.interceptor.response(async (response) => { /* 请求之后拦截器 */ |
| | | // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject() |
| | | // return Promise.reject(response) |
| | | // } |
| | | return response |
| | | http.interceptor.response(async (response) => { |
| | | /* 请求之后拦截器 */ |
| | | // if (response.data.code !== 200) { // 服务端返回的状态码不等于200,则reject() |
| | | // return Promise.reject(response) |
| | | // } |
| | | return response |
| | | }, (response) => { |
| | | // 请求错误做点什么 |
| | | console.log("请求错误做点什么",response); |
| | | if (response) { |
| | | let data = response.data |
| | | const token = uni.getStorageSync(ACCESS_TOKEN) |
| | | console.log("------异常响应------",token) |
| | | console.log("------异常响应------",data.status) |
| | | switch (data.status) { |
| | | case 403: |
| | | tip.error('拒绝访问'); |
| | | break |
| | | case 500: |
| | | this.$tip.alert('服务器遇到一个错误,暂时无法处理您的请求'); |
| | | // if(!token || data.message=="Token失效,请重新登录"){ |
| | | // let timeout=setTimeout(tip.alert('登录已过期'), 1000); |
| | | // store.dispatch('Logout').then(() => { |
| | | // clearTimeout(timeout) |
| | | // window.location.reload() |
| | | // }) |
| | | // } |
| | | break |
| | | case 404: |
| | | break |
| | | case 504: |
| | | break |
| | | case 401: |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: '登录超时,需要重新登录!', |
| | | showCancel:false, |
| | | success: (res)=> { |
| | | if (res.confirm) { |
| | | uni.reLaunch({ |
| | | url: '/pages/login/login' |
| | | }) |
| | | } |
| | | } |
| | | }); |
| | | break |
| | | default: |
| | | tip.error({ |
| | | duration: 0, |
| | | forbidClick: true, |
| | | message: data.message |
| | | }); |
| | | break |
| | | } |
| | | } |
| | | return response |
| | | console.log("请求错误做点什么", response); |
| | | if (response) { |
| | | let data = response.data |
| | | const token = uni.getStorageSync(ACCESS_TOKEN) |
| | | console.log("------异常响应------", token) |
| | | console.log("------异常响应------", data.status) |
| | | switch (data.code) { |
| | | case 403: |
| | | tip.error('拒绝访问'); |
| | | break |
| | | case 500: |
| | | if (!token || data.message === "Token失效,请重新登录") { |
| | | // 先提示用户 |
| | | tip.alert('登录已过期'); |
| | | |
| | | // 延迟执行登出并刷新页面,避免提示被中断 |
| | | const timeout = setTimeout(() => { |
| | | store.dispatch('Logout') |
| | | .then(() => { |
| | | window.location.reload(); |
| | | }) |
| | | .catch((error) => { |
| | | console.error('Logout failed:', error); |
| | | window.location.reload(); // 出错时也强制刷新 |
| | | }); |
| | | }, 1000); |
| | | } |
| | | break |
| | | case 404: |
| | | break |
| | | case 504: |
| | | break |
| | | case 401: |
| | | uni.showModal({ |
| | | title: '提示', |
| | | content: '登录超时,需要重新登录!', |
| | | showCancel: false, |
| | | success: (res) => { |
| | | if (res.confirm) { |
| | | uni.reLaunch({ |
| | | url: '/pages/login/login' |
| | | }) |
| | | } |
| | | } |
| | | }); |
| | | break |
| | | default: |
| | | tip.error({ |
| | | duration: 0, |
| | | forbidClick: true, |
| | | message: data.message |
| | | }); |
| | | break |
| | | } |
| | | } |
| | | return response |
| | | }) |
| | | |
| | | export { |
| | | http |
| | | } |
| | | http |
| | | } |