You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
3.5 KiB

  1. import { useUserStore } from "../stores/modules/userInfo/"
  2. // 移除本地 mock 前缀,默认不拼接任何 baseURL。
  3. // 如需指定真实后端,请将此值改为对应域名,例如:
  4. const baseURL = "https://hwjb.homilychart.com"
  5. const httpInterceptor = {
  6. // 拦截前触发
  7. invoke(options) {
  8. // 打印当前 baseURL 便于定位来源
  9. console.log('HTTP(baseURL)=', baseURL)
  10. // 若出现旧代码将 url 设为 http://localhost:8888,强制改为真实域名
  11. if (options.url.startsWith('http://localhost:8888')) {
  12. options.url = baseURL.replace(/\/$/, '') + options.url.replace('http://localhost:8888', '')
  13. } else if (options.url.startsWith('https://localhost:8888')) {
  14. options.url = baseURL.replace(/\/$/, '') + options.url.replace('https://localhost:8888', '')
  15. }
  16. // 仅当明确配置了 baseURL 时才拼接前缀(去掉 baseURL 尾部的斜杠,避免双斜杠)
  17. if (baseURL && !options.url.startsWith('http')) {
  18. options.url = baseURL.replace(/\/$/, '') + options.url
  19. }
  20. // 打印最终请求地址
  21. console.log('HTTP(finalUrl)=', options.url)
  22. // 2.请求超时,默认60s
  23. options.timeout = 60000
  24. console.log(options)
  25. //3 添加小程序端请求头
  26. const sys = uni.getSystemInfoSync();
  27. // 为对齐后端文档示例,client 固定为 ios(如需按平台设置再改回)
  28. const client = 'ios';
  29. options.header = {
  30. ...options.header,
  31. 'source-client': 'miniapp',
  32. // 标准头与文档头同时设置,确保兼容
  33. 'content-type': 'application/json',
  34. 'version': '1',
  35. 'client': client
  36. }
  37. //4 添加token
  38. const memberStore = useUserStore()
  39. // const token = memberStore.userInfo?.token
  40. const token = '6d818cda701590750245ce69393f2c32'
  41. if (token) {
  42. // 根据接口文档,token应该作为独立的header字段
  43. options.header.Authorization = {
  44. 'token': token
  45. }
  46. }
  47. return options
  48. }
  49. }
  50. // 添加拦截器
  51. uni.addInterceptor('request', httpInterceptor)
  52. uni.addInterceptor('uploadFile', httpInterceptor)
  53. // 添加请求函数
  54. export const http = (options) => {
  55. return new Promise((resolve, reject) => {
  56. uni.request({
  57. ...options,
  58. // 1.请求成功
  59. success: (result) => {
  60. if (result.statusCode >= 200 && result.statusCode < 300) {
  61. resolve(result.data)
  62. } else if (result.statusCode === 401) {
  63. // 清除登录信息
  64. const memberStore = useUserStore()
  65. memberStore.clearUserInfo()
  66. // 提示用户重新登录
  67. uni.navigateTo({
  68. url: '/pages/login/login'
  69. })
  70. reject(result)
  71. } else {
  72. uni.showToast({
  73. title: (result.data).msg || '请求失败',
  74. icon: 'none'
  75. })
  76. reject(result)
  77. }
  78. },
  79. // 2.请求失败
  80. fail: (err) => {
  81. reject(err)
  82. uni.showToast({
  83. title: '网络错误',
  84. icon: 'none'
  85. })
  86. }
  87. })
  88. })
  89. }