# Cloudbase **Repository Path**: ying_hao/Cloudbase ## Basic Information - **Project Name**: Cloudbase - **Description**: No description available - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-28 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### DAY4 - **将教程范例(意见反馈平台DEMO)中的管理端部分的列表加载变成实时数据库监听形式触发。** - 实时数据库 ``` function initlist(){ // cloud.callFunction({ // name: 'init-admin' // }) // .then((res) => { // refreshlist(res.result.list); // }); const db=cloud.database() const _ = db.command db.collection('advice').where({}).watch({ //建立监听 onChange:function(res){ //符合条件的文档有任何变化,都会触发 onChange 回调 console.log(res.docs) let list = res.docs.map(item=>{ item.adddue = new Date(item.adddue.$date); return item; }) refreshlist(list); }, onError:function(err){ console.log(err); } }); } ``` - **用户端列表加载云函数适配超过100条的场景,采用promise all的形式进行改造,使其可以支持超过100条** - 用户端promise all ``` const MAX_LIMIT = 100;//限制最大读取 exports.main = async (event, context) => { let res = {}; const auth = cloud.auth().getUserInfo(); const uid = auth.uid; const countResult = await db.collection('advice').count(); const total = countResult.total; //获得advice里有多少数据 const batchTimes = Math.ceil(total / 100); //总数除以100并向上取整 const tasks = [] for (let i = 0; i < batchTimes; i++) { //循环,skip跳过前面的,按照adddue(标准时间)降序取按 orderBy 排序之后的前 100 个 const promise = await db.collection('advice').skip(i * MAX_LIMIT).limit(MAX_LIMIT).orderBy('adddue', 'desc').get(); tasks.push(promise); //装起来 } res.list = (await Promise.all(tasks)).reduce((acc, cur) => { //数据拼接 return { data: acc.data.concat(cur.data), errMsg: acc.errMsg, } }).data; res.code = 0; return res; }; ``` **注意** - 需要创建两个数据库一个admin里面需要添加ID,IK(管理员账号),一个advice。 - 数据库权限需要设置 - 需要将自定义登录的秘钥下载,将key.json放到login云函数里 - 云函数login需要添加http触发路径/adminlogin - 需要安装依赖 ### DAY5: - **将教程范例的cloudtohttp函数使用sdk的getTempFileURL进行替换。** - 参考微信小程序getTempFileURL: - https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/storage/Cloud.getTempFileURL.html ``` async function cloudtohttp(src) { if(src==""){ return ""; } // let first=src.indexOf('.'); // let end=src.indexOf('/',first); // return 'https://'+src.slice(first+1,end)+'.tcb.qcloud.la/'+src.slice(end+1,src.length); let result = await cloud.getTempFileURL({ fileList: [src] }) .then(res=>{ console.log(res.fileList) return res }) return result.fileList[0].tempFileURL } ```