uniCloud云开发

uniCloud 是 DCloud 联合阿里云、腾讯云、支付宝云,为开发者提供的基于 serverless 模式和 js 编程的云开发平台。

普通云函数

callFuction方式云函数,也称之为普通云函数

uni-app的前端代码,不再执行uni.request联网,而是通过uniCloud.callFunction调用云函数。

callFunction方式避免了服务器提供域名,不暴露固定ip,减少被攻击的风险

uniCloud.callFunction

该方法需要一个json对象作为参数,其中包含两个字段

792b03ea33ef4f7f89528f6cdc1cc218.png

// promise方式
uniCloud.callFunction({
    name: 'hellocf',
    data: { a: 1 }
  })
  .then(res => {});

// callback方式
uniCloud.callFunction({
 name: 'hellocf',
 data: { a: 1 },
 success(){},
 fail(){},
 complete(){}
});

云函数的入参

客户端callFunction调用云函数时,云函数通过入参接收客户端数据,通过头信息上下文获取客户端信息,经过业务逻辑处理后给客户端返回结果

// 客户端调用云函数并传递参数
uniCloud.callFunction({
    name: 'hellocf',
    data: {a:1,b:2}
  })
  .then(res => {});
// hellocf云函数index.js入口文件代码
'use strict';
exports.main = async (event, context) => {
 //event为客户端上传的参数
 let c = event.a + event.b
 return {
  sum: c
 } // 通过return返回结果给客户端
}

云函数的传入参数有两个,一个是event对象,一个是context对象。

  • event指的是触发云函数的事件,当客户端调用云函数时,event就是客户端调用云函数时传入的参数
  • context对象包含了本次请求的上下文,包括客户端的ip,ua,appId等信息,以及云函数的环境情况,调用来源source等信息

event对象

vent对象,可以理解为客户端上行参数中的json对象。在使用uni-id且登录成功后,会自动多添加了一个uniIdToken属性。

可以通过 event.uniIdToken 获取 uni-id 的 token,如下:

'use strict';
exports.main = async (event, context) => {
  let token = event.uniIdToken // 客户端uni-id token
}

context对象

context对象的属性清单如下:

ba37fa9f9cc9468fbcd02d4e8c141257.png

云数据库

uniCloud提供了一个JSON格式的文档型数据库,顾名思义,数据库中的每一条记录都是一个JSON格式的文档,他是nosql非关系型数据库

d91d18eacaf34353be5d7401d1aa1bec.png

创建空表

 080eb97ee2c74b7dbda530df03f103f5.png

云函数通过传统方式操作数据库

获取集合的引用

‘use strict’
const db=uniCloud.database();//连接数据库
// 获取对`user`集合的引用
exports.main = async (event, context){
    // let res = await db.collection('users').get();
    // let res=await db.collection("users").count()
     let res=await db.collection("users").add({ // 单次插入
            name:'小红',
            gender:'女'
        })
     let res=await db.collection("users").add([{},{}])
    return res;
}

最后所return的东西就会被前端所接收到,从而渲染到页面上 

集合Collection

bda2369ef04745708c68741918e54017.png

添加小案例

 fe499a917feb4de086ac1b5d99540658.png

提交数据的时候要整成对象提交

doc操作可获得某id的详细信息,db.collection("users").doc("id").get()

db.command指令

5d2e5f965d684b4f9083f3df5a0efc37.png

'use strict';
const db=uniCloud.database()
const dbCmd = db.command;
exports.main = async (event, context) => {
	//event为客户端上传的参数
	// console.log('event : ', event)
	// let res=await db.collection('users').limit(5).skip(5).get()// 获取5个数据,过滤掉前5条数据,从第六条数据开始获取(skip())
	// let res=await db.collection('users').orderBy('_id','desc').get()// desc为倒序获取,asc为正序(默认)
	// let res=await db.collection('users').field({"name":true}).get()// 指定需要哪些字段,不可混用,只能明确说明用和不用
	let res = await db.collection('users').where({
		// age:dbCmd.eq(30)//等同于相等,查询数据库中年龄为30的数据
		age:dbCmd.gt(20).and(dbCmd.lt(40)) //大于20并且小于40
		age:dbCmd.and(gt(20),dbCmd.lt(40)) //大于20并且小于40
		age:dbCmd.or(lt(20),dbCmd.gt(40)) //大于40或者小于20
	})
	
	//返回数据给客户端
	
	return event
};

正则表达式查询

根据正则表达式进行筛选

'use strict';
const db=uniCloud.database()
const dbCmd = db.command;
exports.main = async (event, context) => {
	let {keyword} = event
	let res = await db.collection('users').where({
		name:new RegExp(keyword,"ig")
	})
	
	//返回数据给客户端
	
	return event
};

update更新数据库 

'use strict';
const db = uniCloud.database()
const dbCmd = db.command;
exports.main = async (event, context) => {
	//event为客户端上传的参数
	let res=await db.collection('users').where({
		_id:dbCmd.in(['id1','id2'])//批量进行修改
	}).update({
		// mail:'mail'
		tabs:{
			job:'歌手'
		}
	})
	
	//返回数据给客户端
	return event
};

给数组追加数据

使用command指令的方法,unshift,push,pop,shift

从第二个位置开始插入

给push里面传一个对象,包含插入的内容和要从哪里开始插入的索引

 

inc指令

更新指令,用于指示字段自增某个值,这是个原子操作,使用这个操作指令而不是先读数据,再加,再写回的好处是:

  1. 原子性:多个用户同时写,对数据库来说都是将字段加一,不会有后来者覆写前者的情况
  2. 减少一次请求:不需先读再写 
'use strict';
const db = uniCloud.database()
const dbCmd = db.command;
exports.main = async (event, context) => {
	//event为客户端上传的参数
	let res=await db.collection('users').where({
		_id:dbCmd.in('id1')//批量进行修改
	}).update({
		// mail:'mail'
		// tabs:{
		// 	job:'歌手'
		// }
		like:dbCmd.unshift(['篮球','演习']) //向前追加
		like:dbCmd.push(['打游戏']) //向前追加
		like:dbCmd.pop() // 删除末尾
		like:dbCmd.shift() // 删除开头
		love:dbCmd.inc(3)// 给该字段增加3
        like:dbCmd.push({
            each:["aaa","bbb"],
            position:1//从索引为1的地方开始插入
        })
	})
	
	//返回数据给客户端
	return event
};

set

覆写记录,会删除操作的记录中的所有字段,创建传入的字段,如果操作的记录不存在,会自动创建新的记录

b01b5681cc8c49bab7558f8588303031.png

set和update的区别:

set是直接覆盖原有的数据,而update只是修改传进去的字段的值

删除文档 

通过指定文档ID删除: collection.doc(_id).remove()(单次删除)

批量删除使用where(使用command指令)

const db=uniCloud.database();
const dbCmd=db.command;
exports.main=async (event,context)=> {
    return await db.collection("users").where({
        // name:'王五'
        _id:dbCmd.neq(-1) //删除数据库中所有数据
    }).remove()
}

删除文档中某个或者某些特殊的字段:通过$unset利用update将要删除的字段包裹起来,调用云函数或者本地运行云函数即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值