Axios,请求拦截器, 鸿蒙NEXT版

1、第一步创建Axios实例

// 创建实例
export const axiosInstance = axios.create({
  baseURL: 'https://www.baidu.com/', // 请求基地址
  timeout: 1000 * 15 // 请求超时时间
})

2、第二步定义Data数据响应的数据类型

// 后端响应基本类型
export interface ServiceResponse<Result> {
  code: string
  msg: string
  result: Result
}

3、定义Result数据泛型

// Axios 响应类型 > 后端响应基本类型 > 不同接口响应的类型
export type AxiosResponseData<Result = null, Data = null> = AxiosResponse<ServiceResponse<Result>, Data>

4、加入请求拦截器,携带Token访问权限

// 添加请求拦截器
axiosInstance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  const loginInfo = AppStorage.get<UserInfo>(USER_KEY)
  if (loginInfo?.token) {
    config.headers.Authorization = loginInfo?.token
  }
  // 对请求数据做点什么
  return config;
}, (error: AxiosError) => {
  // 对请求错误做些什么
  // AlertDialog.show({ message: JSON.stringify(error.message, null, 2) })
  return Promise.reject(error);
});

4、添加响应拦截器

// 添加响应拦截器,AxiosResponse -> AxiosResponseData 书写时有提示
axiosInstance.interceptors.response.use((response: AxiosResponseData) => {
  // 后端能响应结果,但是业务码出现错误,提示后端返回的 msg 信息
  AlertDialog.show({ message: JSON.stringify(response.data, null, 2) })
  if (response.data.code !== '200') {
    promptAction.showToast({ message: response.data.msg })
    // 标记为 reject 失败,防止 await 后续代码执行
    // return Promise.reject(response)
  }
  // 对响应数据做点什么
  return response;
}, (error: AxiosError) => {
  // 服务器响应失败,如 404 找不到路径,服务器错误,无网络的提示 等
  AlertDialog.show({ message: JSON.stringify(error.message, null, 2) })
  if (error.message.includes('404')) {
    promptAction.showToast({ message: '请求错误,请检查 url 路径' })
  }
  else if (error.message.includes('401')) {
    promptAction.showToast({ message: '登录信息无效' })
  }
  // 对响应错误做点什么
  return Promise.reject(error);
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值