首页 > 编程语言 >如何封装小程序的数据请求方法

如何封装小程序的数据请求方法

时间:2024-06-04 14:12:17浏览次数:28  
标签:封装 请求 url res 程序 header api const data

平时我们在开发中也会封装数据请求的通用工具,因为有很多相同的处理,没必要每次使用都把重复的再写一遍。在微信小程序中也是一样,封装数据请求的方式可以提高代码的可维护性和复用性。

创建请求模块

首先,创建一个新的 JavaScript 文件(例如 api.js),用于封装所有的数据请求。这个模块将包含一个通用的请求方法和具体的 API 方法。

api.js:

const baseUrl = 'https://example.com/api'; // 替换为你的实际API地址

const request = (url, method, data, header = {}) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${baseUrl}${url}`,
      method: method,
      data: data,
      header: {
        'Content-Type': 'application/json',
        ...header
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          reject(res.data);
        }
      },
      fail: (err) => {
        reject(err);
      }
    });
  });
};

const get = (url, data, header) => {
  return request(url, 'GET', data, header);
};

const post = (url, data, header) => {
  return request(url, 'POST', data, header);
};

// 其他请求方法可以按需添加,例如 put、delete 等
const put = (url, data, header) => {
  return request(url, 'PUT', data, header);
};

const del = (url, data, header) => {
  return request(url, 'DELETE', data, header);
};

// 具体的 API 方法
const api = {
  getUserData: (userId) => get(`/user/${userId}`),
  updateUserData: (userId, data) => put(`/user/${userId}`, data),
  createUserData: (data) => post('/user', data),
  deleteUserData: (userId) => del(`/user/${userId}`)
};

export default api;

使用封装的请求模块

在需要进行数据请求的页面或组件中引入封装好的 api 模块,并调用其中的方法。

页面 A:

import api from '../../utils/api.js'; // 根据你的实际文件路径调整

Page({
  data: {
    userData: null,
  },
  onl oad: function () {
    this.fetchUserData();
  },
  fetchUserData: function () {
    const userId = 123; // 假设这是需要查询的用户ID
    api.getUserData(userId)
      .then(data => {
        this.setData({
          userData: data
        });
      })
      .catch(err => {
        console.error('请求失败', err);
      });
  }
});

错误处理与状态管理

为了增强请求模块的健壮性,可以进一步添加全局的错误处理和状态管理。例如,你可以在 request 函数中处理常见的 HTTP 错误状态码,或者在全局展示错误提示。

添加全局错误处理:

const handleErrors = (statusCode, data) => {
  switch (statusCode) {
    case 400:
      wx.showToast({ title: '请求错误', icon: 'none' });
      break;
    case 401:
      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: '未知错误', icon: 'none' });
      break;
  }
};

const request = (url, method, data, header = {}) => {
  return new Promise((resolve, reject) => {
    wx.request({
      url: `${baseUrl}${url}`,
      method: method,
      data: data,
      header: {
        'Content-Type': 'application/json',
        ...header
      },
      success: (res) => {
        if (res.statusCode === 200) {
          resolve(res.data);
        } else {
          handleErrors(res.statusCode, res.data);
          reject(res.data);
        }
      },
      fail: (err) => {
        wx.showToast({ title: '网络错误', icon: 'none' });
        reject(err);
      }
    });
  });
};

通过这种方式,微信小程序的数据请求逻辑被封装在一个独立的模块中,使代码结构更加清晰,复用性更高,同时也便于集中管理和维护请求逻辑。

标签:封装,请求,url,res,程序,header,api,const,data
From: https://www.cnblogs.com/jqCode/p/18230650

相关文章

  • Golang(Go语言)封装一个简单的控制台输出包
    //定义6个常量,每个常量代表一个布尔值为true的位置const( LEVEL_DEBUG=1<<iota LEVEL_INFO LEVEL_WARN LEVEL_ERROR LEVEL_FATAL PRINT_SRC_FILE)typeconsoleFuncfunc(formatstring,a...any)varprintSrcFileEmptyFunc=func(){}typeConsolestruct{......
  • JVM调优知识及实践:提升Java程序性能的艺术
    引言:在Java开发中,我们经常遇到程序运行缓慢、响应时间长、内存占用高等问题。这些问题往往与Java虚拟机(JVM)的性能配置和调优相关。JVM调优是Java程序员必须掌握的一项技能,它能够帮助我们优化程序性能,提高系统稳定性。本文将介绍JVM调优的基本知识,并结合实践案例,分享一些调......
  • 程序员最趁手的SVM算法,学完你会哭着感谢努力的自己!
    纯 干 货目录纯 干 货1线性支持向量机2非线性支持向量机3多类别支持向量机4核函数支持向量机5稀疏支持向量机6核贝叶斯支持向量机7不平衡类别支持向量机在这之前咱们已经接触了各个算法的优缺点的总结,以及8个回归类算法、7个正则化......
  • AI大模型探索之路-实战篇15: Agent智能数据分析平台之整合封装Tools和Memory功能代码
    系列篇章......
  • 基于SpringBoot的英语单词小程序的设计与实现(期末大作业)+附源码+数据库
    摘要随着经济的不断发展与进步,语言的全球化慢慢的变成现今世纪非常重要的一种发展趋势。本文针对大学生在校阶段开发了一个基于SpringBoot的英语等级助考系统,通过线上小程序学习的方式,减少学生学习时间、降低学生学习压力、增强学习效果。该系统采用微信开发工具和基于SpringB......
  • Springboot计算机毕业设计医院门诊小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着移动互联网技术的迅猛发展,人们对于医疗服务的便捷性和高效性提出了更高要求。传统医院门诊流程复杂、耗时较长,已无法满足现代患者快速就医的需求......
  • Springboot计算机毕业设计医院排班&预约小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在现代医疗服务体系中,医生与患者的对接效率直接影响着医院的运营效率和患者的就医体验。传统的排班与预约方式往往存在信息更新不及时、预约流程繁琐......
  • Linux进程替换 && 自主shell程序
        本篇将要讲解有关进程中最后一个知识点——进程替换,其中主要介绍有关进程替换的六个函数,直接从函数层面来理解进程替换(在使用函数的过程中,也会对进行替换进行解释)。本篇主要围绕如下的进程替换函数:    以上的exec*函数就是Linux中的加载函数,可以将......
  • 基于微信小程序的门票预定系统
    随着网络的出现,网页逐渐融入人们的生活。它打破了地域限制,真正使信息得以共享,改变了人们的工作和生活方式。信息的来源是多元化的,而互联网作为信息传播的快速渠道,我们应当充分利用其优势进行科研信息的互动,以期促进科研工作的顺利开展,大力满足知识创新的需求。因此,建立高校科研......
  • Python应用开发——Streamlit 创建多页面应用程序进行APP的构建
    创建多页面应用程序在附加功能中,我们介绍了多页面应用程序,包括如何定义页面、构建和运行多页面应用程序,以及如何在用户界面的页面间导航。更多详情,请参阅多页面应用程序指南Multipageapps-StreamlitDocs在本指南中,让我们通过将上一版本的streamlithello应用程序转换为......