当前位置: 首页 > news >正文

微信小程序设计的请求封装方案(request.js)

以下是为微信小程序设计的请求封装方案,包含代码示例和最佳实践建议:

  1. 基础请求封装(request.js)
// 基础配置
const BASE_URL = 'https://api.yourdomain.com';
const TIMEOUT = 10000;// 请求封装函数
const request = (options) => {return new Promise((resolve, reject) => {wx.request({url: BASE_URL + options.url,method: options.method || 'GET',data: options.data || {},header: {'Content-Type': 'application/json','Authorization': wx.getStorageSync('token') || '',...options.header},timeout: options.timeout || TIMEOUT,success: (res) => {if (res.statusCode >= 200 && res.statusCode < 300) {resolve(res.data);} else {handleError(res);reject(res.data);}},fail: (err) => {handleNetworkError(err);reject(err);},complete: () => {wx.hideLoading();}});});
};// 错误处理
const handleError = (response) => {const status = response.statusCode;switch(status) {case 401:wx.removeStorageSync('token');wx.redirectTo({ url: '/pages/login/login' });break;case 403:wx.showToast({ title: '无权限访问', icon: 'none' });break;case 404:wx.showToast({ title: '资源不存在', icon: 'none' });break;case 500:wx.showToast({ title: '服务器错误', icon: 'none' });break;default:wx.showToast({ title: `请求失败: ${status}`, icon: 'none' });}
};// 网络错误处理
const handleNetworkError = (err) => {wx.showToast({title: '网络连接失败,请检查网络',icon: 'none'});
};module.exports = {request,get: (url, data, options) => request({ url, method: 'GET', data, ...options }),post: (url, data, options) => request({ url, method: 'POST', data, ...options }),put: (url, data, options) => request({ url, method: 'PUT', data, ...options }),delete: (url, data, options) => request({ url, method: 'DELETE', data, ...options })
};
  1. API 集中管理(api.js)
const { get, post } = require('./request');module.exports = {// 用户相关login: (data) => post('/user/login', data),getUserInfo: () => get('/user/info'),// 商品相关getProductList: (params) => get('/products', params),createOrder: (data) => post('/orders', data)
};
  1. 在页面中使用
const api = require('../../api');Page({async onLoad() {try {wx.showLoading({ title: '加载中...' });const userInfo = await api.getUserInfo();const products = await api.getProductList({ page: 1 });this.setData({ userInfo, products });} catch (error) {console.error('请求失败:', error);}}
});

最佳实践建议:

  1. 安全增强:
  • 使用HTTPS协议
  • 敏感数据加密传输
  • 重要接口增加双重验证
  • 定期更新token机制
  1. 性能优化:
  • 添加请求缓存机制
  • 实现请求重试策略
  • 使用wx.request的task对象实现请求取消
  • 添加并发请求控制
  1. 调试辅助:
// 在request.js中添加调试模式
if (process.env.NODE_ENV === 'development') {wx.setStorageSync('debug', true);
}// 在请求配置中添加调试日志
if (wx.getStorageSync('debug')) {console.log(`[${method}] ${url}`, data);
}
  1. 扩展功能建议:
  • 添加文件上传封装
  • 实现WebSocket封装
  • 添加请求队列管理
  • 支持多环境配置(开发/测试/生产)

注意事项:

  1. 小程序域名白名单需要在mp.weixin.qq.com配置
  2. 用户敏感信息需要加密处理
  3. 合理设置请求超时时间(建议8-15秒)
  4. 重要操作建议添加二次确认
  5. 遵循微信小程序性能优化规范

可以根据具体业务需求在此基础框架上进行扩展,建议使用TypeScript进行类型约束以提高代码健壮性。

http://www.dtcms.com/a/342478.html

相关文章:

  • NPM模块化总结
  • DINOv3 重磅发布
  • 计算机网络技术学习-day6《三层交换机配置》
  • python发布文章和同步文章到社区的工具小脚本
  • 第三阶段数据库-6:sql中函数,多表查询,运算符,索引,约束
  • 智慧城管云平台源码,微服务vue+element+springboot+uniapp技术架构,数字化综合执法办案系统
  • 数据结构之排序大全(4)
  • 苷类成分通过 PI3K/AKT 信号通路促进内皮祖细胞来源外泌体修复受损血管内皮
  • 基于YOLO11的茶叶病害智能检测系统
  • 组态软件——工业监控“大脑”
  • leetcode-python-242有效的字母异位词
  • 代码随线录刷题Day39
  • 【uni-app】自定义导航栏以及状态栏,胶囊按钮位置信息的获取
  • Java的运行时数据区
  • Notepad++换行符替换
  • 机器学习——AdaBoost算法
  • 基于YOLO11的水稻叶片病害检测项目
  • 面试压力测试破解:如何从容应对棘手问题与挑战
  • (第二十期上)HTML 超链接标签 a
  • 【工具】前端JS/VUE修改图片分辨率
  • C语言数据结构:动态顺序表实现与应用
  • 如何使用Prometheus + Grafana + Loki构建一个现代化的云原生监控系统
  • 数字社会学是干什么的?数字社会学理论与数字社会学家唐兴通讲数字社会学书籍有哪些?AI社会学人工智能社会学理论框架
  • 4090服务器无法sudo apt update 问题解决
  • 告别服务器!Amazon Lambda无服务开发实战指南
  • CI/CD 学习之路
  • 佰钧成 社招 一面
  • Cesium 实战 27 - 自定义纹理材质 - 立体墙(渐变色)
  • 【数据结构入门】排序算法:插入排序
  • C和C++的区别?