微信小程序怎么封装网络请求和拦截器
更新时间:2023-07-24前言:
微信小程序是一种基于微信平台的轻量级应用程序,开发者可以通过微信开发者工具快速开发和体验小程序。在微信小程序的开发过程中,常常需要与后端服务器进行通信,获取数据或发送请求。为了简化代码的编写和维护,常常需要封装网络请求并实现请求的拦截器。本文将介绍如何在微信小程序中封装网络请求和实现拦截器的方法。一、封装网络请求:
在微信小程序中,可以使用wx.request()方法来进行网络请求。为了简化代码的编写,我们可以将这一方法进行封装,封装成一个统一的网络请求方法。在封装时,可以设置一些默认的请求参数,比如请求的数据格式、请求的超时时间等。同时,为了方便后续的请求拦截器的实现,可以将请求方法返回一个Promise对象。下面是一个简单的封装网络请求的示例代码:
function request(url, method, data) { return new Promise((resolve, reject) => { wx.request({ url: url, method: method, data: data, success: (res) => { resolve(res.data); }, fail: (error) => { reject(error); }, complete: (res) => { // 请求完成后的一些操作 } }); }); }
二、拦截器的实现:
在微信小程序中实现请求拦截器需要使用到中间件的概念,即在请求发送前和请求返回后进行一些处理。拦截器可以用来在请求发送前进行一些公共参数的添加、请求头的设置等操作,在请求返回后对返回的数据进行处理或进行错误的统一处理等。下面是一个简单的拦截器实现示例代码:
// 定义一个存放拦截器的数组 const interceptors = []; // 添加一个请求拦截器 interceptors.push({ request: (config) => { // 请求发送前的操作 return config; }, error: (error) => { // 请求发送错误的操作 return Promise.reject(error); } }); // 添加一个响应拦截器 interceptors.push({ response: (response) => { // 响应返回后的操作 return response; }, error: (error) => { // 响应返回错误的操作 return Promise.reject(error); } }); // 在请求方法中应用拦截器 function request(url, method, data) { // 请求发送前的拦截器操作 for (let i = 0; i < interceptors.length; i++) { if (interceptors[i].request) { interceptors[i].request(config); } } return new Promise((resolve, reject) => { wx.request({ url: url, method: method, data: data, success: (res) => { resolve(res.data); // 响应返回后的拦截器操作 for (let i = interceptors.length - 1; i >= 0; i--) { if (interceptors[i].response) { interceptors[i].response(res); } } }, fail: (error) => { reject(error); // 响应返回错误的拦截器操作 for (let i = interceptors.length - 1; i >= 0; i--) { if (interceptors[i].error) { interceptors[i].error(error); } } }, complete: (res) => { // 请求完成后的一些操作 } }); }); }