request.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import type { CustomRequestOptions } from '@/interceptors/request'
  2. /**
  3. * 请求方法: 主要是对 uni.request 的封装,去适配 openapi-ts-request 的 request 方法
  4. * @param options 请求参数
  5. * @returns 返回 Promise 对象
  6. */
  7. function http<T>(options: CustomRequestOptions) {
  8. // 1. 返回 Promise 对象
  9. return new Promise<T>((resolve, reject) => {
  10. uni.request({
  11. ...options,
  12. dataType: 'json',
  13. // #ifndef MP-WEIXIN
  14. responseType: 'json',
  15. // #endif
  16. // 响应成功
  17. success(res) {
  18. // 状态码 2xx,参考 axios 的设计
  19. if (res.statusCode >= 200 && res.statusCode < 300) {
  20. // 2.1 提取核心数据 res.data
  21. resolve(res.data as T)
  22. }
  23. else if (res.statusCode === 401) {
  24. // 401错误 -> 清理用户信息,跳转到登录页
  25. // userStore.clearUserInfo()
  26. // uni.navigateTo({ url: '/pages/login/login' })
  27. reject(res)
  28. }
  29. else {
  30. // 其他错误 -> 根据后端错误信息轻提示
  31. !options.hideErrorToast
  32. && uni.showToast({
  33. icon: 'none',
  34. title: (res.data as T & { msg?: string })?.msg || '请求错误',
  35. })
  36. reject(res)
  37. }
  38. },
  39. // 响应失败
  40. fail(err) {
  41. uni.showToast({
  42. icon: 'none',
  43. title: '网络错误,换个网络试试',
  44. })
  45. reject(err)
  46. },
  47. })
  48. })
  49. }
  50. /*
  51. * openapi-ts-request 工具的 request 跨客户端适配方法
  52. */
  53. export default function request<T = unknown>(
  54. url: string,
  55. options: Omit<CustomRequestOptions, 'url'> & {
  56. params?: Record<string, unknown>
  57. headers?: Record<string, unknown>
  58. },
  59. ) {
  60. const requestOptions = {
  61. url,
  62. ...options,
  63. }
  64. if (options.params) {
  65. requestOptions.query = requestOptions.params
  66. delete requestOptions.params
  67. }
  68. if (options.headers) {
  69. requestOptions.header = options.headers
  70. delete requestOptions.headers
  71. }
  72. return http<T>(requestOptions)
  73. }