返回顶部
首页 > 资讯 > 前端开发 > JavaScript >微信小程序中wx.request如何实现封装
  • 648
分享到

微信小程序中wx.request如何实现封装

2024-04-02 19:04:59 648人浏览 八月长安
摘要

这篇文章将为大家详细讲解有关微信小程序中wx.request如何实现封装,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。看项目代码时发现了下面几点问题:网络请求都写在Pag

这篇文章将为大家详细讲解有关微信小程序中wx.request如何实现封装,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

项目代码时发现了下面几点问题:

  • 网络请求都写在Page里,每个请求都要重复的写wx.request以及一些基础配置;

  • 每个页面里都要处理相同类型的异常;

  • 后端返的Http status code为200以外时,并不能直接进入fail对应函数进行处理;

针对这些问题,首先在项目目录里新建了一个apis的目录,把所有与API请求的东西都放在这个目录里,如下图这样。

微信小程序中wx.request如何实现封装

1. 新建一个request类,对wx.request进行简单封装 在request类里做了以下几件事:

  • 在构造函数里创建默认请求的http header,可以在header里配制一些内容,在对应请求方法中如果没有设置header参数,就使用此默认header参数;

  • 以get post delete put等方法对request进行封装,在发起网络请求不需要重复的写wx.request({method:xxx})这些代码,只要调用getRequest、postRequest等方法就可以了;

  • 在rquest的结果返回处理函数success中,判定服务端返回的状态代码,对于200状态代码的按业务处理成功处理,对于非200的状态码按异常处理。

  • 预留统一异常处理函数处理接口,可以通过setErrorHandler来设置统一的异常处理,这样对于一些可以统一处理的异常就不用在业务页面里去重复处理了,例如后端返回401的代码,就可以统一转到登录页面让用户登录了;

  • 此request不限定服务提供都,可以是自己开发的业务服务端,也可以用于第三方服务的调用;


class request {
 constructor() {
  this._header = {}
 }


 setErrorHandler(handler) {
  this._errorHandler = handler;
 }

 
 getRequest(url, data, header = this._header) {
  return this.requestAll(url, data, header, 'GET')
 }

 
 deleteRequest(url, data, header = this._header) {
  return this.requestAll(url, data, header, 'DELETE')
 }

 
 putRequest(url, data, header = this._header) {
  return this.requestAll(url, data, header, 'PUT')
 }

 
 postRequest(url, data, header = this._header) {
  return this.requestAll(url, data, header, 'POST')
 }

 
 requestAll(url, data, header, method) {
  return new Promise((resolve, reject) => {
   wx.request({
    url: url,
    data: data,
    header: header,
    method: method,
    success: (res => {
     if (res.statusCode === 200) {
      //200: 服务端业务处理正常结束
      resolve(res)
     } else {
      //其它错误,提示用户错误信息
      if (this._errorHandler != null) {
      //如果有统一的异常处理,就先调用统一异常处理函数对异常进行处理
       this._errorHandler(res)
      }
      reject(res)
     }
    }),
    fail: (res => {
     if (this._errorHandler != null) {
      this._errorHandler(res)
     }
     reject(res)
    })
   })
  })
 }
}

export default request

2. 新建一个agriknow类 在agriknow里面做了以下几件事:

  • 实现所有业务服务调用,如查询所有新闻列表【getNews】,查询所有课程列表【getCourseList】;

  • 实现统一的异常处理,并传给request;

  • 将服务端返回的结果response转成response.data回传给API调用的地方;


import request from './request.js'
class agriknow {
 constructor() {
  this._baseUrl = 'https://apis.xxx.xxx.com/dev/apis/train/v1/'
  this._defaultHeader = { 'data-tupe': 'application/JSON' }
  this._request = new request
  this._request.setErrorHandler(this.errorHander)
 }

 
 errorHander(res) {
  console.error(res)
 }

 
 getNews(page = 1, size = 10) {
  let data = { page: page, size: size }
  return this._request.getRequest(this._baseUrl + 'news/client', data).then(res => res.data)
 }

 
 getCourseList(page = 1, size = 10, key = null) {
  let data = key != null ? { page: page, size: size, queryValue: key } : { page: page, size: size }
  return this._request.getRequest(this._baseUrl + '/course/mobile', data).then(res => res.data)
 }
}
export default agriknow

3. 函数的调用

在app中引用argriknow

import agriknow from './apis/agriknow.js'
App({
 onLaunch: function () {
  // 展示本地存储能力
  var logs = wx.getStorageSync('logs') || []
  logs.unshift(Date.now())
  wx.setStorageSync('logs', logs)
……
……

定义一个类型为agriknow的属性并实例化

import agriknow from './apis/agriknow.js'
App({
 onLaunch: function () {
  // 展示本地存储能力
  var logs = wx.getStorageSync('logs') || []
  logs.unshift(Date.now())
  wx.setStorageSync('logs', logs)
……
……
 },
 agriknow:new agriknow()
})

在Page里调用

const app = getApp();
Page({
 data: {
  courseData: [],
  page: 1,
  size: 10,
  total: 0
 },
 onLoad: function () {
 ……
 ……
  wx.startPullDownRefresh()
  this.getdataList();
 },
 //查询课程列表
 getdataList() {
  app.agriknow.getCourseList(this.data.page++, this.data.size, '')
   .then(res => {
    wx.stopPullDownRefresh()
    let list = this.data.page > 2 ? this.data.courseData.concat(res.list) : res.list
    this.setData({
     courseData: list
    })
   })
   .catch(res => {
    wx.stopPullDownRefresh()
    wx.showToast({
     title: '出错了!',
     icon: 'none'
    })
   })
 },
 //下拉刷新
 onPullDownRefresh() {
  console.log("下拉刷新");
  this.getdataList();
 },
 ……
 ……
})

关于“微信小程序中wx.request如何实现封装”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: 微信小程序中wx.request如何实现封装

本文链接: https://lsjlt.com/news/70270.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 微信小程序中wx.request如何实现封装
    这篇文章将为大家详细讲解有关微信小程序中wx.request如何实现封装,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。看项目代码时发现了下面几点问题:网络请求都写在Pag...
    99+
    2024-04-02
  • 微信小程序怎么使用Promise对wx.request()封装
    本文小编为大家详细介绍“微信小程序怎么使用Promise对wx.request()封装”,内容详细,步骤清晰,细节处理妥当,希望这篇“微信小程序怎么使用Promise对wx.request()封装”文章能帮助大家解决疑惑,下面跟着小编的思路...
    99+
    2023-07-05
  • 微信小程序中如何实现http请求封装
    这篇文章将为大家详细讲解有关微信小程序中如何实现http请求封装,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序  http请求封装示例代码wx.req...
    99+
    2024-04-02
  • 微信小程序如何使用Promise对wx.request()封装详解(附完整代码)
    目录1. 原生wx.request()的缺点2. 封装思路3. 具体实现代码总结1. 原生wx.request()的缺点 wx.request官网说明 回调地狱,可能会出现多层suc...
    99+
    2023-03-13
    微信小程序封装wx.request() 微信小程序封装请求 微信小程序 wx.request()封装
  • 微信小程序如何实现简易封装弹窗
    今天就跟大家聊聊有关微信小程序如何实现简易封装弹窗,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。建立组件文件夹编写组件内容 <!--index.wxml-->&...
    99+
    2023-06-26
  • 微信小程序如何设置全局请求URL及封装wx.request请求操作
    这篇文章将为大家详细讲解有关微信小程序如何设置全局请求URL及封装wx.request请求操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:app.js:App...
    99+
    2024-04-02
  • 微信小程序如何封装get和post
    这篇“微信小程序如何封装get和post”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序如何封装get和post”文...
    99+
    2023-06-26
  • 微信小程序实现简易封装弹窗
    本文实例为大家分享了微信小程序实现简易封装弹窗的具体代码,供大家参考,具体内容如下 1.建立组件文件夹 2.编写组件内容  <!--index.wxml--> <...
    99+
    2024-04-02
  • 【uniapp&微信小程序】封装uni.request()
    前言         在项目开发过程中,往往需要对请求进行二次封装,这篇文章将对uni.request()进行二次封装,并实现多个环境的请求配置,对请求方式,数据格式等进行封装,将请求做到最简化。 一.封装uni.request() ...
    99+
    2023-09-01
    微信小程序 uni-app 小程序 前端框架
  • 如何封装微信小程序http拦截器
    这篇文章主要为大家展示了“如何封装微信小程序http拦截器”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何封装微信小程序http拦截器”这篇文章吧。前言微信小...
    99+
    2024-04-02
  • 微信小程序实现底部弹出框封装
    本文实例为大家分享了微信小程序底部弹出框封装的具体代码,供大家参考,具体内容如下 <!--index.wxml--> <view>   <butto...
    99+
    2024-04-02
  • 微信小程序中如何实现微信支付
    微信支付是微信公众平台提供的一种在线支付服务,可以为用户提供快速、方便、安全的支付体验。而在微信小程序中实现微信支付,则可以为应用程序提供更多的功能和服务,提高用户体验和商业价值。因此,在本文中,我们将介绍如何在微信小程序中实现微信支付。 ...
    99+
    2023-08-16
    微信小程序 微信 小程序 前端 javascript
  • 微信小程序中request接口怎么封装
    这篇文章主要介绍了微信小程序中request接口怎么封装,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。微信小程序 request接口的封装实...
    99+
    2024-04-02
  • 微信小程序中怎么封装request接口
    这篇“微信小程序中怎么封装request接口”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“微信小程序中怎么封装request...
    99+
    2023-06-30
  • 微信小程序中如何封装多张图片上传api
    这篇文章给大家分享的是有关微信小程序中如何封装多张图片上传api的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下export default class...
    99+
    2024-04-02
  • 微信小程序开发中如何封装HTTP请求方法
    这篇文章主要介绍微信小程序开发中如何封装HTTP请求方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!HTTP请求方法的封装在小程序中http请求是很频繁的,但每次都打出wx.req...
    99+
    2024-04-02
  • 微信小程序如何实现slider
    这篇文章给大家分享的是有关微信小程序如何实现slider的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现效果图:滑动选择器属性名类型默认值说明minNumber0最小值maxN...
    99+
    2024-04-02
  • 微信小程序如何实现tabBar
    这篇文章主要介绍了微信小程序如何实现tabBar,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:1、效果展示2、原理:在app.js...
    99+
    2024-04-02
  • 小程序如何封装wx.request请求并创建接口管理文件
    这篇文章主要为大家展示了“小程序如何封装wx.request请求并创建接口管理文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“小程序如何封装wx.reques...
    99+
    2024-04-02
  • 微信小程序中如何实现地图map
    这篇文章主要介绍微信小程序中如何实现地图map,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!微信小程序 地图map微信小程序map地图属性名类型默认值说明longitudeNumbe...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作