微信小步伐封装一个request哀求

打印 上一主题 下一主题

主题 1013|帖子 1013|积分 3039

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
以下是一个支持 Promise 的微信小步伐哀求封装方案,包含基础哀求、拦截器、错误处置处罚和类型提示:
  1. // utils/request.js
  2. // 基础配置
  3. const config = {
  4.   baseURL: 'https://api.example.com',
  5.   timeout: 10000,
  6.   headers: {
  7.     'Content-Type': 'application/json'
  8.   }
  9. }
  10. // 拦截器
  11. const interceptors = {
  12.   request: [],
  13.   response: []
  14. }
  15. // 添加拦截器
  16. function addInterceptor(type, interceptor) {
  17.   interceptors[type].push(interceptor)
  18. }
  19. // 请求核心方法
  20. function request(options = {}) {
  21.   return new Promise((resolve, reject) => {
  22.     // 合并配置
  23.     const mergedOptions = {
  24.       url: config.baseURL + (options.url || ''),
  25.       method: 'GET',
  26.       header: { ...config.headers, ...options.header },
  27.       data: options.data || {},
  28.       timeout: options.timeout || config.timeout,
  29.       ...options
  30.     }
  31.     // 请求拦截
  32.     const applyRequestInterceptors = async () => {
  33.       for (const interceptor of interceptors.request) {
  34.         mergedOptions = await interceptor(mergedOptions)
  35.       }
  36.       return mergedOptions
  37.     }
  38.     // 响应处理
  39.     const handleResponse = async (res) => {
  40.       let response = res
  41.       for (const interceptor of interceptors.response) {
  42.         response = await interceptor(response)
  43.       }
  44.       if (response.statusCode >= 200 && response.statusCode < 300) {
  45.         resolve(response.data)
  46.       } else {
  47.         reject(response)
  48.       }
  49.     }
  50.     // 执行请求
  51.     applyRequestInterceptors()
  52.       .then(finalOptions => {
  53.         wx.request({
  54.           ...finalOptions,
  55.           success: handleResponse,
  56.           fail: error => {
  57.             wx.showToast({
  58.               title: '网络连接失败',
  59.               icon: 'none'
  60.             })
  61.             reject(error)
  62.           }
  63.         })
  64.       })
  65.       .catch(reject)
  66.   })
  67. }
  68. // 快捷方法
  69. const http = {
  70.   get: (url, params, options) => request({ url, method: 'GET', data: params, ...options }),
  71.   post: (url, data, options) => request({ url, method: 'POST', data, ...options }),
  72.   put: (url, data, options) => request({ url, method: 'PUT', data, ...options }),
  73.   delete: (url, data, options) => request({ url, method: 'DELETE', data, ...options }),
  74.   interceptors: {
  75.     request: {
  76.       use: interceptor => addInterceptor('request', interceptor)
  77.     },
  78.     response: {
  79.       use: interceptor => addInterceptor('response', interceptor)
  80.     }
  81.   }
  82. }
  83. export default http
复制代码
利用示例:
  1. // 在页面或组件中
  2. import http from '@/utils/request'
  3. // 添加请求拦截器(例如添加 token)
  4. http.interceptors.request.use(config => {
  5.   const token = wx.getStorageSync('token')
  6.   if (token) {
  7.     config.header.Authorization = `Bearer ${token}`
  8.   }
  9.   return config
  10. })
  11. // 添加响应拦截器(例如处理通用错误)
  12. http.interceptors.response.use(response => {
  13.   if (response.code !== 200) {
  14.     wx.showToast({ title: response.message, icon: 'none' })
  15.     return Promise.reject(response)
  16.   }
  17.   return response
  18. })
  19. // 发起请求
  20. http.get('/user/info', { id: 123 })
  21.   .then(data => console.log('请求成功:', data))
  22.   .catch(err => console.error('请求失败:', err))
  23. http.post('/order/create', { productId: 456 })
  24.   .then(console.log)
  25.   .catch(console.error)
复制代码
重要功能特点:

  • Promise 支持:利用 Promise 封装原生哀求 API
  • 拦截器机制

    • 哀求拦截器(认证、参数处置处罚)
    • 相应拦截器(错误处置处罚、数据格式化)

  • 快捷方法:内置 GET/POST/PUT/DELETE 快捷方法
  • 全局设置

    • 基础 URL 设置
    • 默认哀求头
    • 超时时间设置

  • 错误处置处罚

    • 网络错误自动提示
    • 状态码错误处置处罚
    • 业务状态码统一处置处罚


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

天津储鑫盛钢材现货供应商

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表