§ 封装网络请求及 mock 数据

本文配套视频地址:

https://v.qq.com/x/page/i05544fogcm.html


开始前请把 ch2-3 分支中的 code/ 目录导入微信开发工具

上一节中,我们对 index.js 文件中增加了 util 对象,并在对象中封装了很多公用方法

  1. let util = {
  2. log(){……},
  3. alert(){……},
  4. getStorageData(){……},
  5. setStorageData(){……}
  6. }

本节中,我们对常用的网络请求方法 wx.request 进行封装

  1. let util = {
  2. // 此处省略部分代码
  3. request(opt){
  4. let {url, data, header, method, dataType} = opt
  5. let self = this
  6. return new Promise((resolve, reject)=>{
  7. wx.request({
  8. url: url,
  9. data: data,
  10. header: header,
  11. method: method,
  12. dataType: dataType,
  13. success: function (res) {
  14. if (res && res.statusCode == 200 && res.data) {
  15. resolve(res.data);
  16. } else {
  17. self.alert('提示', res);
  18. reject(res);
  19. }
  20. },
  21. fail: function (err) {
  22. self.log(err);
  23. self.alert('提示', err);
  24. reject(err);
  25. }
  26. })
  27. })
  28. }
  29. }

对于请求的参数,我们设置下默认值,方便调用

  1. const DEFAULT_REQUEST_OPTIONS = {
  2. url: '',
  3. data: {},
  4. header: {
  5.      "Content-Type": "application/json"
  6. },
  7. method: 'GET',
  8. dataType: 'json'
  9. }
  10. let util = {
  11. // 此处省略部分代码
  12. request (opt){
  13. let options = Object.assign({}, DEFAULT_REQUEST_OPTIONS, opt)
  14. let {url, data, header, method, dataType, mock = false} = options
  15. let self = this
  16. // 此处省略部分代码
  17. }
  18. }

如果是本地开发调试,需要增加我们的 mock 假数据,对 util.request 进行修改

  1. let util = {
  2. // 此处省略部分代码
  3. request (opt){
  4. let options = Object.assign({}, DEFAULT_REQUEST_OPTIONS, opt)
  5. let {url, data, header, method, dataType, mock = false} = options
  6. let self = this
  7. return new Promise((resolve, reject)=>{
  8. if(mock){
  9. let res = {
  10. statusCode: 200,
  11. data: Mock[url]
  12. }
  13. if (res && res.statusCode == 200 && res.data) {
  14. resolve(res.data);
  15. } else {
  16. self.alert('提示', res);
  17. reject(res);
  18. }
  19. }else{
  20. wx.request({
  21. url: url,
  22. data: data,
  23. header: header,
  24. method: method,
  25. dataType: dataType,
  26. success: function (res) {
  27. if (res && res.statusCode == 200 && res.data) {
  28. resolve(res.data);
  29. } else {
  30. self.alert('提示', res);
  31. reject(res);
  32. }
  33. },
  34. fail: function (err) {
  35. self.log(err);
  36. self.alert('提示', err);
  37. reject(err);
  38. }
  39. })
  40. }
  41. })
  42. }
  43. }

如果请求接口调用时候,包含有参数 mock = true,会自动调用相应的 mock 数据,如果没有这个参数,就走正常流程去调数据。

调用方法如下:

  1. util.request({
  2. url: 'list',
  3. mock: true,
  4. data: {
  5. tag:'微信热门',
  6. start: 1,
  7. days: 3,
  8. pageSize: 5,
  9. langs: 'en'
  10. }
  11. }).then(res => {
  12. // do something
  13. })

iKcamp官网:http://www.ikcamp.com

访问官网更快阅读全部免费分享课程:《iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享》。

包含:文章、视频、源代码

iKcamp原创新书《移动Web前端高效开发实战》已在亚马逊、京东、当当开售。

iKcamp最新活动

报名地址:http://www.huodongxing.com/event/5409924174200

“天天练口语”小程序总榜排名第四、教育类排名第一的研发团队,面对面沟通交流。

微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据的更多相关文章

  1. 微信小程序教学第二章:小程序中级实战教程之预备篇 - 项目结构设计 |基于最新版1.0开发者工具

    iKcamp官网:http://www.ikcamp.com 访问官网更快阅读全部免费分享课程:<iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享>. ...

  2. 微信小程序教学第三章(含视频):小程序中级实战教程:列表-页面逻辑处理

    § 页面逻辑处理 本文配套视频地址: https://v.qq.com/x/page/n0554dndrez.html 开始前请把 ch3-2 分支中的 code/ 目录导入微信开发工具 修改 ind ...

  3. 微信小程序教学第四章第二节(含视频):小程序中级实战教程:详情-视图渲染

    § 详情 - 数据渲染 本文配套视频地址: https://v.qq.com/x/page/x055550lrvd.html 开始前请把 ch4-2 分支中的 code/ 目录导入微信开发工具 这一节 ...

  4. 微信小程序教学第四章第三节(含视频):小程序中级实战教程:详情-功能完善

    详情 - 功能完善 本文配套视频地址: https://v.qq.com/x/page/f0555nfdi14.html 开始前请把 ch4-3 分支中的 code/ 目录导入微信开发工具 这一节中, ...

  5. 微信小程序教学第三章第四节(含视频):小程序中级实战教程:下拉更新、分享、阅读标识

    下拉更新.分享.阅读标识 本文配套视频地址: https://v.qq.com/x/page/h0554i4u5ob.html 开始前请把 ch3-4 分支中的 code/ 目录导入微信开发工具 这一 ...

  6. 微信小程序教学第四章第一节(含视频):小程序中级实战教程:详情-页面制作

    详情 - 页面制作 本文配套视频地址: https://v.qq.com/x/page/o0555o20xjd.html 开始前请把 ch4-1 分支中的 code/ 目录导入微信开发工具 这一章节中 ...

  7. 微信小程序教学第三章第三节(含视频):小程序中级实战教程:视图与数据关联

    § 视图与数据关联 本文配套视频地址: https://v.qq.com/x/page/z0554wyswib.html 开始前请把 ch3-3 分支中的 code/ 目录导入微信开发工具 首先 首先 ...

  8. JAVA学习之Ecplise IDE 使用技巧(2)第二章:键盘小快手,代码辅助

    上一篇:JAVA学习之Ecplise IDE 使用技巧(1)第一章:我的地盘我做主,工作空间 第二章:键盘小快手,代码辅助 内容包括: 第一:显示行号 如何设置行号:Ecplice菜单Windows& ...

  9. Prism 文档 第二章 初始化Prism应用程序

                                                                           第二章 初始化Prism应用程序 本章将讨论为了使一个Pr ...

随机推荐

  1. python进阶---Python中的socket编程

    初识socket编程 一.前言 socket基于C\S架构(客户端\服务端)的编程模型,在Python中是以socket模块存在的. Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是 ...

  2. Altera FIFO IP核时序说明

    ALTERA在LPM(library of parameterized mudules)库中提供了参数可配置的单时钟FIFO(SCFIFO)和双时钟FIFO(DCFIFO).FIFO主要应用在需要数据 ...

  3. 用python画一朵玫瑰花

    废话不多说,直接上代码 from turtle import * import time setup(600,800,0,0) speed(0) penup() seth(90) fd(340) se ...

  4. 如何编写单元测试-基于Spring

    单元测试 首先单元测试真的算是一种"脏活累活",但是我个人感觉还是有必要,至少本人最近开始写单元测试后还是能发现一些"bug"的. 如何写单元测试 单元测试的要 ...

  5. 2735:八进制到十进制-poj

    总时间限制:  1000ms 内存限制:  65536kB 描述 把一个八进制正整数转化成十进制. 输入 一行,仅含一个八进制表示的正整数a,a的十进制表示的范围是(0, 65536). 输出 一行, ...

  6. POJ1837--二维背包

    Balance Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 13525 Accepted: 8474 Description ...

  7. FastDFS教程Ⅲ-文件服务器扩容

    1.简介     FastDFS文件服务器在设计时,为了支持大容量,存储节点(服务器)采用了分卷(或分组)的组织方式.存储系统由一个或多个卷组成,卷与卷之间的文件是相互独立的,所有卷的文件容量累加就是 ...

  8. C/C++筛选法算素数

    什么是求素数 )i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数 普通枚举法: #include <iostream> #include <string> ...

  9. 【下一代核心技术DevOps】:(一)容器服务的Rancher选型

    为什么说是下一代核心技术 其实经过互联网的多次变革说起,早期的C/S架构,到后来的B/S架构,一直到现在最普遍的M/S架构,他们的背后都是技术不断的优化改进,以适应促进IT技术的发展 整体而言在过去1 ...

  10. WebLogic部署报java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cannot be cast to javax.xml.parsers.SAXParserFactory

    今天在部署WebLogic项目时,报了java.lang.ClassCastException: weblogic.xml.jaxp.RegistrySAXParserFactory cannot b ...