内容简介:小程序·云开发是小程序的一种后端开发模式,能够帮助开发者快速构建微信小程序的后端服务,无需再搭建服务器。然而熟悉云开发的开发者应该了解,即使云开发能基本满足小程序开发需求,但在数据获取上还是有所限制。为了防止误操作以及保护小程序体验,开发者是需要避免一次性获取过量的数据,只获取必要的数据,所以
小程序·云开发是小程序的一种后端开发模式,能够帮助开发者快速构建微信小程序的后端服务,无需再搭建服务器。
然而熟悉云开发的开发者应该了解,即使云开发能基本满足小程序开发需求,但在数据获取上还是有所限制。
为了防止误操作以及保护小程序体验,开发者是需要避免一次性获取过量的数据,只获取必要的数据,所以 服务器一次默认并且最多返回 20 条记录。 但对于有数据大量获取需求的开发者来说,只能放弃云开发吗?答案是no。
微信团队之前在云课程上就已经分享了打破数据库列表限制的2种方法, 通过云函数最多可获得100条数据。
这次的方法分享是以音乐播放器小程序为实例,通过云函数调用云数据库,实现用户上传音乐的功能。
音乐播放器的核心功能是播放歌曲,也就是需要它能够获取数据库所存储的歌曲信息,然后传到小程序端,去实现播放器的播放、暂停、切换。
01 上传歌曲信息至云数据库
歌曲信息包括id、歌曲名、歌手、封面、音频文件等。
playlist: [{
_id: '',
cover: '',
singer: '',
title: '',
src: ''
}],
02 利用云函数获取数据列表
getlist(){
let that = this;
wx.cloud.callFunction({
name: ’getmlist’,//自己的云函数名称
success: res=>{
wx.stopPullDownRefresh()
if(res.result){
let playlist = res.result.data
console.log({
playlist
})
if(playlist = undefined playlist.length == 0){
wx.showToast({
title: ’no data’,
})
}else{
that.setData({
isShowArtcle: true,
playlist: playlist,
})
}
}
},
fail:err => {
wx.stopPullDownRefresh()
wx.showToast({
title: ’no data’,
})
}
})
}
然而目前的做法只能获取20条数据,也不能支持用户上传音乐文件并正常加载播放。为了实现这一功能,需要我们设置云函数,调用云数据库,从而打破数据限制。
方法1:分页获取数据
这个方法是将数据分为若干页,用户可以通过选择页数去获取更多的数据。这也就需要指定skip,设置分页,从第 0 条记录开始取。假设一页 10 条,现在要取第 2 页,则可以指定 skip 10 条记录。
代码示例如下:
//云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
//云函数入口函数
exports.main = async (event, context) => {
const db = cloud.database()
db.collection('musiclist')
.where({
// 填入当前用户 openid
_openid: 'xxx',
})
//假设一页有10条数据
.skip(10)
.limit(10)
.get()
.then(res => {
console.log(res.data)
})
.catch(err => {
console.error(err)
})
}
方法2:获取所有数据
这个方法是用户可以直接获取所有数据,但因为默认limit100条,可能一个请求无法取出所有数据,所以需要分批次获取,将集合中的所有歌曲信息获取出来。
代码示例如下:
//云函数入口文件
const cloud = require('wx-server-sdk')
const db = wx.cloud.database()
cloud.init()
//云函数入口函数
exports.main = async (event, context) => {
getall:async(){
const db = wx.cloud.database
const Max_limit = 100
// 先取出集合记录总数
const countResult = await db.collection('musiclist').count()
const total = countResult.total
// 计算需分几次取
const batchTimes = Math.ceil(total / Max_limit)
const tasks = []
for(let i = 0; i < batchTimes; i++) {
const promise = db.collection('musiclist').skip(i * Max_limit).limit(Max_limit).get()
tasks.push(promise)
}
// 等待所有
return (await Promise.all(tasks)).reduce((acc, cur) => {
data: acc.data.concat(cur.data),
errMsg: acc.errMsg,
})))
}
}
这两类方法, 本质上是多次通过云函数获取数据,最终成功获取所有集合数据。
因为云函数端属于管理端,所以它可以统计所有集合的记录数。同时云函数之间也可互相调用,还能通过云函数后端 SDK 搭配使用多种服务,在数据获取上有着一定的优势。当大家在使用云开发时,不妨多利用云函数进行数据库和存储的操作。
互动福利
扫码关注公众号,回复关键词『 音乐 』,就能获取本次实例音乐播放器的 源码包 。
以上所述就是小编给大家介绍的《码code | 巧用2种方法,打破20条云开发数据库限制》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 打破 iframe 安全限制的 3 种方案
- 建设智慧城市要打破数据孤岛
- 打破数据黑洞 数字工厂走向闭环
- ios – 阻止递归和打破保留周期
- 通过内存转储打破Linux全盘加密保护
- 打破认知:程序设计 = 算法 + 数据结构?
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Probability and Computing
Michael Mitzenmacher、Eli Upfal / Cambridge University Press / 2005-01-31 / USD 66.00
Assuming only an elementary background in discrete mathematics, this textbook is an excellent introduction to the probabilistic techniques and paradigms used in the development of probabilistic algori......一起来看看 《Probability and Computing》 这本书的介绍吧!