简介

美团出品的mpvue已经开源出来很久了,一直说要进行一次实践,这不最近一次个人小程序开发就用上了它。

看了微信官方的数据请求模块--request,对比了下get和post请求的代码,发现如果在每一个地方都用request的话,那会有很多代码是冗余的,于是就准备自己封装一个,下面就记录一下封装过程。注释也写在下面的代码里了。

实现的结果

  • 代码要简洁
  • 无需每个页面引入一次
  • Promise化,避免回调地狱

封装代码

//src/utils/net.js
import wx from 'wx';//引用微信小程序wx对象
import { bmobConfig } from '../config/bmob';//bmob配置文件const net = {get(url, data) {wx.showLoading({title: '加载中',//数据请求前loading,提高用户体验})return new Promise((resolve, reject) => {wx.request({url: url,data: data,method: 'GET', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTheader: {'X-Bmob-Application-Id': bmobConfig.applicationId,'X-Bmob-REST-API-Key': bmobConfig.restApiKey,'Content-Type': 'application/json'}, // 设置请求的 headersuccess: function (res) {// successwx.hideLoading();if(res.statusCode!=200){wx.showToast({title: "网络出错,稍后再试",icon: "none"});return false;}resolve(res.data);},fail: function (error) {// failwx.hideLoading();reject(error);//请求失败},complete: function () {wx.hideLoading();// complete}})})},post(url, data) {wx.showLoading({title: '加载中',})return new Promise((resolve, reject) => {wx.request({url: url,data: data,method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECTheader: {'X-Bmob-Application-Id': bmobConfig.applicationId,'X-Bmob-REST-API-Key': bmobConfig.restApiKey,'Content-Type': 'application/json'}, // 设置请求的 headersuccess: function (res) {// successwx.hideLoading();resolve(res.data);},fail: function (error) {// failwx.hideLoading();reject(error);},complete: function () {// completewx.hideLoading();}})})}
}export default net;//暴露出来供其他文件引用

使用方法

  • 全局配置请求方式,避免每次import
// src/main.js
import Vue from 'vue';
import App from '@/App';
import MpvueRouterPatch from 'mpvue-router-patch';
import net from '@/utils/net';//导入封装好的netimport shareConfig from '@/config/share';Vue.prototype.$net=net;//微信小程序网络请求的配置Vue.config.productionTip = false
Vue.use(MpvueRouterPatch)const app = new Vue({...App
})
app.$mount()export default {//省略coding
}
  • 发送请求实例,第一步已经全局配置了net,使用时直接用this.$net即可使用net的方法(get/post)
// src/pages/home/index.vue
<template>
<!--省略coding-->
</template>
<script>
export default {
data() {return {}bannerList:[],navList:[],newsitems:[],about:"",applay:false, }
},
onLoad () {this.getData();
},
methods:{async getData(){//注意方法名之前一定要加上异步asyncthis.bannerList=[];let bannerList = await this.$net.get(this.$apis.bannerList,{});let newsitems = await this.$net.get(this.$apis.article,{});//请求数据前面要加上await,是与async配套使用let aboutus = await this.$net.get(this.$apis.aboutus,{});let isApplay = await this.$net.get(this.$apis.datadict+'/kMiCYYYg',{});// console.log(isApplay);if(isApplay.remark1=='1'){this.applay = true;}this.newsitems = newsitems.results;// this.bannerList = bannerList.results;bannerList.results.forEach(el => {if(el.is_open==1){this.bannerList.push(el);}});this.about = aboutus.results[1].desc;// console.log(aboutus)},
}
</script>
<style>
/*
省略样式coding
**/
</style>

总结

这次对微信数据请求的封装过程中学习了一下Promise,使得代码更简洁了。踩了一些坑:比如说async一定要与await配套使用,数据请求前要加上异步async。

这里贴一下Promise的技术贴以留后用:

  • 大白话讲解Promise
  • 阮一峰ES6-Promise对象

mpvue学习笔记-之微信数据请求封装相关推荐

  1. SwiftUI学习笔记之异步数据请求

    SwiftUI学习笔记之异步数据请求 方法一 方法描述: 结合使用 ObservableObject @Published @ObservedObject ObservableObject 定义自己的 ...

  2. 微信小程序开发:学习笔记[9]——本地数据缓存

    微信小程序开发:学习笔记[9]--本地数据缓存 快速开始 说明 本地数据缓存是小程序存储在当前设备上硬盘上的数据,本地数据缓存有非常多的用途,我们可以利用本地数据缓存来存储用户在小程序上产生的操作,在 ...

  3. 【学习笔记】大数据技术之Scala(下)

    [学习笔记]大数据技术之Scala(上) 大数据技术之Scala 第 6 章 面向对象 6.1 Scala 包 6.1.1 包的命名 6.1.2 包说明(包语句) 6.1.3 包对象 6.1.4 导包 ...

  4. oracle数据库开多线程,学习笔记:Oracle表数据导入 DBA常用单线程插入 多线程插入 sql loader三种表数据导入案例...

    天萃荷净 oracle之数据导入,汇总开发DBA在向表中导入大量数据的案例,如:单线程向数据库中插入数据,多线程向数据表中插入数据,使用sql loader数据表中导入数据案例 1.Oracle数据库 ...

  5. Vue学习笔记入门篇——数据及DOM

    本文为转载,原文:Vue学习笔记入门篇--数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter ...

  6. vs2010 学习Silverlight学习笔记(11):数据与通信之WebClient

    概要: 基础知识终于学完了,我今天又从第一篇看到第十篇,发现明白了一些东西,还有忘记了部分东西.呵呵,咱不能猴子掰玉米,学了新的忘记旧的.要经常去复习,去用.这一篇是数据通信部分的第一篇,有些东西没接 ...

  7. HALCON 21.11:深度学习笔记---Data(数据)(3)

    HALCON 21.11:深度学习笔记---Data(数据)(3) HALCON 21.11.0.0中,实现了深度学习方法.其中,关于术语"数据"的介绍如下: 术语"数据 ...

  8. CCC3.0学习笔记_证书数据

    CCC3.0学习笔记_证书数据 系列文章目录 文章目录 系列文章目录 前言 1. [A] - SE Root CA Certificate 2. [B] - SE Root Certificate 3 ...

  9. oracle查询一列汇总,【学习笔记】Oracle数据筛选 查找oracle所有表中的特定列中的某些数据...

    天萃荷净 开发DBA反映,根据需求需要查找Oracle数据库中所有表中特定的列中指定的关键词的数据,和数据内容和数量 找出数据库中所有表表中REMARK列中含有WN.wind.wlr中表名和数量 de ...

  10. Python3 爬虫学习笔记 C10【数据储存系列 — MySQL】

    Python3 爬虫学习笔记第十章 -- [数据储存系列 - MySQL] 文章目录 [10.1]MySQL 基本操作语句 数据库操作 表操作 表的结构 表的数据 [10.2]Python 连接 My ...

最新文章

  1. NVIDIA® TensorRT™ supports different data formats
  2. 【Linux入门到精通系列讲解】shell中的eval命令
  3. 这人说的有意思,哈 哈
  4. Java数据结构习题_算法分析
  5. XCTF-高手进阶区:bug
  6. linux+有趣的指令,6个有趣的Linux命令(乐趣终端) - 第二部分
  7. Linux导出history命令到本地
  8. 跨境电商shopify独立站如何引流量
  9. 经纬度坐标转换成px_经纬度坐标转像素坐标
  10. js进阶正则表达式10-分组-多行匹配-正则对象的属性(小括号作用:分组,将小括号里面的东西看成一个整体,因为量词只对前一个字符有效)(多行匹配:m)(属性使用:reg.global)...
  11. MAC 青花瓷(Charles)爪机HTTPS 抓包
  12. 洛谷1498-谢尔宾斯基三角形-python-(递归)
  13. R语言|使用RGL包构建3D 图形(一)
  14. U盘快捷方程病毒 iexplore.vbs
  15. 腾讯互娱推出 PGOS 提供 Serverless 游戏上云
  16. Java jdt 编辑_java – 如何使用JDT以编程方式重命名方法
  17. 苹果你深深的伤害了我,还不让我说
  18. Qt-利用fmod库显示声音波形
  19. VBA程序升级,vba在线更新
  20. Linux系统如何下载CityScape/KITTI-STEP数据集

热门文章

  1. python创建员工_Python综合练习之创建员工信息表
  2. 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能
  3. gbdt 和random forest 效果非常好的思考!
  4. RNA_seq(1)植物转录组实战(上)之salmon进行索引建立和转录组定量
  5. MATLAB dsolve 函数求解偏微分方程一例
  6. 双屏幕切换成单屏,软件不显示的问题与解决方法(总结全网)
  7. java 男女 相邻交换 队形_(Java实现) 洛谷 P1091合唱队形
  8. linux7重启network,mmp的 rhel7 network重启一直失败,求原因!!!
  9. PHP MD5 SHA1 比较 漏洞绕过
  10. day14 匿名函数