news 2026/10/14 13:20:24

微信小程序:封装网络请求

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
微信小程序:封装网络请求

一、前置知识

1. 什么是网络请求?

网络请求是指客户端与服务器进行数据交互的过程。客户端向服务器发送请求,服务器接收请求并进行处理,最后将处理结果返回给客户端。

在微信小程序中,我们通常通过网络请求获取服务器数据,或者向服务器提交数据。

2. 微信小程序对网络请求的限制

为了保障网络通信的安全性,微信小程序对网络请求有一定的限制,主要包括以下几点:

1.协议限制:正式环境下,网络请求通常需要使用 HTTPS 协议(本地开发调试时存在特定例外)。
2.域名配置:服务器接口使用的域名需要提前配置到微信公众平台小程序后台的相应服务器域名列表中。
3.域名校验:请求时需要满足微信小程序的域名校验规则,否则可能导致请求失败。

因此,在开发微信小程序之前,需要先确认服务器接口地址及相关域名配置是否正确。

3. 微信小程序原生网络请求 API

微信小程序提供了 `wx.request()` 方法,用于向服务器发送 HTTP 请求。

常用参数如下:

参数说明
url服务器接口地址
data请求参数,可以是对象或字符串等支持的数据类型
header设置请求头信息
methodHTTP 请求方式,默认为GET
dataType返回数据的预期格式,默认为json
responseType响应数据的类型,默认为text
success请求成功完成后的回调函数
fail请求失败时的回调函数
complete请求结束时执行的回调函数,无论成功还是失败都会执行

下面以 GET 请求为例,演示如何使用wx.request()获取服务器数据:

wx.request({ url: 'https://example.com/api/user', method: 'GET', data: { name: 'zs' }, success: (res) => { console.log(res); }, fail: (err) => { console.error(err); } });

其中,url需要替换为实际的接口地址,data用于传递请求参数,success和fail分别用于处理请求成功和失败的情况。

需要注意的是,请求成功不代表业务处理一定成功。例如,服务器可能正常返回 HTTP 200 状态码,但业务数据中仍然包含错误信息,因此还需要根据接口约定判断业务处理结果。

更多关于wx.request()的使用说明,可以参考微信官方文档:RequestTask | 微信开发文档

二、封装网络请求

1. 为什么需要对网络请求进行二次封装?

在实际开发中,如果每次请求接口都直接调用wx.request(),就需要重复编写请求地址、请求参数、请求头以及成功和失败的处理逻辑。当项目中的接口数量不断增加时,代码会变得冗余,也不利于后期维护。

因此,我们可以对wx.request()进行二次封装,将公共请求逻辑统一管理。

主要有以下几个优点:

1. 减少重复代码:统一处理请求配置,避免在每个接口中重复编写相同的逻辑。
2. 简化异步处理:通过 Promise 对请求结果进行封装,可以使用async/await或.then()处理异步操作,使代码更加清晰。
3. 统一错误处理:集中处理网络异常、HTTP 状态码异常以及业务错误,降低重复处理的成本。
4. 便于后期维护:可以统一配置基础请求地址、请求头和超时时间,方便后续扩展。

2. 封装思路

我们可以将原生的wx.request()包装成一个返回 Promise 的公共方法,并将其放在独立的工具文件中。

后续调用接口时,只需要传入接口地址、请求方式和请求参数,即可发起请求,无须重复编写底层请求逻辑。

接下来,我们就通过代码实现一个简单的网络请求封装:

// 服务器基础地址 const BASE_URL = 'https://example.com' // 默认请求超时时间 const TIMEOUT = 10000 // 默认请求头 const DEFAULT_HEADER = { 'content-type': 'application/json' } module.exports = function (options = {}) { const { url, method = 'GET', data = {}, header = {}, timeout = TIMEOUT } = options // 合并请求地址 const requestUrl = BASE_URL + url // 合并请求头 const requestHeader = { ...DEFAULT_HEADER, ...header } return new Promise((resolve, reject) => { wx.request({ url: requestUrl, method: method, data, header: requestHeader, timeout, success(res) { // HTTP 状态码校验 if (res.statusCode === 200) { // 请求成功,返回服务器相应数据 resolve(res.data) } else { // 请求失败,返回错误状态码 reject(new Error('请求失败,状态码:' + res.statusCode)) } }, // 网络异常、域名配置错误、请求超时等 fail(err) { reject(new Error('网络请求失败:' + err.errMsg)) } }) }) }


接下来就是在具体的页面中调用该函数:

// 假设是一个获取用户信息的接口 const request = require('../utils/request.js') Page({ data: { userInfo: null }, // 页面加载时获取用户信息 onLoad() { this.getUserInfo() }, // 获取用户信息 getUserInfo() { const res = request({ url: '/api/user', method: 'GET', data: { id: 1 } }) .then(res => { console.log('请求成功', res) }) .catch(err => { console.log('请求失败', err) }) } })

如果这篇文章对你有帮助,欢迎点赞、收藏;如果你在封装过程中遇到其他问题,也欢迎在评论区一起交流。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/14 13:20:14

Java HIS源码本地部署教程:数据库脚本导入与Tomcat环境配置避坑指南

简介:一款基于Java的医院信息管理系统源码包,面向Java初学者、医疗行业软件开发者以及需要完成课程设计或毕业设计的高校学生,既适合入门模仿,也适合进阶研究者剖析业务逻辑。源码采用MVC架构,覆盖用户注册登录与权限控…

作者头像 李华
网站建设 2026/10/14 13:19:56

数据结构实验源码深度解析:从跑通到改造的实战指南

简介:这份资源是南京邮电大学数据结构课程四次实验的完整源码合集,面向正在学习数据结构的高校学生与自学者,帮助读者通过可运行代码理解线性表、栈与队列、树形结构以及图算法等核心内容。压缩包共64个文件,以h头文件与cpp源文件…

作者头像 李华
网站建设 2026/10/14 13:18:48

Qwen-Image-2.1云端部署全流程:从GPU选型到API调用

想把 Qwen-Image-2.1 放到云端跑起来,很多人的第一反应是买一台“感觉够用”的GPU服务器,然后照着网上的片段教程一顿装,最后卡在环境冲突、模型下载失败、启动报错上耗掉一整天。这篇文章就是来解决这些破事的——我会把阿里这套开源图像生成…

作者头像 李华
网站建设 2026/10/14 13:18:27

Android PopupMenu ID引用问题排查与解决方案

1. 问题现象与背景解析 在Android开发中,PopupMenu作为常用的上下文菜单控件,经常遇到MenuItem.itemId提示R.id.xxx找不到的编译错误。这个问题看似简单,实则涉及多个技术环节的联动。典型的报错表现为: error: cannot find sym…

作者头像 李华
网站建设 2026/10/14 13:17:57

基于bbox与XY-cut的PDF多栏解析与水印剔除实战

1. 为什么单栏解析在真实 PDF 面前会翻车做过 RAG 文档解析的朋友大概率都经历过这个场景:拿一份排版规整的单栏 PDF 测试,解析效果堪称完美,段落顺序正确、表格结构清晰,心里美滋滋觉得大功告成。结果换一份真实的学术论文或者企…

作者头像 李华
网站建设 2026/10/14 13:17:49

MFC程序用libcurl实现multipart/form-data文件上传完整指南

MFC项目里要往服务器传文件,第一反应就是发http post请求。可真正动手你会发现,实际要处理的东西比想象中多:请求体怎么拼,multipart表单格式对不对,服务器能不能识别,C回调函数为什么编译不过,…

作者头像 李华