微信小程序 封装http请求实例详解

yizhihongxing

微信小程序 封装http请求实例详解

简介

在微信小程序开发中,经常需要通过 HTTP 请求后端 API 来获取数据。为减少代码冗余并使功能模块化,我们可以将 HTTP 请求封装在可复用的模块中。减少重复代码的同时,也方便代码的维护和升级。

axios 库

针对HTTP请求处理,可以使用 axios 库,这是一个基于 Promise 的 HTTP 库,可运行在浏览器和 Node.js 适用于来自 API 的请求。
微信小程序中不能直接使用 axios 库,可以使用 mpvue-axios 库。

以下是 mpvue-axios 封装示例代码。

import axios from 'axios'
import qs from 'qs'
const isProduction = process.env.NODE_ENV === 'production'
const BASE_URL = isProduction ? 'https://api.acme.com' : 'http://localhost:8000'

export default class Http {
  constructor() {
    this.axios = axios
    this.axios.defaults.baseURL = BASE_URL
    this.axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'
  }

    http(config = {}) {
    config.method = config.method || 'GET'
    switch(config.method.toUpperCase()) {
      case 'GET':
        return this.get(config.url, config.data)
      case 'POST':
        return this.post(config.url, config.data)
      case 'PUT':
        return this.put(config.url, config.data)
      case 'DELETE':
        return this.delete(config.url, config.data)
      default:
        return Promise.reject(new Error(`Invalid http method: ${config.method.toUpperCase()}`))
    }
  }

  get(url, params) {
    return this.axios.get(url, {params})
  }

  post(url, data) {
    return this.axios.post(url, qs.stringify(data))
  }

  put(url, data) {
    return this.axios.put(url, qs.stringify(data))
  }

  delete(url, data) {
    return this.axios.delete(url, {data: qs.stringify(data)})
  }
}

在构造器中赋值 axios.defaults.baseURL 为后台 API 请求的 URL。通过配置指定 Content-Type: application/x-www-form-urlencoded 来解决后端处理 POST 请求参数时出现的 415 Unsupported Media Type 错误.

使用方法如下:

const http = new Http()
http.http({
  url: '/user/123',
  method: 'GET',
  data: {
    name: 'Jack',
    age: '18',
  }
}).then(res => {
  console.log(res.data)
}).catch(error => {
  console.error(error)
})

小程序 API

小程序自带了一个基于 Promise 的网络请求 API — wx.request,可以使用它来进行网络请求。

以下是封装wx.request示例代码。

const BASE_URL = 'http://localhost:8000'

export default class Http {
  constructor() {
    this.BASE_URL = BASE_URL
  }

  http(config = {}) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: this.BASE_URL + config.url,
        method: config.method || 'GET',
        data: config.data || {},
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        success: function (res) {
          resolve(res)
        },
        fail: function (error) {
          reject(error)
        }
      })
    })
  }
}

也可以通过类的静态方法 this.request 这种方式来进行请求。

const BASE_URL = 'http://localhost:8000'

export default class Http {
  constructor() {
    this.BASE_URL = BASE_URL
  }

  static request(config = {}) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: BASE_URL + config.url,
        method: config.method || 'GET',
        data: config.data || {},
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        success: function (res) {
          resolve(res)
        },
        fail: function (error) {
          reject(error)
        }
      })
    })
  }
}

使用方法与 axios 类似:

const http = new Http()
http.http({
  url: '/user/123',
  method: 'GET',
  data: {
    name: 'Jack',
    age: '18',
  }
}).then(res => {
  console.log(res.data)
}).catch(error => {
  console.error(error)
})

结论

对于微信小程序的 HTTP 请求,我们可以通过封装 Axios / wx.request 来实现模块化、重用的思想。无论选择哪种方式实现,都需要注意在传递参数的过程中注意控制参数的格式,防止出现 415/400 等异常。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:微信小程序 封装http请求实例详解 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • 总结Hadoop集群技术近年来对大数据处理的推动

    总结Hadoop集群技术近年来对大数据处理的推动 什么是大数据? 在介绍Hadoop集群技术对大数据处理的推动之前,我们首先需要了解大数据是什么。根据Gartner的定义,大数据指的是具有如下特征的数据:容量巨大、类型多样、速度高、价值密度低。大数据的产生是因为互联网的普及,以及智能设备、物联网等新兴技术的应用,使得数据的规模和数量急剧增长。 Hadoop集…

    云计算 2023年5月17日
    00
  • Vue.js使用$.ajax和vue-resource实现OAuth的注册、登录、注销和API调用

    下面是使用Vue.js实现OAuth的注册、登录、注销和API调用的完整攻略: 准备工作 在开始实现之前,你需要确保以下几点: 你已经了解了Vue.js的基本原理和使用方法; 你已经了解了OAuth的基本概念,比如授权、令牌等; 你已经有一个OAuth的服务端,并且可以使用API来进行OAuth的注册、登录和注销等操作; 安装依赖 为了实现OAuth的相关功…

    云计算 2023年5月17日
    00
  • asp.net实现数据从DataTable导入到Excel文件并创建表的方法

    以下是实现“asp.net实现数据从DataTable导入到Excel文件并创建表的方法”的完整攻略: 步骤 引入命名空间 在代码文件中,我们需要引入以下命名空间: csharp using System.Data; using System.IO; using System.Web; using System.Web.UI; using System.We…

    云计算 2023年5月16日
    00
  • ASP.NET MVC Bundles 用法和说明(打包javascript和css)

    ASP.NET MVC 提供了一种有效的方式来管理和优化前端静态资源,即通过 Bundles 来打包和压缩 JavaScript 和 CSS 文件。下面详细讲解 Bundles 的用法和说明。 一、Bundles 的用法 定义 Bundle 需要先在 ASP.NET 应用程序的 App_Start 文件夹下的 BundleConfig.cs 文件中定义 Bu…

    云计算 2023年5月17日
    00
  • C# 利用Autofac批量接口注入依赖的问题小结

    我来详细讲解一下“C#利用Autofac批量接口注入依赖的问题小结”的完整攻略。 什么是Autofac? Autofac是一个开源的依赖注入(DI)框架,它能够管理对象的创建和生命周期。Autofac通过允许程序开发人员构建应用程序和组件的可扩展体系结构来增强.NET应用程序的模块化。 Autofac的批量注入 对于需要注入的接口特别多的情况,可以使用Aut…

    云计算 2023年5月17日
    00
  • 云计算管理平台之OpenStack简介及基础环境搭建

    简单说openstack是云计算管理平台,主要对云环境中的虚拟机做增删查改;它能够将多台物理设备的资源(cpu/内存等)整合成一个大的资源池,然后根据openstack提供的api接口向用户提供使用;用户可以根据openstack提供的资源池接口来启动虚拟机,管理虚拟机;openstack 主要组成由控制节点和计算节点组成;其中控制节点由多个组件组成,每个组…

    云计算 2023年4月15日
    00
  • yunos和android有什么不同 android和yunos对比区别评测

    愉快为你解答。下面是有关“yunos和android有什么不同 android和yunos对比区别评测”的完整攻略: YunOS和Android的不同之处 什么是YunOS和Android YunOS和Android都是针对移动设备的操作系统,其中Android由谷歌开发,YunOS则是阿里集团旗下的产物。 定位不同 Android是基于全球互联网所构建的生…

    云计算 2023年5月17日
    00
  • 【AWS】AWS云计算赋能数字化转型专题研讨会圆满落幕

     大会精彩回顾: 查看原文 大会使用的PPT下载地址:点击下载  

    云计算 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部