简介

美团出品的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, CONNECT
header: {
'X-Bmob-Application-Id': bmobConfig.applicationId,
'X-Bmob-REST-API-Key': bmobConfig.restApiKey,
'Content-Type': 'application/json'
}, // 设置请求的 header
success: function (res) {
// success
wx.hideLoading();
if(res.statusCode!=200){
wx.showToast({
title: "网络出错,稍后再试",
icon: "none"
});
return false;
}
resolve(res.data);
},
fail: function (error) {
// fail
wx.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, CONNECT
header: {
'X-Bmob-Application-Id': bmobConfig.applicationId,
'X-Bmob-REST-API-Key': bmobConfig.restApiKey,
'Content-Type': 'application/json'
}, // 设置请求的 header
success: function (res) {
// success
wx.hideLoading();
resolve(res.data);
},
fail: function (error) {
// fail
wx.hideLoading();
reject(error);
},
complete: function () {
// complete
wx.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';//导入封装好的net import 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(){
//注意方法名之前一定要加上异步async
this.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的技术贴以留后用:

mpvue学习笔记-之微信小程序数据请求封装的更多相关文章

  1. 微信小程序数据请求方法wx.request小测试

    微信小程序数据请求方法 wx.request wxml文件: <view> <textarea value="{{textdata}}"/> </vi ...

  2. 微信小程序 -- 数据请求

    微信小程序 -- 数据请求 微信小程序请求数据,并不是一个可以在url打开有数据就可以拿到数据那么简单 浏览器地址输入 可以获取参数的url 微信小程序中 代码展示 wxml <view> ...

  3. 微信小程序 request请求封装

    在utils文件夹新建文件utils.js,封装代码如下: 小程序升级后内部不自带Promise方法,需外部引入Promise方法   var sendRequest = function (url, ...

  4. 微信小程序request请求封装

    var app = getApp(); function request(url,postData,doSuccess,doFail,doComplete){ var host = getApp(). ...

  5. 微信小程序request请求封装,验签

    1/ 公共文件util添加 request请求 //简单封装请求 function request(params, path, isShowLoading = true, goBack = false ...

  6. 微信小程序开发:学习笔记[7]——理解小程序的宿主环境

    微信小程序开发:学习笔记[7]——理解小程序的宿主环境 渲染层与逻辑层 小程序的运行环境分成渲染层和逻辑层. 程序构造器

  7. flume采集微信小程序数据

    flume采集微信小程序数据 flume收集前端埋点数据[1]POST请求http://f.x.com:50000数据格式: JsonArray数据格式示例:[{ "headers" ...

  8. 微信小程序POST请求参数传递不到后台, 前台获取不到后端返回的数据, 以及 post 请求返回 404 但后台能收到数据

    1 微信小程序POST请求参数传递不到后台 需要在微信请求 wx.request 改变默认 header 配置为如下 wx.request({ url: 'test.php', //仅为示例,并非真实 ...

  9. 微信小程序 网络请求之re.request 和那些坑

    微信小程序有四种网络请求类型,下面只详细介绍普通HTTPS请求(wx.request) 普通HTTPS请求(wx.request) 上传文件(wx.uploadFile) 下载文件(wx.downlo ...

随机推荐

  1. 『OGG 01』Win7 配置 Oracle GoldenGate 踩坑指南

    安装 Oracle 安装 Oracle11g 32位[Oracle 32位的话,OGG 也必须是 32位,否则会有0xc000007b无法正常启动 错误] 安装目录为 D:\oracle\produc ...

  2. .Net Project 常规结构

    目录:一个.NET网站的成长历程 在个人的日常工作和学习中,接触到不少的项目,这些项目结构大同小异,其结构的核心思想无外乎“分层“. 分层?从字面上理解,看似简单,实则不然.这需要从多个维度去看待这个 ...

  3. HTML5将footer置于页面最底部的方法(CSS+JS)

    JavaScript: <script type="text/javascript"> $(function(){ function footerPosition(){ ...

  4. 关于加载font-awesome文字显示不出来

    关于font-awesome的网站 中文网:http://www.fontawesome.com.cn/get-started/ 官网:https://fontawesome.com/ 中文网4.7: ...

  5. 将博客搬至CSDN https://blog.csdn.net/Fredric_2014

    将博客搬至CSDN https://blog.csdn.net/Fredric_2014

  6. String、StringBuffer和StringBuilder类的区别

    Java提供了String.StringBuffer和StringBuilder类来封装字符串,并提供了一系列操作字符串对象的方法. 它们的相同点是都用来封装字符串:都实现了CharSequence接 ...

  7. Java数据结构和算法 - 堆

    堆的介绍 Q: 什么是堆? A: 这里的“堆”是指一种特殊的二叉树,不要和Java.C/C++等编程语言里的“堆”混淆,后者指的是程序员用new能得到的计算机内存的可用部分 A: 堆是有如下特点的二叉 ...

  8. C/C++性能测试工具GNU gprof

    代码剖析(Code profiling)程序员在优化软件性能时要注意应尽量优化软件中被频繁调用的部分,这样才能对程序进行有效优化.使用真实的数据,精确的分析应用程序在时间上的花费的行为就成为_代码剖析 ...

  9. load data infile

    mysql> load data local infile 'd:/lw.txt' into table user (code,password,channelId);Query OK, 478 ...

  10. Java集合详解2:LinkedList和Queue

    今天我们来探索一下HashMap和HashTable机制与比较器的源码. 具体代码在我的GitHub中可以找到 https://github.com/h2pl/MyTech 喜欢的话麻烦star一下哈 ...