微信小程序开发——使用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也要非常熟悉 我将该教 ...
随机推荐
- 7.2 if else 语句
7.2 if else 语句 if else语句的通用形式是: if ( expression ) statement1 else statement2 如果expression为真(非0),则执行s ...
- js-语法
js中slice方法(转) 1.String.slice(start,end)returns a string containing a slice, or substring, of string. ...
- Qt之QTreeWidget入门
QTreeWidget的一些基本操作 1.insertTopLevelItems,insertTopLevelItem用来添加顶层的item QTreeWidget *treeWidget = new ...
- SOCKET选项
1. IP_TRANSPARENT [1]socket设置该选项后,可以处理发往非本机的数据包. [2]使用流程: 配置防火墙和路由: iptables -t mangle -A PREROUTING ...
- Shiro与基本web环境整合登陆验证实例
1. 用maven导入Shiro依赖包 <dependency> <groupId>org.apache.shiro</groupId> <artifactI ...
- Win 10更新版1709有哪些新功能值得关注!
windows 10秋季创意者更新版1709发布已经有段时间了,也有很多用户选择升级这次更新的系统.那么,这次Win 10 更新版1709有哪些新功能值得关注呢?下面,一起随主机吧来看一看吧! 1. ...
- int x ; x+1<x;公式成立
直接上代码: Console.WriteLine("int取值范围 -2147483648-2147483647");int x = 2147483647;// Console.W ...
- 【HDFS API编程】图解客户端写文件到HDFS的流程
- ==和equals的比较方式
关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系.——摘自<Java编程思想> 多读几遍之后你会发现——这不就是句废话么233333.(开个玩笑不要打我) 先说 ...
- 初次接触Linux
最近由于工作需求,需要接触Linux系统. 使用VMware虚拟机,安装ubuntu系统.网上教程很多. 配置opencv环境.这是我参考的网上帖子https://blog.csdn.net/fish ...