当前位置:   article > 正文

鸿蒙笔记——axios基础封装+PersistentStorage持久化存储登录信息_封装 persistentstorage

封装 persistentstorage
  1. // 基于axios做一些基础封装:
  2. import axios, { InternalAxiosRequestConfig, AxiosError, AxiosResponse, AxiosRequestConfig } from '@ohos/axios'
  3. import { promptAction, router } from '@kit.ArkUI'
  4. import { Auth } from './Auth' //封装的登录信息全局化
  5. // 1. 实例化(baseURL + timeout)
  6. // 配置:接口基地址、超时时间
  7. const httpInstance = axios.create({
  8. baseURL: 'https://xxx/',
  9. timeout: 5000
  10. })
  11. // 2. 拦截器:在请求或响应被 then 或 catch 处理前拦截它们。
  12. // 请求:客户端 (请求参数 token)-> 服务端
  13. // 拦截器可以添加多个 前一个拦截器处理之后的结果交给下一个拦截器继续处理 直到没有拦截器---最后一个return出去的config就是最终的请求参数
  14. httpInstance.interceptors.request.use((config: InternalAxiosRequestConfig) => {
  15. // 全局注入token
  16. const token = Auth.getUser()?.token
  17. if (token) {
  18. config.headers.Authorization = token
  19. }
  20. // 注意:return千万不要丢
  21. return config
  22. }, (error: AxiosError) => {
  23. return Promise.reject(error)
  24. })
  25. // 2.响应:响应返回数据
  26. // 服务器 ->[拦截器] 客户端
  27. // 判断响应状态码做逻辑处理 401(token失效)、404
  28. // 依据 http code 2xx(成功走第一个回调) 4xx 5xx(走第二个回调)
  29. // 定义错误接口类型
  30. interface APIErrorType {
  31. message: string
  32. msg: string
  33. code: string
  34. }
  35. httpInstance.interceptors.response.use((response: AxiosResponse) => {
  36. return response
  37. }, (error: AxiosError<APIErrorType>) => {
  38. // 对响应错误做点什么
  39. if (error.response) {
  40. promptAction.showToast({
  41. message: error.response.data.message,
  42. duration: 2000
  43. })
  44. // token失效跳转到登录页
  45. if (error.response.status === 401) {
  46. Auth.delUser() // 清除本地用户信息
  47. router.pushUrl({ // 跳转到登录页
  48. url: 'pages/LoginPage'
  49. })
  50. }
  51. }
  52. return Promise.reject(error)
  53. })
  54. // 3. 定义一个接口通用的泛型返回类型
  55. interface HttpRes<T> {
  56. code: string,
  57. msg: string,
  58. result: T
  59. }
  60. // 封装fetchData函数
  61. // 1. 参数 2. 核心逻辑 3.返回值
  62. function fetchData<T>(reqConfig: AxiosRequestConfig): Promise<AxiosResponse<HttpRes<T>, null>> {
  63. // axios实例发送请求 // 返回promise
  64. return httpInstance.request<null, AxiosResponse<HttpRes<T>, null>, null>(reqConfig)
  65. }
  66. export { httpInstance, fetchData }
  1. export const USER_KEY = 'userInfo'
  2. // 用户信息类型
  3. export interface UserType {
  4. token: string
  5. name: string
  6. avatar: string
  7. account: string
  8. 。。。。
  9. }
  10. export class Auth {
  11. // 持久化Token
  12. static initLocalUser() {
  13. PersistentStorage.persistProp(USER_KEY, {})
  14. }
  15. // 存数据
  16. static setUser(data: UserType) {
  17. AppStorage.setOrCreate(USER_KEY, data)
  18. }
  19. // 取数据
  20. static getUser(): UserType {
  21. return AppStorage.get(USER_KEY) as UserType
  22. }
  23. // 删数据
  24. static delUser() {
  25. AppStorage.setOrCreate(USER_KEY, {})
  26. }
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/878296
推荐阅读
相关标签
  

闽ICP备14008679号