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

微信小程序 封装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日

相关文章

  • Python制作数据预测集成工具(值得收藏)

    Python制作数据预测集成工具 本文将详细讲解如何使用Python制作数据预测集成工具。这个工具将能够根据多个模型的结果进行集成预测,并得到更准确的预测结果。该工具不仅方便了数据科学家对数据进行快速建模,而且还可以为业务决策提供更好的支持。以下是详细的操作步骤。 准备工作 在开始前,需要安装以下的Python库: Pandas Matplotlib Num…

    云计算 2023年5月18日
    00
  • C#实现提取Word中插入的多媒体文件(视频,音频)

    下面是关于“C#实现提取Word中插入的多媒体文件(视频,音频)”的完整攻略,包含两个示例说明。 简介 在C#应用程序中,我们经常需要从Word文档中提取多媒体文件(视频、音频)。在本攻略中,我们将介绍如何使用C#实现提取Word中插入的多媒体文件,并提供两个示例说明。 步骤 在C#应用程序中实现提取Word中插入的多媒体文件时,我们可以通过以下步骤来实现:…

    云计算 2023年5月16日
    00
  • 云计算(一)——Linux CentOS 7虚拟机安装

    一、内容 1.安装CentOS7 虚拟机 2.修改网络配置(让物理机与虚拟机互联) 3.修改主机名 4.修改hosts文件 二、步骤 首先到https://my.vmware.com/官网上下载VMware Workstation虚拟机——》 双击运行安装——》下一步 选择安装位置——》下一步 下一步   下一步 安装 完成 在https://www.cen…

    云计算 2023年4月13日
    00
  • android开发教程之获取使用当前api的应用程序名称

    Android开发教程之获取使用当前API的应用程序名称 在Android应用程序中,有时需要获取当前正在使用当前API的应用程序名称。本文将提供一个完整的攻略,包括如何获取当前API的应用程序名称。以下是详细步骤: 步骤1:添加权限 在获取当前API的应用程序名称之前,我们需要添加一个权限。以下是一个示例说明,演示如何添加权限: 在AndroidManif…

    云计算 2023年5月16日
    00
  • Python可以从事的工作/就业岗位总结

    Python是一门广泛应用于数据科学、机器学习、Web开发等领域的高级编程语言。因其简洁易懂、跨平台易用等优点,近年来越来越受到企业和公司的青睐。下面详细讲解Python可以从事的工作和就业岗位总结,以及如何进军这些领域。 Python相关的就业岗位 数据科学家 Python作为数据分析和数据科学的工具之一,让人们从各种数据中发现可以利用、且与业务相关的知识…

    云计算 2023年5月18日
    00
  • 阿里云MVP Meetup:《云数据·大计算:海量日志数据分析与应用》之《数据分析展现:可视化报表及嵌入应用》篇…

    实验背景介绍 本手册为阿里云MVP Meetup Workshop《云计算·大数据:海量日志数据分析与应用》的《数据分析展现:可视化报表及嵌入应用》篇而准备。主要阐述如何使用Quick BI制作报表,将前面几个实验处理分析得来的数据进行有效的展现和洞察。 《数据加工:用户画像》实验中的结果表数据已经事先导入RDS中,表名为rpt_user_info_all_…

    云计算 2023年4月13日
    00
  • “云计算技能第一次在线练兵”精彩纷呈!欢迎继续关注后续直播!

    2月19日下午2点,“云计算技能第一次在线练兵”直播和大家如约见面,热烈的互动,激烈的排名······云创大数据的讲师团队带领大家共同领略了云计算练兵的魅力。 在直播间,我们首先了解到本次练兵的规则、奖励机制以及练兵平台等,对整个练兵有了更为全面的认识。同时,在直播过程中,选手的在线操作得以实况呈现,包括得分趋势、得分事件等,并得到一一解说,分析得分点与失分…

    云计算 2023年4月12日
    00
  • 阿里钱盾安卓3.0新增抢红包功能 包含红包快手和红包早知道

    阿里钱盾安卓3.0新增抢红包功能 近日,阿里钱盾安卓3.0版本发布,新增了一个让用户非常兴奋的功能——抢红包。这项功能包含红包快手和红包早知道两种模式,用户可以根据个人喜好选择不同的模式进行使用,最大程度地提高领取红包成功率。 红包快手模式 红包快手模式是一种智能提醒模式,通过监听红包消息的方式,弹出提醒框,帮助用户快速领取红包。用户可以自定义提醒框的样式、…

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