评论

云开发常用语句封装

更优雅地使用云函数

最近用云开发做砍价小程序,因为逐渐复杂起来,调用的数据也多起来,就对官方给的调用方式做了简单封装:

主要是对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,做成了同步。大部分时候)


最后一次编辑于  2020-12-04  
点赞 0
收藏
评论
登录 后发表内容