广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >微信小程序HTTP请求从0到1封装的示例分析
  • 852
分享到

微信小程序HTTP请求从0到1封装的示例分析

2024-04-02 19:04:59 852人浏览 独家记忆
摘要

这篇文章给大家分享的是有关微信小程序Http请求从0到1封装的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。HTTP库1、jQuery的$.ajax调用了XMLHttpR

这篇文章给大家分享的是有关微信小程序Http请求从0到1封装的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

HTTP库

1、jQuery的$.ajax

调用了XMLHttpRequest对象,封装在相关函数在配置项中,一旦传入了必需选项,则直接调用相应的send()方法进行数据的请求

2、Axios

基于Promise的请求库,通过判断XMLHTTPRequest对象存在与否,来支持客户端和node服务端发送请求,封装的很不错的HTTP库,支持promise、拦截请求和响应等

小程序网络请求

wx.request({
 url: 'test.PHP', //仅为示例,并非真实的接口地址
 data: {
 x: '',
 y: ''
 },
 header: {
 'content-type': 'application/JSON' // 默认值
 },
 success (res) {
 console.log(res.data)
 }
})

小程序本身的请求已经封装的很不错了,使用起来和$.ajax相似,支持许多配置项的设置,但是缺少公共配置、响应和请求拦截等实用功能

第一步--创建请求实例

class AxiOS {
 constructor() {
  this.instance = null // 类的实例
  this.config = defaultConfig
 }

 create(instanceConfig) {
  const { config } = this
  // 创建实例的时候添加基本配置
  this.config = {
   ...config,
   ...instanceConfig
  }
  return this
 }

 // 单例
 static getInstance() {
  if (!this.instance) {
    this.instance = new Axios()
  }
  return this.instance
 }
}

创建实例

const axios = Axios.getInstance()

promise包装小程序请求

const dispatchRequest = function(config) {
 return new Promise((resolve, reject) => {
  wx.request({
   ...config,
   url: config.base + config.url,
   success: res => {
    resolve(res)
   },
   fail: res => {
    reject(res)
   }
  })
 })
}

给请求实例添加request方法

request(options) {
 const { config } = this
 // 实例请求的时候添加基本配置
 const requsetOptions = {
  ...config,
  ...options
 }
 return dispatchRequest(requsetOptions)
}

第二步--创建请求工具方法

创建实例,通过create设置基本配置项

const instance = (config = {}) => {
 return axios.create({
  base: globalapi,
  ...config
 })
}

创建请求工具方法,执行实例request

export function request(options) {
 const { baseConfig, url, method, data, isLogin } = options
 instance(baseConfig)
  .request({
   url,
   method: method || 'GET',
   data
  })
  .then(res => {
   options.success && options.success(res)
  })
  .catch(err => {
   if (options.error) {
    options.error(err)
   } else {
    errAlert()
   }
  })
 }
}

这样,一个请求的工具方法就完成了,但是这个方法现在只支持基本的请求和基本配置项的配置,还是缺少我们很常用的公共请求和响应的拦截。

第三部--添加请求和响应的拦截器

创建拦截器实例

class InterceptORManager {
 constructor() {
  this.fulfilled = null
  this.rejected = null
 }

 use(fulfilled, rejected) {
  this.fulfilled = fulfilled
  this.rejected = rejected
 }
}

在请求实例的构造方法中添加请求和响应拦截实例

constructor() {
 this.instance = null // 类的实例
 this.config = defaultConfig
 this.interceptors = {
  request: new InterceptorManager(),
  response: new InterceptorManager()
 }
}

在实例的request添加promise执行队列

request(options) {
  const { config, interceptors } = this
  // 实例请求的时候添加基本配置
  const requsetOptions = {
   ...config,
   ...options
  }

  const promiseArr = [] // promise存储队列

  // 请求拦截器
  promiseArr.push({
   fulfilled: interceptors.request.fulfilled,
   rejected: interceptors.request.rejected
  })

  // 请求
  promiseArr.push({
   fulfilled: dispatchRequest,
   rejected: null
  })

  // 回调拦截器
  promiseArr.push({
   fulfilled: interceptors.response.fulfilled,
   rejected: interceptors.response.rejected
  })

  let p = Promise.resolve(requsetOptions)
  promiseArr.forEach(ele => {
   p = p.then(ele['fulfilled'], ele['rejected'])
  })

  return p
 }

在请求工具方法中通过设置请求和响应的拦截方法

axios.interceptors.request.use(
 request => {
  return request
 },
 err => {
  console.error(err)
 }
)
axios.interceptors.response.use(
 response => {
  return response
 },
 err => {
  console.error(err)
 }
)

在请求拦截方法里面可以添加数据转换,在请求头部添加sign、token等,在响应拦截方法里面去做公共的数据处理等

感谢各位的阅读!关于“微信小程序HTTP请求从0到1封装的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 微信小程序HTTP请求从0到1封装的示例分析

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

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

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 微信小程序HTTP请求从0到1封装的示例分析
    这篇文章给大家分享的是有关微信小程序HTTP请求从0到1封装的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。HTTP库1、jQuery的$.ajax调用了XMLHttpR...
    99+
    2022-10-19
  • 微信小程序网络请求封装的示例分析
    这篇文章给大家分享的是有关微信小程序网络请求封装的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在这里首先声明一个小程序文档的bug,导致大伙们在请求的时候,服务器收到不...
    99+
    2022-10-19
  • 微信小程序class封装http的示例分析
    这篇文章将为大家详细讲解有关微信小程序class封装http的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。代码如下config.jsvar confi...
    99+
    2022-10-19
  • 微信小程序工具函数封装的示例分析
    这篇文章主要介绍微信小程序工具函数封装的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下const formatTime = date...
    99+
    2022-10-19
  • 微信小程序中前端promise封装的示例分析
    这篇文章主要为大家展示了“微信小程序中前端promise封装的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“微信小程序中前端promise封装的示例分析...
    99+
    2022-10-19
  • 微信小程序封装分享与分销功能的示例分析
    这篇文章将为大家详细讲解有关微信小程序封装分享与分销功能的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。前言在微信小程序中,可以很简单的分享一个页面,比微信H5简...
    99+
    2022-10-19
  • 微信小程序实现request请求后台接口php的示例分析
    这篇文章将为大家详细讲解有关微信小程序实现request请求后台接口php的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。微信小程序request请求后台接口ph...
    99+
    2022-10-19
  • mpvue微信小程序中接口请求fly全局拦截的示例分析
    这篇文章主要介绍mpvue微信小程序中接口请求fly全局拦截的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!业务要求:  需要进入页面时就要游客登陆拿到token;  之后的...
    99+
    2022-10-19
  • 微信小程序页面滚动到指定位置的示例分析
    这篇文章主要介绍微信小程序页面滚动到指定位置的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!页面上有一个元素或者组件,id 为 comment则:var me&nb...
    99+
    2022-10-19
  • 基于mpvue微信小程序下载远程图片到本地的示例分析
    小编给大家分享一下基于mpvue微信小程序下载远程图片到本地的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!效果流程梳理获取图片远程地址数组-->遍历拿到图片缓存(临时地址)...
    99+
    2022-10-19
  • 微信小程序之html5 canvas绘图并保存到系统相册的示例分析
    小编给大家分享一下微信小程序之html5 canvas绘图并保存到系统相册的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!开始实现之前先上个效果图&nbs...
    99+
    2023-06-09
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作