request.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /**
  2. * 请求封装
  3. */
  4. // 基础配置
  5. const BASE_URL = 'https://api.example.com' // TODO: 替换为实际接口地址
  6. const TIMEOUT = 10000
  7. /**
  8. * 统一请求方法
  9. */
  10. export const request = (options) => {
  11. return new Promise((resolve, reject) => {
  12. // 获取 token
  13. const token = uni.getStorageSync('token') || ''
  14. uni.request({
  15. url: BASE_URL + options.url,
  16. method: options.method || 'GET',
  17. data: options.data || {},
  18. header: {
  19. 'Content-Type': 'application/json',
  20. 'Authorization': token ? `Bearer ${token}` : ''
  21. },
  22. timeout: TIMEOUT,
  23. success: (res) => {
  24. const { statusCode, data } = res
  25. // HTTP 状态码判断
  26. if (statusCode === 200) {
  27. // 业务状态码判断
  28. if (data.code === 0 || data.code === 200 || data.success) {
  29. resolve(data)
  30. } else {
  31. // 业务错误
  32. uni.showToast({
  33. title: data.message || data.msg || '请求失败',
  34. icon: 'none',
  35. duration: 2000
  36. })
  37. reject(data)
  38. }
  39. } else if (statusCode === 401) {
  40. // 未授权,清除缓存并跳转登录页
  41. uni.removeStorageSync('userInfo')
  42. uni.removeStorageSync('token')
  43. uni.reLaunch({
  44. url: '/pages/login/login'
  45. })
  46. reject({ message: '未授权,请重新登录' })
  47. } else {
  48. // 其他错误
  49. uni.showToast({
  50. title: '网络请求失败',
  51. icon: 'none',
  52. duration: 2000
  53. })
  54. reject(res)
  55. }
  56. },
  57. fail: (err) => {
  58. uni.showToast({
  59. title: '网络连接失败',
  60. icon: 'none',
  61. duration: 2000
  62. })
  63. reject(err)
  64. }
  65. })
  66. })
  67. }
  68. /**
  69. * 快捷请求方法
  70. */
  71. export const get = (url, data) => {
  72. return request({ url, method: 'GET', data })
  73. }
  74. export const post = (url, data) => {
  75. return request({ url, method: 'POST', data })
  76. }
  77. export const put = (url, data) => {
  78. return request({ url, method: 'PUT', data })
  79. }
  80. export const del = (url, data) => {
  81. return request({ url, method: 'DELETE', data })
  82. }
  83. export default request