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

相关文章

  • 使用ASP.NET Web API构建Restful API

    使用ASP.NET Web API构建Restful API的完整攻略包括以下步骤: 步骤1:创建ASP.NET Web API项目 首先,我们需要在Visual Studio中创建一个新的ASP.NET Web API项目。在Visual Studio打开后,选择”File” -> “New” -> “Project”,在弹出的对话框中选择”A…

    云计算 2023年5月17日
    00
  • 2019年4月值得一读的9本技术书籍(机器学习、云计算、Android等书籍)! …

    导语:当你困惑时,书给你启迪当你迷惘时,书给你指路。当你落寞时,书给你勇气。当你悲伤时,书给你欢愉。当你狂躁时,书给你冷静。当你成功时,书给你导航。我们整理出2019年4月值得一读的9本技术书籍,其中涉及机器学习、人工智能、Android等方面。这个春天就让书陪你度过吧。 1、《从机器学习到深度学习:基于scikit-learn与TensorFlow的高效开…

    云计算 2023年4月13日
    00
  • Python 数据处理更容易的12个辅助函数总结

    我会详细讲解一下“Python 数据处理更容易的12个辅助函数总结”的完整攻略。 一、简介 文章“Python 数据处理更容易的12个辅助函数总结”介绍了一些在数据处理中常用的 Python 函数,它们可以帮助我们更高效地处理数据。这些函数包括: flatten():将嵌套的列表展平为一维列表。 chunks():将列表分割成指定长度的小块。 dict_lo…

    云计算 2023年5月18日
    00
  • 开启 HTTP/3 & QUIC 在 Docker Compose+Nginx

    HTTP/3 基于 UDP 的 QUIC 协议,多路复用安全传输HTTP/1.1 和 HTTP/2 都将 TCP 用作其传输协议 HTTP/3 和 QUIC 具有很多优势: 1.第一个请求的响应时间更短。在客户端和服务器之间以较少的往返次数协商连接,第一个请求会更快地到达服务器。2.改进了发生连接数据包丢失时的体验。 HTTP/2 通过一个 TCP 连接多路…

    云计算 2023年4月17日
    00
  • Asp.net core利用MediatR进程内发布/订阅详解

    Asp.net core利用MediatR进程内发布/订阅详解 在本攻略中,我们将详细讲解Asp.net core利用MediatR进程内发布/订阅的实现方法,包括MediatR的基本概念、使用方法和示例说明。 MediatR基本概念 MediatR是一个轻量级的中介者库,用于在应用程序中实现发布/订阅模式。它可以帮助我们更好地组织和管理应用程序中的业务逻辑…

    云计算 2023年5月16日
    00
  • 七牛云储存创始人分享七牛的创立故事与对Go语言的应用

    七牛云储存创始人分享七牛的创立故事与对Go语言的应用 七牛云储存是一家提供云存储、CDN加速、数据处理等服务的公司,其创始人许道军曾分享了七牛的创立故事以及对Go语言的应用。下面是一份关于七牛云储存创始人分享的完整攻略,包括背景介绍、创立故事、对Go语言的应用、示例说明等。 1. 背景介绍 七牛云储存是一家提供云存储、CDN加速、数据处理等服务的公司,其创始…

    云计算 2023年5月16日
    00
  • 云计算初体验(三)之租户登录、验证、授权

      在云计算平台,租户可以随时租用平台上所提供的服务,但这里面却存在一个隐藏的问题,登录验证怎么做?      我当时的第一反应是每个服务自己提供一套登录验证体系。但是随之而来的问题是,每次添加服务,租户下属成员,每次都需要重新申请登录名?同时用户为什么在使用其他服务时还需要再次登录?为什么需要这么麻烦呢?为什么不能做到新增、更改服务,对租户和其下属成员来说…

    云计算 2023年4月11日
    00
  • 【云计算】k8s相关资料

    参考资料: How to get started, and achieve tasks, using Kubernetes:http://kubernetes.io/docs/getting-started-guides/ubuntu/ How to get started, and achieve tasks, using Kubernetes:http:…

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