小程序·云开发的数据库,是一个既可在前端操作、也能在云函数中读写的json数据库,对外提供丰富的数据库API。从满足基础可用性到现在,已能够满足中大型小程序的要求。
那么,基于云开发数据库,你做过哪些有意思的小程序实践呢?在这个话题中,我们面向广大开发者(包括个人和企业)征集云开发数据库的使用案例,优秀的案例将有机会获得官方专属访谈与“微信开发者”官方公众号推送宣传分享。
案例分享建议包括云开发数据库使用背景与需求,可提供脱敏的代码示例与数据。
参与#云开发#系列话题并提供高质量回答或建议者即有机会获得微信相框Classic一台,快来参加吧!
*获奖情况将在后续「社区每周」公告中公示,如获访谈机会将有官方运营专员通过社区私信联系作者,请及时留意社区私信
*使用小程序云开发过程中的如有疑问或Bug反馈,可在社区云开发版块发帖交流
在这提个云开发的需求:删除的数据要是有一个垃圾桶的概念会不会体验更好一点。有时候强迫症手动删除一些垃圾数据,后面发现删除错了。数据挺重要的,想恢复一下。例如删除的数据有个七天的缓冲期,就能恢复指定数据,如何?数据库回档是整个集合的并不能好好的玩耍。
我个人使用小程序云开发的项目有两个:
1,问卷调查I投票。(拿这个去宣传分享吧,放了些广告了,哈哈哈)
有啥新功能新特性都会想办法塞进“问卷调查I投票”这个小程序。例如:
1,数据实时更新。
2,订阅消息。
3,定时触发器。
4,客服关键字自动回复(开发版做了)
5、生成带参数二维码
6、..............................
从来没有收到礼物,是个礼物就行。(加粗加红了,应该能一眼就看到了)
正在做一个公益小程序,小程序端和PC管理端使用的都是云开发,刚开始PC管理端是直接操作云开发数据库,后来发现比较危险,就全部改成云函数调用数据库了,项目基本完成了,还差个好听的名字,做好后代码全部开源
口算卡132 小程序-云开发
本文记录我基于小程序云开发模式,进行小程序“口算卡”的全部历程,篇幅较长,分为以下篇章
1,需求概述及简单上手
需求,已经根据需求做了卡片,但是手工发牌很累人,所以准备做这个口算卡132
小程序基本开发简单说下,
1,使用云开发快捷模板
2,学习云开发快捷模板自带代码功能
3,动手做,获得132题的数据,132题其实就是结果在10以内的加减法,2成for循环判断差大于等于0或者和小于等于10;共得到132题;
4,将题竖向显示,使用了css的旋转属性,这都很简单;
5,正确了点对号,错误了点错,统计对错,显示结果;
至此,简单版已经完成;可以解决发牌问题及统计时间问题;
2,小程序云函数使用(写入DB及读取DB)
有个口算结果、时间、错题数、题量、我们得把它存储起来,方便之后看看趋势和进步;
所以这里要研究下小程序云开发里的 databaseGuide ,很方便的写入和读取;写入成绩代码如下
saveScore(){ const db = wx.cloud.database() db.collection('shuzi132').add({ data: { type:'132', addtime: parseInt(new Date()/1000), total:this.total, totalFail:this.totalFail, time:this.time, } }) },
读取成绩列表
getHistory(){ const db = wx.cloud.database() db.collection('shuzi132') .where({_openid: getApp().globalData.openid}) .orderBy('addtime', 'desc') .skip(this.offset)//分页offset .limit(this.limit)//分页limit .get() .then(res=>{ console.log(res); if(res.data.length this.hasMore=false; } if(res.data.length>0){ this.formatRows(res.data); } }) },
在此基础上,继续开发了班级资料,通过班主任姓名,将一个班的同学记录展示出来,方便教师管理
3,小程序云函数(语音识别,从思路到实现到放弃使用云函数)
怎么才能用的更舒服,那肯定是小孩报出答案后,自动识别语音,然后比较一下就可以了;
篇幅限制,请移步查看云函数的开发
经过了思路二的折腾,证明网络请求果真是消耗资源的大头,所以有了思路3,socket方式,下章我们开始 socket 之旅
4,语音识别,从小程序云函数到自建服务器转码识别
折腾了小程序云函数,从实现到放弃;所以有了思路三,nodejs+socket+ffmpeg+百度SDK
必须有服务器可用来搭建 socket 服务哦
篇幅限制,请移步看我如何从想法到实现再到放弃语音识别!!!
此仍我的开山之作,云开发首秀作品,欢迎体验
前排占座,坐等上乘作品学习参观
捧场一下:坐等欣赏各位大大的云开发经典作品。
感恩一下:云开发团队辛苦了,小程序开发者能发展这么快,因为站长你们这些巨人带来的巨人作品的肩膀上!
敏捷开发中有一个估算故事点规模的活动,使用的是德尔菲专家背对背的估算技术,每次大家都是使用卡片或者纸牌,或者写在纸上,最后同时亮牌,Scrum Master 在组织大家阐述各自的观点,最终确定一个合适的规模值,这个过程很有意思。但是也会有很多问题,比如,忘记拿牌了,纸牌不够了,找不到那张牌,以及最终确定合理值还需要人工计算等等。于是就产生了把这个活动做成了一个小程序的想法,最终经历PM,产品,策划,工程师,等角色的切换后,上线了计划扑克小程序。
涉及到的技术有:
大家在敏捷项目的运行过程中也可以尝试使用试试,使用中遇到任何问题都可以联系我,产品我会持续改进,越来越完善。预览图如下:
我本人开发过很多小程序,前端经验较为丰富。交流技术问题或者合作可以联系我:
云开发-博客小程序,感兴趣的了解一下
做了一个漫画应用紧密的使用和依赖云数据库(以及云函数),由于更新的漫画数据是在境外的服务器上,但对于国内的用户并不友好,也无法最大化利用CDN进行加速,所以做了如下优化,每次用户访问的时候会先使用云函数检查资源本地是否存在,如果没有的话会尝试将远端的漫画图片下载到本地再显示给用户,这样下次显示就可以使用本地资源了
const db = cloud.database(); // check whether we already saved const res = await db.collection("comics").where({ _id: event.num }).count(); if (res.total > 0) { // already have that comic in our database const r = await db.collection("comics").doc(event.num).get(); return r.data; } // otherwise we need to on-the-fly get that record from remote num = "/" + event.num; const url = "https://example.com" + num + "/info.json"; const res = await axios.get(url); const data = res.data; // download the image from remote await axios(data.img, { responseType: "arraybuffer" }).then(res => { // upload to storage return cloud.uploadFile({ cloudPath: "comics/" + data.num + ".png", fileContent: res.data }); }).then(res => { return cloud.getTempFileURL({ fileList: [{ fileID: res.fileID, maxAge: 24 * 60 * 60 // shall be forever }] }); }).then(res => { data.img = res.fileList[0].tempFileURL; }).catch(console.error).then(res => { return db.collection("comics").doc(data.num).set({ data: data }); }).then(console.log); return await data;
同时为了尽可能提高用户的体验,后台增加了一个云函数触发器,随机检查没有被用户点击过漫画,模拟用户点击,随机检查的方式如下(left outer join + sample)
const db = cloud.database(); const _ = db.command; return await db.collection("comic-index").aggregate().lookup({ from: "comics", localField: "num", foreignField: "num", as: "joinedNum" }).match({ "joinedNum.0": _.exists(false) }).sample({ size: 1 }).end() .then(res => { // visit this num const num = res.list[0].num; return cloud.callFunction({ name: "visit", data: { num: num } }); });
xkcd的同好可以在等编译的时候用用也是极好的
总的来说,云数据库+云函数大大简化了服务端的成本,一站式的解决方案便于快速验证概念、发布和测试