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.breturn {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并且小于40age:dbCmd.and(gt(20),dbCmd.lt(40)) //大于20并且小于40age: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} = eventlet 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)// 给该字段增加3like: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将要删除的字段包裹起来,调用云函数或者本地运行云函数即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479203.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

org.apache.log4j的日志记录级别和基础使用Demo

org.apache.log4j的日志记录级别和基础使用Demo,本次案例展示,使用是的maven项目,搭建的一个简单的爬虫案例。里面采用了大家熟悉的日志记录插件,log4j。来自apache公司的开源插件。 package com.qian.test;import org.apache.log…

day05(单片机高级)PCB基础

目录 PCB基础 什么是PCB?PCB的作用? PCB的制作过程 PCB板的层数 PCB设计软件 安装立创EDA PCB基础 什么是PCB?PCB的作用? PCB(Printed Circuit Board),中文名称为印制电路板,又称印刷…

fastjson不出网打法—BCEL链

前言 众所周知fastjson公开的就三条链,一个是TemplatesImpl链,但是要求太苛刻了,JNDI的话需要服务器出网才行,BCEL链就是专门应对不出网的情况。 实验环境 fastjson1.2.4 jdk8u91 dbcp 9.0.20 什么是BCEL BCEL的全名应该是…

C#基础控制台程序

11.有一个54的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。 12.从键盘输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。 13.输入一个数,判断它是奇数还是偶数,如果…

深度学习干货总结(持续更新)

机器学习核心组件 可以用来学习的数据(data); 如何转换数据的模型(model); 一个目标函数(objective function),用来量化模型的有效性; 调整模型参数以优化…

腾讯云OCR车牌识别实践:从图片上传到车牌识别

在当今智能化和自动化的浪潮中,车牌识别(LPR)技术已经广泛应用于交通管理、智能停车、自动收费等多个场景。腾讯云OCR车牌识别服务凭借其高效、精准的识别能力,为开发者提供了强大的技术支持。本文将介绍如何利用腾讯云OCR车牌识别…

如何制作项目网页

一、背景 许多论文里经常会有这样一句话Supplementary material can be found at https://hri-eu.github.io/Lami/,这个就是将论文中的内容或者补充视频放到一个网页上,以更好的展示他们的工作。因此,这里介绍下如何使用前人提供的模板制作我…

goframe开发一个企业网站 在vue-next-admin 显示验证码 19

index.go 文件中的代码,我将为该文件中的主要功能和方法添加注释,并生成一篇 Markdown 格式的文章。这将包括对每个函数的用途、输入参数和返回值的简要说明。 index.go 包和导入 package adminimport ("context""errors""gf…

Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?

大家好,我是锋哥。今天分享关于【Elasticsearch中的节点(比如共20个),其中的10个选了一个master,另外10个选了另一个master,怎么办?】面试题。希望对大家有帮助; Elasticsearch中的节…

Scrapy图解工作流程-cnblog

1.1 介绍部分: 文字提到常用的Web框架有Django和Flask,接下来将学习一个全球范围内流行的爬虫框架Scrapy。 1.2 内容部分: Scrapy的概念、作用和工作流程 Scrapy的入门使用 Scrapy构造并发送请求 Scrapy模拟登陆 Scrapy管道的使用 Scrapy中…

SpringCloud入门实战-Nacos简介、安装、运行详解

❤️ 《SpringCloud入门实战系列》解锁SpringCloud主流组件入门应用及关键特性。带你了解SpringCloud主流组件,是如何一战解决微服务诸多难题的。项目demo:源码地址 ❤️ 作者:一只IT攻城狮。关注我,不迷路。 ❤️ 再小的收获x365天都会成就…

量子安全与经典密码学:一些现实方面的讨论

量子安全与经典密码学 背景:量子安全与经典密码学量子计算对传统密码学的威胁 安全性分析经典密码学的数学复杂性假设**量子密码学的物理不可克隆性假设** **性能与实现难度**后量子算法在经典计算机上的运行效率**量子通信设备的技术要求与成本** **可扩展性与适用…

Ubuntu20.04运行msckf_vio

文章目录 环境配置修改编译项目运行MSCKF_VIO运行 Launch 文件运行 rviz播放 ROSBAG 数据集 运行结果修改mskcf 保存轨迹EVO轨迹评价EVO轨迹评估流程实操先把euroc的真值转换为tum,保存为data.tum正式评估 报错1问题描述 报错2问题描述问题分析问题解决 参考 环境配…

vscode下面python调试报错ImportError: cannot import name ‘Literal‘ from ‘typing‘

1 问题描述 我在vscode下面编写python程序,这个程序是在一个英伟达anoconda环境下的项目。之前能运行能调试,最近发现只能运行ctlf5,但是使用f5进行调试时,报错“File “c:\Users\86137.vscode\extensions\ms-python.debugpy-202…

vim 分割窗口后,把状态栏给隐藏

一、基本环境 主机MacOs Sonoma 14.7主机终端Iterm2虚拟机Parallels Desktop 20 for Mac Pro Edition 版本 20.0.1 (55659)虚拟机-操作系统Ubuntu 22.04 最小安装 二、分割窗口后的截图,红色线条部分就是状态栏 分割后个布局是:顶部1行高度窗口&#x…

flink学习(7)——window

概述 窗口的长度(大小): 决定了要计算最近多长时间的数据 窗口的间隔: 决定了每隔多久计算一次 举例:每隔10min,计算最近24h的热搜词,24小时是长度,每隔10分钟是间隔。 窗口的分类 1、根据window前是否调用keyBy分为键控窗口和非键控窗口…

【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测

简介:介绍 TM-16多线激光雷达 在8210A载板,TX2核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX2里已经安装了ROS版本:Melodic。 大家好,…

【排版教程】Word、WPS 分节符(奇数页等) 自动变成 分节符(下一页) 解决办法

毕业设计排版时,一般要求每章节的起始页为奇数页,空白页不显示页眉和页脚。具体做法如下: 1 Word 在一个章节的内容完成后,在【布局】中,点击【分隔符】,然后选择【奇数页】 这样在下一章节开始的时&…

【GAMES101笔记速查——Lecture 20 Color and Perception】

颜色与感知 目录 1 光场(Light Field / Lumigraph) 1.1 全光函数 1.1.1 改进:引入波长 1.1.2 改进:添加时间t 1.1.3 改进:人可以移动,添加空间坐标 1.1.4 改进:不把函数当电影来看。 1.…

HTML5和CSS3新增特性

HTML5的新特性 HTML5新增的语义化标签 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量…