微信小程序开发——使用mock数据模拟api请求
前言:
微信小程序开发中,后端提供了接口设计文档,前端可以先mock数据模拟api请求进行开发调试,而且可以根据需要设计mock文件的格式和内容,这样在后端接口开发完成之前,前端可以最大限度的完成前端的开发。
编写mock数据文件:
//mocklist.js
export default {
//获取openid(所有登录方式都需要有)
getOpenId: {
s: "0",
m: "登录成功",
uid: "666",
d: {
openid: 'ds3fs5f1sd3s5d1f3sdf153'
}
},
//检验登录有效性
checkToken: {
s: "0",
m: "登录成功",
uid: "666",
d: {
usertoken: 'wefsdik8888888888888888888'
}
},
......
为了方便接口请求的异常处理,mock数据中最好带有接口请求结果的状态字段,这样在前期页面制作、业务逻辑编码的时候就能把所有情况都进行考虑编码,这比等待后端提供接口或者临时编写demo数据要方便省事的多。
封装网络请求:
//request.js
//接口访问异常统一错误提示
const errorToast = function(msg) {
wx.showToast({
title: msg || "服务器繁忙,请稍后再试",
icon: "none"
})
} //接口列表(如果接口较多,可以单独提取到一个js文件中)
const apiList = {
/*登录相关*/
checkToken: 'user/checkToken', //检查token是否有效
getSmsCode: 'user/authcode', //获取验证码
userLogin: 'user/login', //登录
......
} /**
* 封装http 请求方法
*/
const apiUrl ="https://xxx.xxxx.cn/"
const http = (params) => {
wx.loading()
//返回promise 对象
return new Promise((resolve, reject) => {
wx.request({
url: apiUrl + params.url,
data: params.data,
header: params.header || {
"Content-Type": "application/x-www-form-urlencoded",
"usertoken": wx.getStorageSync("usertoken"),
"uid":(new Date()).getTime()+'_'+Math.floor(Math.random()*100000000)//接口请求流水号
},
method: params.method || 'POST',
success: function(res) {
wx.hideLoading()
var data = res.data;
if (res.statusCode == 200 && data) {
//需要登录、后端返回登录失效代码,需要自动登录然后重新加载小程序
if (!params.noNeedLogin && data.s == 302) {
wx.removeStorageSync("usertoken")
wx.removeStorageSync("openid")
wx.toast('登陆失效,请重新登陆~', () => {
//登陆失效,跳转到登陆页面
wx.reLaunch({
url: '../../pages/login/index',
})
})
return;
}
//判断是否需要预处理错误信息
if (params.noPreError) {
//接口需要单独处理错误信息,直接返回响应信息
resolve(data)
} else {
if (data.s == "0") {
resolve(data.d)
} else {
errorToast(data.m)
console.log(data)
}
}
} else {
errorToast();
console.log(data)
}
},
fail: function(e) {
errorToast();
reject(e)
}
})
})
} /**
* 封装mock数据模拟接口请求
*/
import {
mocklist
} from '../mocklist.js'
const http2 = (params) => {
return new Promise((resolve, reject) => {
wx.loading()
setTimeout(() => {
for (var key in apiList) {
if (apiList[key] == params.url) {
wx.hideLoading()
var data = mocklist[key]
//需要登录、后端返回登录失效代码,需要自动登录然后重新加载小程序
if (!params.noNeedLogin && data.s == 302) {
wx.toast('登陆失效,请重新登陆~', () => {
//登陆失效,跳转到登陆页面
wx.reLaunch({
url: '../../pages/login/index',
})
})
return;
}
//判断是否需要预处理错误信息
if (params.noPreError) {
//接口需要单独处理错误信息,直接返回响应信息
resolve(data)
} else {
if (data.s == "0") {
resolve(data.d)
} else {
wx.toast(data.m || "系统繁忙,请稍后重试~")
console.log(data)
}
}
break;
}
}
}, 500)
})
}
module.exports = {
errorToast,
apiList,
http:http//http2
}
说明:
1.接口路径 apiList 如果比较多,可以单独抽取到一个js中;
2.响应数据预处理:响应数据默认进行预处理,给与统一返回响应值和异常提示;特殊接口根据noPreError、noNeedLogin进行特殊处理(后文会详细说明);
3.对于统一返回的数据是用 data 还是 data.d ,则要考虑正常情况下无需返回数据的情况(如对手机号进行验证,只需要返回正确的响应状态和提示信息,无需返回数据,即data.d为空),对大部分接口直接返回data.d的好处是页面中编写接口请求可以不需要再对data.s进行判断,直接对返回的data(也就是data.d)进行判断就好了,如果无需返回数据的接口请求比较少,则直接使用noPreError进行特殊处理就可以了;
4.分别封装了真实请求(http)和mock请求(http2),而切换也很容易。
//使用mock开发
module.exports = {
http:http2
}
//后端真实接口联调
module.exports = {
http:http
}
对具体接口请求进行封装:
import {
errorToast,
apiList,
http
} from 'request.js'
/**
* 导出接口请求
* noNeedLogin: true 无需登录
* noPreError: true 无需预处理错误信息
*/
module.exports = {
errorToast,
//检验用户登录有效性
checkToken(channelid) {
return http({
url: apiList.checkToken,
data: {
channelid: channelid
},
noPreError: true, //无需预处理错误信息
noNeedLogin: true //无需登录
})
},
//获取短信验证码
getSmsCode(phone) {
return http({
url: apiList.getSmsCode,
data: {
phone: phone
},
noNeedLogin: true
})
},
......
}
如上,接口请求封装配置了接口的地址、参数以及两个特殊参数:
noPreError:(无需预处理)参数对响应结果进行特殊处理的(特殊异常提示,跳转等)的接口请求进行标志;
noNeedLogin:无需登陆参数,仅针对无需登陆就能访问的接口进行配置。
微信小程序开发——使用mock数据模拟api请求的更多相关文章
- 微信小程序开发调试阶段不校验请求域名
在微信小程序开发官网上有说明: 在开发者工具的右上角有详情选项,可以勾选不校验合法域名,之后就可以与本地ip进行通信了!
- 微信小程序开发 [05] wx.request发送请求和妹纸图
1.wx.request 微信小程序中用于发起网络请求的API就是wx.request了,具体的参数太多,此处就不再一一详举了,基本使用示例如下: wx.request({ url: 'test.ph ...
- 微信小程序开发——使用promise封装异步请求
前言: 有在学vue的网友问如何封装网络请求,这里以正在写的小程序为例,做一个小程序的请求封装. 关于小程序发起 HTTPS 网络请求的Api,详情可以参考官方文档:wx.request(Object ...
- WordPress版微信小程序开发系列(一):WordPress REST API
自动我发布开源程序WordPress版微信小程序以来,很多WordPress站长在搭建微信小程序的过程中会碰到各种问题来咨询我,有些问题其实很简单,只要仔细看看我写的文章,就可以自己解决.不过这些文章 ...
- 微信小程序开发系列六:微信框架API的调用
微信小程序开发系列教程 微信小程序开发系列一:微信小程序的申请和开发环境的搭建 微信小程序开发系列二:微信小程序的视图设计 微信小程序开发系列三:微信小程序的调试方法 微信小程序开发系列四:微信小程序 ...
- 【云开发】10分钟零基础学会做一个快递查询微信小程序,快速掌握微信小程序开发技能(轮播图、API请求)
大家好,我叫小秃僧 这次分享的是10分钟零基础学会做一个快递查询微信小程序,快速掌握开发微信小程序技能. 这篇文章偏基础,特别适合还没有开发过微信小程序的童鞋,一些概念和逻辑我会讲细一点,尽可能用图说 ...
- 微信小程序开发心得
微信小程序也已出来有一段时间了,最近写了几款微信小程序项目,今天来说说感受. 首先开发一款微信小程序,最主要的就是针对于公司来运营的,因为,在申请appid(微信小程序ID号)时候,需要填写相关的公司 ...
- 微信小程序开发日记——高仿知乎日报(下)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
- 微信小程序开发日记——高仿知乎日报(中)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...
随机推荐
- 解决"Windows没有足够信息,不能验证该证书"问题
https://jingyan.baidu.com/article/335530dae0eb2319ca41c378.html
- Python解释器的安装
Python解释器的安装 作者:Eric 微信:loveoracle11g 下载Python Python-3.7.0(64-bit)下载链接地址: https://www.python.org/ft ...
- Redis集群搭建-韩国庆
认真一步一步搭建下来,就可以成功.... Redis-cluster集群架构讲解 redis集群专业名词称之为Redis-cluster,redis集群是从3.0版本以后才有的概念,也就是说在3.0之 ...
- Verilog风格
Verilog HDL编写原则: 可移植性强(多用宏定义:少用嵌入代码中的常数,即Magic Number:使用头文件): 必要的注释,代码易读: 模块间耦合尽可能低: 变量名与宏的命名规则: 变量名 ...
- redis读书笔记
1.redis两种存储机制(持久化) Redis的存储机制分为:Snapshot和AOF 都先将内存存储在内存中. (1)Snapshot当数据累计到一定的阈值,就会触发dump将数据一次性写入到数据 ...
- vue2.0插件--loading
loading效果很常见,常见到我们任何一个项目中,都可以见到他的身影.今天就以loading作为切入口,唠叨一下vuejs的插件的写法. 看vuejs官方文档关于插件的说明,关于使用插件和写插件,V ...
- web socket server code, 调用 shell exec child_process
var child_process = require('child_process'); var ws = require("nodejs-websocket"); consol ...
- ASP.NET MVC 3 Application Upgrader
ASP.NET MVC 3 Application Upgrader: http://aspnet.codeplex.com/releases/view/59008
- c++堆和栈(转)
想要学好C++的C++堆栈,那么就要了解什么是C++堆栈,所为C++堆栈就是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除,分为堆和栈两部分. 在C++中,内存分 ...
- 我与OO (1)
前言 “真正的勇士敢于面对惨淡的人生,敢于面对淋漓的鲜血” 我是谨慎拜读了鲁迅先生的名言,怀着崇敬的精神去接触这门课程的. 而当我真的经历了这门课程以后,我才发现,刘和珍君这样的觉悟,我们普通人,果然 ...