最近用云开发做砍价小程序,因为逐渐复杂起来,调用的数据也多起来,就对官方给的调用方式做了简单封装:
主要是对get 这个方法的封装:
原版官方示例,
db.collection('todos')
.where({
_openid: 'xxx', // 填入当前用户 openid
})
.skip(10) // 跳过结果集中的前 10 条,从第 11 条开始返回
.limit(10) // 限制返回数量为 10 条
.get()
.then(res => {
console.log(res.data)
})
.catch(err => {
console.error(err)
})
封装后,查询单条:
this.$get('todos', _id,)
查询多条,这里是我砍价小程序首页列表的获取函数,是不是看起来简单多了。配合页面定义的page,就能完成分页:
rules.filedData = {
title: true,
photo: true,
join_times:true,
}
rules.skip = page * 10
rules.orderBy = 'update_time'
let res = this.$get('todos','',rules)
除了 排序,只能根据一个字段排序以外,其他功能都实现了,封装代码如下,
let isRelease = true
isRelease = false // 发行版本 只需要注释这句话
let env = 'database-ia5bb'
if (isRelease) env = 'release-0gw7ka2u844c480b' // 发行后的环境,方便切换版本
wx.cloud.init({
env
})
const db = wx.cloud.database()
const _ = db.command
let collection = name => db.collection(name)
let errHandle = err => console.error(err)
// 封装的get
async get(collectionName, docID, rules = {}) {
if (arguments.length < 1) {
console.error('参数数量不足')
return
}
//let whereData = rules.whereData || {}
let whereData = rules.whereData || {
_id: _.exists(true)
}
let filedData = rules.filedData || {}
let skip = rules.skip || 0
let limit = rules.limit || 10
let orderBy = rules.orderBy || '_id'
let orderRule = rules.order || 'desc'
let result = null
if (docID) {
// 单条记录
await collection(collectionName).doc(docID).get()
.then(res => result = res)
.catch(errHandle)
} else {
await collection(collectionName)
.where(whereData)
.field(filedData)
.skip(skip)
.limit(limit)
.orderBy(orderBy ,orderRule)
.get()
.then(res => result = res)
.catch(errHandle)
}
return result
},
会传入一些不影响函数的默认值,因为如果不传会报错。使用时,传不都可以。最后,把函数绑定在this.$get 上即可。(注意这里用了async/await,做成了同步。大部分时候)