request.ets 1.8 KB
import axios, { AxiosResponse, AxiosError, InternalAxiosRequestConfig } from '@ohos/axios'
import preferencesUtil from '../utils/preferences'
import loginOut from '../utils/loginOut'
import { promptAction } from '@kit.ArkUI';
import { router } from '@kit.ArkUI'
import baseUrl from '../utils/baseUrl'
let https = axios.create({
  baseURL: baseUrl,
  // baseURL: "https://xfappht.crgx.net",
  timeout: 10000,
  headers: { 'Content-Type': 'application/json' }
})

// 请求拦截
https.interceptors.request.use(async (config: InternalAxiosRequestConfig) => {
  if(!config.headers.unToken){
    config.headers.Authorization = preferencesUtil.get('XF_TOKEN', '') as string
  }
  return config
})

// 相应拦截
https.interceptors.response.use(async (res: AxiosResponse) => {
  // 未设置状态码则默认成功状态
  const code: number = res.data.code || 200;
  // 获取错误信息
  const msg: string = res.data.msg
  // 二进制数据则直接返回
  if (res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer') {
    return res.data
  }
  if (code === 401) {
    promptAction.showToast({
      message: '身份验证失败。请重新登录'
    })
    await loginOut()
    router.replaceUrl({
      url: 'pages/Login'
    })
    return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
  } else if (code === 500) {
    promptAction.showToast({
      message: msg,
    })
    return Promise.reject(new Error(msg))
  } else if (code === 601) {
    promptAction.showToast({
      message: msg,
    })
    return Promise.reject('error')
  } else if (code !== 200) {
    promptAction.showToast({
      message: msg,
    })
    return Promise.reject('error')
  } else {
    return res
  }
}, (Error: AxiosError) => {
  promptAction.showToast({
    message: Error.message,
  })
  return Promise.reject(Error)
})

export default https