微信小程序 本地数据存储实例详解
前言
如果您在看此文章之前有过其他程序的开发经验,那一定会知道一般例如安卓或者苹果的原生APP都提供了本地的存储功能,甚至可以使用sqlite数据库来做存储。可是微信的小程序框架基于微信本身,其实际运行环境只是在浏览器里面,所以不会提供那么丰富的数据存储实力。但html5开始已经可以在浏览器里面存储数据,好在微信的小程序给这个功能封装好了,这样我们可以使用数据存储。
每个微信小程序都可以有自己的本地缓存,可以通过 wx.setStorage(wx.setStorageSync)
wx.getStorage(wx.getStorageSync)、 wx.clearStorage(wx.clearStorageSync)
可以对本地缓存进行设置、获取和清理。本地缓存最大为10MB。
上面的set和get都有对应的Sync方法,带Sync的方法为同步方法、不带Sync的方法为异步方法。
设置缓存都需要设置一个key和对应的data值,我们在《微信web开发者工具》中的调试状态下可以点击调试窗口的Storage 栏来查看我们缓存在本地的数据。
缓存可以保存数组、数值、字符串、对象。
设置缓存
提供setStorage和setStorageSync两个接口,并且在使用设置存储方法时,如果小程序的存储值当中已经存在对应的key的值,那么会使用新的值替换原来的值。
setSotrage接口
wx.setStorage({ key:"key", data:"value", success:function(res){console.log(res)}, fail:function(res){console.log(res)}, complete:function(res){console.log(res)}, }) //Object {errMsg: "setStorage:ok"} //Object {errMsg: "setStorage:ok"}
setStorageSync接口
因为该方法为同步接口,所以直接设置key和data:
wx.setStorageSync('key', 'value')
上面两个demo中我们都使用了字符串缓存,当然我们也可以缓存一个对象,例如:
wx.setStorage({key:"ob",data:{name:'smallerpig',sex:1,age:18}})
获取缓存
getSotrage接口
异步接口,所以我们可以定义几个回调:
wx.getStorage( { key:'key', success:function(res){ console.log(res)//Object {errMsg: "getStorage:ok", data: "value1"} }, fail:function(res){console.log(res)}, complete:function(res){console.log(res)} })
其中,我们可以看出来,微信小程序的很多异步接口的回调都会给出三个回调:success、fail、complete,在执行成功的时候回执行success、complete回调;在执行失败之后会分别执行fail、complete回调。
getSotrageSync接口
该接口为同步接口,所以只需传递对应的key值就可以了。如下列代码:
wx.getStorageSync('ob') //Object {name: "smallerpig", sex: 1, age: 18}
获取当前存储总结
使用wx.getStorageInfo接口
例如下列代码:
wx.getStorageInfo({ success: function(res) { console.log(res.keys) console.log(res.currentSize) console.log(res.limitSize) } //["logs", "r3session", "key"]0: "logs"1: "r3session"2: "key"] //1 //10240 })
也可以使用同步接口wx.getStorageInfoSync。
缓存的使用
在上一篇文章中,小猪介绍了如何解密通过wx.getUserInfo接口获取到的cryptedData数据。其中的session_key小猪是写在flask的缓存中,缓存的键是写死为:xcx_session_key。在真实环境中我们不能够这样写,因为这样不同的用户获取到的session_key是相同的,所以我们需要给不同的用户附上不同的缓存key。把flask的缓存key返回给微信小程序,小程序中可以固定一个key值,data值保持flask后台给到的值。
说的比较绕,这里需要读者好好理解下。
在flask的代码的使用code获取session_key中,使用下列代码:
@app.route('/user/getuserinfo', methods=['GET', 'POST']) def getuserinfo(): code = request.data url = 'https://api.weixin.qq.com/sns/jscode2session"htmlcode">wx.request({ url: 'https://***.smallerpig.com/user/getuserinfo', data: r.code, method: 'POST', success: function(res){ wx.setStorageSync('r3session', res.data) } })再接下来,在调用wx.getUserInfo时将返回的数据加上从微信小程序本地缓存中取到的r3session丢给flask来处理,flask根据来的r3session从本地服务器的flask缓存中取到微信的值解密cryptedData。这才是一个完整的过程。
小程序的getUserInfo代码:
wx.getUserInfo({ success: function (res) { that.globalData.userInfo = res.userInfo typeof cb == "function" && cb(that.globalData.userInfo) //将本地存储中的r3session值也同样传递到我的服务器,在服务器中找出微信给到我们的session_key var r3session = wx.getStorageSync('r3session') res.r3session = r3session wx.request({ url: 'https://***.smallerpig.com/user/getuserunionid', data: res, success: function(res){ // success console.log(res) }, }) } })对应的flask代码:
@app.route('/user/getuserunionid', methods=['GET', 'POST']) def getuserid(): r = json.loads(request.data) encryptedData = r['encryptedData'] iv = r['iv'] xcx_session_key = r['r3session'] session_key = cache.get(xcx_session_key) # 从缓存中取出对应r3session对应的session_key pc = WXBizDataCrypt(appid, session_key) return pc.decrypt(encryptedData, iv)参考官方文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/data.html
总结
经过几篇文章的介绍,如果您是按照小猪的代码一步一步做的话你应该已经了解小程序开发的大致过程,接下来的重点无非就是熟悉小程序提供给大家的接口,然后根据这些接口来完善我们的业务逻辑。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]