request.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { extend } from 'umi-request'
  2. import { Toast } from 'vant'
  3. import cleanDeep from 'clean-deep'
  4. import { getRequestHostname, browser } from '/src/helpers/utils'
  5. // import ApiRouter from '/src/api-router'
  6. import { postMessage } from './native-message'
  7. export interface SearchInitParams {
  8. rows?: string | number
  9. page?: string | number
  10. }
  11. export interface InitSearchRespones {
  12. data: {
  13. rows: any[]
  14. [key: string]: any
  15. }
  16. [key: string]: any
  17. }
  18. let isOpenLogin = false
  19. const request = extend({
  20. requestType: 'json',
  21. timeout: 10000,
  22. prefix: getRequestHostname(),
  23. })
  24. request.use(async (ctx, next) => {
  25. const { url, options } = ctx.req
  26. await next()
  27. })
  28. request.interceptors.request.use(
  29. (url, options: any) => {
  30. const Authorization = sessionStorage.getItem('Authorization') || ''
  31. return {
  32. url,
  33. options: {
  34. ...options,
  35. params: cleanDeep(options.params),
  36. headers: {
  37. ...options.headers,
  38. Authorization,
  39. },
  40. },
  41. }
  42. },
  43. { global: false }
  44. )
  45. request.interceptors.response.use(
  46. async (res, options) => {
  47. const url = new URL(res.url)
  48. if (res.status > 299 || res.status < 200) {
  49. const msg = '服务器错误,状态码' + res.status
  50. Toast(msg)
  51. throw new Error(msg)
  52. }
  53. const data = await res.clone().json()
  54. if (data.code !== 200 && data.errCode !== 0) {
  55. const msg = data.msg || data.message || '处理失败,请重试'
  56. if (!(data.code === 403 || data.code === 401)) {
  57. Toast(msg)
  58. }
  59. const browserInfo = browser()
  60. if (data.code === 403 && browserInfo.isApp && !isOpenLogin) {
  61. if (browserInfo.android) {
  62. postMessage({
  63. api: 'login',
  64. })
  65. ;(window as any).DAYA.postMessage(JSON.stringify({ api: 'login' }))
  66. } else if (browserInfo.iPhone) {
  67. ;(window as any).webkit.messageHandlers.DAYA.postMessage(JSON.stringify({ api: 'login' }))
  68. }
  69. }
  70. throw new Error(msg)
  71. }
  72. return res
  73. },
  74. { global: false }
  75. )
  76. export default request