云开发:
什么是云开发:
按照正常的流程来说,如果我们想要是想一个能进行网络数据通信的微信小程序。比如:
那么我们不仅需要开发微信小程序,还需要开发一个服务器端程序来保存数据、保存文件、逻辑处理等。并且服务器端还需要专业的运维人员来运维,以防遭受攻击,因此需要的人力和资金成本非常大。而云开发技术就是专门为我们解决服务器端需求的,使用云开发,我们不用关心服务器端运维,数据库的管理,文件的管理等。只需要调用云开发给我们提供的API即可进行服务器端的操作,因此大大的提高了小程序开发的效率。
目前提供三大基础能力支持:
云函数:在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码
数据库:一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库
存储:在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理
总结:云开发基本囊括了 服务器端的绝大部分需求, 所以,如果小程序的逻辑不是很复杂的话,基本上都是可以用云开发技术实现的! 所以使用云开发可以大大加快后端的开发效率,
云开发 准备工作:
建完项目后,还需要在项目中开通云开发服务。
一: 云开发之 数据库:
创建好之后如下:
创建集合:
首先创建集合 要在 云开发控制台的数据库中 来创建(添加集合),
在云开发的数据库中,使用的是NoSQL
类型的数据库。
关系型数据库中的表,对应的是NoSQL
中的一个集合。
所以在所数据操作之前,应该先创建一个集合。
创建完集合后,也不需要跟关系型数据库一样,先定义好这个集合中的字段,而是直接插入数据,并且插入数据的时候,每条数据的字段无需保持一致!
创建集合后,就是插入记录了,每条记录的 字段无需保持一致,可以随时增加或删除,
例如:第一条记录:
第二条记录:
现在是已经将测试数据放入到数据库中了,那么如何获取到这些数据呢?
要操作数据库,首先要获取到数据库对象,
我们在代码中可以通过 wx.cloud.database(); 获取到数据库对象, 其中里面可以传入的参数是 环境的Id, 如果不传则为默认的环境,
获取到数据库对象之后,可以通过它的一个方法 .collection() 来指定,要操作那个集合(表),
然后就可以通过集合对象的方法 .get() 来获取结果,
01 通过代码添加数据:
使用方法为.add()
02 通过代码查询数据:
(每次必有 .get() )
03 通过代码删除数据:
删除多条数据 要学了 云函数之后再可以!
04 通过代码更新数据:
注: set是会覆盖原来的, update 是修改原来的内容,
更新指令:
给数据库中的数组进行添加 ,删除元素可以通过更新指令来完成,
Command 指令之 查询指令:
在做查询的时候,大部分情况都需要做一些条件查询。在云开发提供的API中,我们可以通过db.command来实现。
command.eq:
查询筛选条件,表示字段等于某个值。eq指令接受一个字面量 (literal),可以是number,boolean,string, object,array, Date。
二者的区别:( eq() 是条件更 苛刻 ! )
// 这种写法表示匹配 author.name == xxx 且 author.age== 18 (只要这两个属性相同即可)
db.collection('articles').where({
author: {
name: "xxx",
age: 18
}
})
// 这种写法表示 author 对象等于 { name:xxx,age:18} (必须是仅仅只有这两个属性 )
const _ = db.command
db.collection('articles').where({
author: _.eq({
name: "xxx",
age: 18
})
})
其他常用的查询指令:
Command 指令之 更新指令:
Inc是自增指令(increase)
inc 具有原子性,不会出现覆盖的情况,比传统方式 更安全 !
和数组相关:
云开发 高级查询:
排序的高级用法: 1,可以用点的方式指定 排序的字段 2,链式用法,排序之后,还可以接着进行排序,
如果一个记录没有要排序的字段,会把其单独放在 前面或后面,
skip常用于 翻页 的情况, 到第二页的时候,要跳过第一页的数据!!!
常常要结合 limit () 使用,
假设一页有两条数据:
为了用户更好的体验,一些不需要的字段,我们尽量不要提取! 只提取我们需要的字段~
注: id 每次必返回!
正则表达式: name中 包含 “tom”
Database.RegExp
构造正则表达式,仅需在普通 js 正则表达式无法满足的情况下使用
options 参数说明
options
支持 i, m, s 这三个 flag,注意 JavaScript 原生正则对象构造时仅支持其中的 i, m 两个 flag,因此需要使用到 s 这个 flag 时必须使用 db.RegExp
构造器构造正则对象。flag 的含义见下表:
flag | 说明 |
i | 大小写不敏感 |
m | 跨行匹配;让开始匹配符 |
s | 让 |
如果有多个选项可以直接 写在同一个字符串中,
注:正则表达式 不适用于长文本/ 大数据量文本匹配/搜索 , 因为会有性能问题,对此类场景 应使用文本搜索引擎 如 ElasticSearch 等实现!
二:云开发 之文件存储:
参考:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-client-api/storage/
它就相当于一个 百度网盘,
小程序·云开发提供了一系列存储操作 API,此处是存储小程序端的 API 参考文档。
API | 说明 |
上传文件 | |
下载文件 | |
删除文件 | |
换取临时链接 |
上传图片 到 云端:
上传成功之后:
然后,我们可以拿这个图片进行展示了:
三: 云开发 之云函数 :
node环境搭建:
因为云函数在服务器上实际上是运行在node.js环境中的,并且云函数是专门用来处理一些逻辑的,所以难免要用到一些第三方库,而云函数在编写的过程中,是需要先在本地写好,然后再进行提交到云服务器上。
因此我们本地也需要安装好一套node.js环境。
在安装node 环境之前要 先安装 nvm (Node Version Manager)
node 安装:
即安装完成,
使用nvm list 查看已经安装的版本,
使用安装的node
云函数 -- 初始化环境:
在以上文件夹中,右键->初始化环境即可。
云函数 -- 创建云函数:
上传 和 部署:
在本地创建完云函数后,还只是在本地,所以还需要上传到服务器和部署。上传和部署非常简单,我们只需要在相应的函数的文件夹上,右键->上传并部署:云端安装依赖即可。
使用云函数:
云函数中 操作数据库:
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/init/server.init.html
init
在云函数中使用 wx-server-sdk
,需先调用初始化方法 init
一次,init 用于设置接下来在该云函数实例中调用云函数、数据库、文件存储时要访问的环境。
init
方法的定义如下:
function init(options): void
init
方法接受一个可选的 options 参数
,方法没有返回值。
options
参数定义了云开发的默认配置,该配置会作为之后调用其他所有云 API 的默认配置,options
提供的可选配置如下:
字段 | 数据类型 | 必填 | 默认值 | 说明 |
env | string | object | 是 | | 后续 API 调用的默认环境配置,传入字符串形式的环境 ID 或传入 cloud.DYNAMIC_CURRENT_ENV 可以指定所有服务的默认环境,传入对象可以分别指定各个服务的默认环境,见下方详细定义 |
timeout | number | 否 | 15000 | API 超时时间设置,默认 15 秒,从 1.7.0 开始支持 |
当 env
传入参数为对象时,可以指定各个服务的默认环境,可选字段如下:
字段 | 数据类型 | 必填 | 默认值 | 说明 |
database | string | 否 | default | 数据库 API 默认环境配置 |
storage | string | 否 | default | 存储 API 默认环境配置 |
functions | string | 否 | default | 云函数 API 默认环境配置 |
default | string | 否 | 空 | 缺省时 API 默认环境配置 |
具体如何使用数据库:
小程序端 和 云函数(服务端) API的不同:
1,服务端的API仅支持Promise风格调用,即不再接受回调(success,fail,complete),统一返回promise 对象 。
2,服务端API可以进行批量的update和remove操作。
3,服务端独有API 如:创建集合的API(db.createCollection )
创建云函数:
云函数中可以对数据库进行批量操作,而不是像 小程序端 只能操作一条数据,
云函数中 发送HTTP请求 :
云函数里是没有 wx.request() 函数的, 这个时候就要借助 node.js 的一个包,
先要安装好 nvm npm ,然后使用npm install request-promise 安装 request-promise
之后,云函数中的.js代码如下:
云函数中 违规内容 检测案例:
云函数中 图片鉴黄案例:
js中 将对象 互转 符合json的字符串:
使用JSON.stringify() 和 JSON.parse() 这两个 方法: