Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信小程序 wx.request 的封装

微信小程序 wx.request 的封装

作者头像
极乐君
发布于 2018-02-03 07:17:40
发布于 2018-02-03 07:17:40
2.3K00
代码可运行
举报
文章被收录于专栏:极乐技术社区极乐技术社区
运行总次数:0
代码可运行

自学转行到前端也已近两年,也算是简书和掘金的忠实粉丝,但是以前一直惜字如金(实在是胆子小,水平又低),现在我决定视金钱如粪土(就只是脸皮厚了,水平就那样),好了废话不多说,切入主题,最近自己尝试了一下小程序开发,坑么总是有的,但是我觉得还是request这部分实在是不好看,所以你懂得,我用Promise 对请求做了个简单封装。本文章所述方法主要针对第三方登录

废话不多说直接贴代码:

业务相关 js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 获取剩余金额 --- GET 请求无参数
  getBalance: function () {
    api.getBalance().then(data => {
      let balance = data.data
      balance.balance = balance.balance.toFixed(2)
      this.setData({
        balance: { ...balance }
      })
    })
  },

  // 获取昨日消费数据 --- POST 请求,使用 application/x-www-form-urlencoded 传参
  getLastCost: function () {
    let yestoday = util.transDate('', -1)
    let data = {
      subAccountIdx: 0,
      startDay: yestoday,
      endDay: yestoday,
      type: 0,
      business: 0,
      export: false
    }
    api.getLastCost(data, 'application/x-www-form-urlencoded', 'POST').then(data => {
      let lastCost = data.data.record.totalConsumeMoney
      lastCost = lastCost.toFixed(2)
      this.setData({
        lastCost: lastCost
      })
    })
  }

从上面的代码是业务部分代码,不知道你是否喜欢这种方式呢,接下来就看看 封装方式 和 业务对应的配置 js

使用 Promise 封装 wx.request

我们大部分网站都是用 cookie 来维护登录状态的,但是小程序是无法用 cookie 来维护登录状态的,那么我们先获取请求头的 cookie, 然后将 cookie 保存在全局变量当中(相信获取 cookie 肯定没问题吧, 这部分就不展示了)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// wx.request 封装
var app = getApp() 

function wxRequest(url, config, resolve, reject) {
  let { 
    data = {},
    contentType = 'application/json',
    method = 'GET',
    ...other
  } = {...config}
  wx.request({
    url: url,
    data: {...data},
    method: method,
    header: {
      'content-type': contentType,
      'Cookie': app.globalData.cookie  // 全局变量中获取 cookie
    },
    success: (data) => resolve(data),
    fail: (err) => reject(err)
  })
}

module.exports = {
  wxRequest: wxRequest
}

封装的代码很简单,接下来就是配置代码了

业务对应的配置 js

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 用 import 或者 require 引入模块 
import util from '../../../util/util.js'
var Promise = require('../../../plugin/promise.js')    // 请注意 Promise 要手动引入,内测版是自动引入的

// 获取个人信息
const API_USERINFO = "https://www.***/get"
// 获取剩余金额
const API_BALANCE = 'https://www.***/get'
// 获取昨日消费数据
const API_LASTCOST = 'https://www.***/get'


// 获取个人信息事件  
function getUserInfo(data, contentType) {

  var promise = new Promise((resolve, reject) => {
    util.wxRequest(API_USERINFO, { data, contentType }, resolve, reject)
  })

  // return promise
  return promise.then(res => {
    return res.data
  }).catch(err => {
    console.log(err) 
  })
}

// 获取剩余金额事件
function getBalance(data, contentType) {

  var promise = new Promise((resolve, reject) => {
    util.wxRequest(API_BALANCE, { data, contentType }, resolve, reject)
  })

  // return promise
  return promise.then(res => {
    return res.data
  }).catch(err => {
    console.log(err)
  })
}

// 获取昨日消费数据
function getLastCost(data, contentType, method) {

  var promise = new Promise((resolve, reject) => {
    util.wxRequest(API_LASTCOST, { data, contentType, method }, resolve, reject)
  })

  // return promise
  return promise.then(res => {
    return res.data
  }).catch(err => {
    console.log(err)
  })
}

module.exports = {
  getUserInfo: getUserInfo,
  getBalance: getBalance,
  getLastCost: getLastCost
}

上面的代码看起来像是步骤变多了,但是这样的好处是维护方便,在业务代码里只关注业务,而不用去关注请求的本身,content-type 切换也方便,当然如果你们的传参方式只有一种可以写死更简单一些,作为前端菜鸟的第一篇文章希望能帮助到几个人,最希望大佬们不吝赐教,指点指点。

本文作者: frontX 原文地址:微信小程序 wx.request 的封装 声明:本文来源于网络,版权归作者所有,不代表本专栏观点,有什么问题请联系我,谢谢!

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据
§ 封装网络请求及 mock 数据 本文配套视频地址: https://v.qq.com/x/page/i05544fogcm.html 开始前请把 ch2-3 分支中的 code/ 目录导
iKcamp
2018/01/04
7200
mpvue网络接口请求封装
在mpvue中我们同样使用小程序的原生API wx.request进行请求,具体方法如下:
honey缘木鱼
2019/03/04
1.8K0
小程序的事件机制与异步执行
在微信小程序的开发过程中,事件机制和异步执行是两个非常重要的概念。小程序的事件机制不仅能够帮助开发者实现与用户交互,还能够高效地处理界面更新和数据流动。而异步执行则是处理网络请求、数据处理、文件上传等操作时的常用方式。本文将详细分析小程序的事件机制与异步执行,提供具体的示例与优化技巧。
LucianaiB
2025/02/21
1240
微信小程序接口请求token过期用户无感应获取token重新调用接口
封装接口请求,我们的业务需要在header上加token和openid,可以根据自己的业务逻辑进行项目改变。 const baseUrl = "xxx"; const http = ({ url = '', param = {}, type = 'json', callback = '', ...other } = {}) => { wx.showLoading({ title:'请求中...', }) let timeStart = Date.now();
安德玛
2022/03/08
2K0
【愚公系列】2022年02月 微信小程序-Request网络请求的封装
Request网络请求在任何应用中都是必不可少的,但微信小程序的wx.request()太过单一没法满足复杂的请求,所以就有本片文章讲解如何封装小程序的请求
愚公搬代码
2022/02/22
8170
【愚公系列】2022年02月 微信小程序-Request网络请求的封装
微信小程序请求封装
config.js const baseUrl = 'http://127.0.0.1:8000/'; export { baseUrl } index.js import { request } from './request' module.exports = { // 获取导航 getNavList: (data) => request('nav/', 'GET', data), } request.js import { baseUrl } from './confi
lyudev
2023/03/01
6730
微信小程序请求封装
微信小程序异步转同步如何实现?(亲测可行)
小程序大部分函数和数据库操作都是异步执行的,如果希望同步执行,需要用到async 和await这对基友,必须成对出现。
超级小可爱
2023/02/20
3.2K0
微信小程序登录token问题==封装在request请求中
小程序中关于登录流程有这样一个问题: 一般的小程序开发都是在app.js的onLaunch中,通过wx.login调用一次后端接口,拿到token、用户信息等数据。 而在进入的首页中,以pages/index/index页面为例。 一般情况下,在进入一个页面也需要调用接口获取页面数据,但这个页面的数据需要由wx.login调用接口返回的token,这个时候,由于app.js中的接口还未返回,所以会出现当前页面调用接口不成功的问题。 于是,针对这个问题,经过小一番代码测试,将登陆接口封装在了API请求的request方法中,做个代码记录。
六个周
2022/10/28
1.4K0
微信小程序使用export和import
小程序支持模块化开发,可以将一些公共的代码抽离成为一个单独的 js 文件,作为一个模块。模块只有通过 module.exports 或者 exports 才能对外暴露接口。引入模块通过require方式。
青年码农
2020/11/19
4.6K0
Spring Boot+微信小程序_保存微信登录者的个人信息
微信小程序开发平台,提供有一类 API,可以让开发者获取到微信登录用户的个人数据。这类 API 统称为开放接口。
一枚大果壳
2022/08/23
1.6K0
Spring Boot+微信小程序_保存微信登录者的个人信息
微信小程序wx.request接口
wx.request是小程序客户端与服务器端交互的接口 HTTPS 请求 一个微信小程序,只能同时(同时不能大于5个)有5个网络请求
达达前端
2022/04/29
1.3K0
微信小程序wx.request接口
小程序Request的封装
更新说明:对文章排版以及内容格式做了调整。 更新时间:2022-05-04 最近做了两个小程序,业务相对比较简单,关于公益方面的,收获颇多,其中感觉在开发中明显提升开发效率以及减少代码量的就是request的封装,下面稍稍做个总结。 通用封装 在utils文件夹下新建两个文件,config.js以及request.js,代码分别如下。 <!-- config.js--> module.exports = { appid: "wxcXXXXXXXXXXXXXX349f", API_B
六个周
2022/10/28
5520
微信小程序原生wx.request简单封装(自用版)
调用方法 import { get,post } from '../../request/request' // GET请求 const _res = await get('https://api.vvhan.com/api/ian') console.log(_res) // POST请求 const _res = await post('https://api.vvhan.com/api/ian') console.log(_res) request.js const request = (url
骤雨重山
2022/06/27
1.2K0
使用Promise封装小程序wx.request
现在尝试把wx.request简单的封装了一下,调用一个request方法,每次请求自动携带header头信息,这样就省事多了,包含了常见的get post put delete 四种请求方法,支持Promise方式调用。
九旬
2020/10/23
9650
微信小程序之onLaunch与onload异步问题
   前端时间开发了一个微信小程序商城项目,因为这个项目我们的需求是进入小程序就通过wx.login({}) 这个api进行用户登录,获取系统后台的用户基本信息。再此之前,一直以为微信小程序中的App.js 中onLaunch (小程序初始化完成执行该方法)方法比其他页面的的 onload 方法要先执行。那么问题就来了,我每次进入小程序首页的时候有时候会先执行onlaunch方法,有时又会先执行首页的onload的方法,最后经过确定,在微信小程序中这两个方法并没有执行先后的顺序,因为他们都是异步执行的。当然开发过微信小程序的开发者都知道微信请求数据都是异步执行的,如在同一个onload写两个请求数据的方法,它不一定会按照先后顺序去执行,这就是传说中的异步地狱了。
追逐时光者
2019/08/28
2.8K0
微信小程序前端promise封装
config.js const config = { base_url_api : "https://douban.uieee.com/v2/movie/", } export {config} http.js import { config } from "../config"; class HTTP { requset({ url, method = "GET", data = {} }) { const promise = new Promise((resolve,
达达前端
2019/08/25
1.1K0
记一次小程序开发中如何使用async-await并封装公共异步请求
在平常的项目开发中肯定会遇到同步异步执行的问题,还有的就是当执行某一个操作依赖上一个执行所返回的结果,那么这个时候你会如何解决这个问题呢;
super.x
2019/04/12
1.5K0
记一次小程序开发中如何使用async-await并封装公共异步请求
处理微信小程序授权登录
当微信小程序项目中涉及到获取用户信息并实现用户登录时,可以通过微信官方提供的登录能力方便地获取微信的用户身份标识,快速建立小程序内的用户体系。官方文档只是提供如何去调用授权登录,如果直接原封不动的照搬文档来进行代码编写,这样势必会造成代码的维护性差,所以本篇着重介绍如果更优雅的处理微信小程序的授权登录。
ruochen
2021/11/26
8.2K0
小程序前端开发基础框架,可直接用于开发
项目介绍 对于微信小程序开发,一直想开源一个可以直接拿来使用的开源框架,这样可以方便大家在此基础上可以迭代开发,简化了写样式,发起Http请求以及和简化调用微信接口的麻烦,其中对于样式采用了WeUI,
牛嗷嗷
2018/03/30
1.1K0
微信小程序——封装GET、POST请求,方便全局调用
//post请求 url:请求路径,请求header,params请求参数,app全局变量
程序猿的栖息地
2022/04/29
2K0
微信小程序——封装GET、POST请求,方便全局调用
推荐阅读
相关推荐
微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验