云开发:

什么是云开发:

按照正常的流程来说,如果我们想要是想一个能进行网络数据通信的微信小程序。比如:

android 云应用 开发 云应用开发技术_API

 

那么我们不仅需要开发微信小程序,还需要开发一个服务器端程序来保存数据、保存文件、逻辑处理等。并且服务器端还需要专业的运维人员来运维,以防遭受攻击,因此需要的人力和资金成本非常大。而云开发技术就是专门为我们解决服务器端需求的,使用云开发,我们不用关心服务器端运维,数据库的管理,文件的管理等。只需要调用云开发给我们提供的API即可进行服务器端的操作,因此大大的提高了小程序开发的效率。

目前提供三大基础能力支持:

云函数:在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码
数据库:一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库
存储:在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理

 

总结:云开发基本囊括了 服务器端的绝大部分需求, 所以,如果小程序的逻辑不是很复杂的话,基本上都是可以用云开发技术实现的!  所以使用云开发可以大大加快后端的开发效率,   

 

云开发 准备工作:

建完项目后,还需要在项目中开通云开发服务。

一: 云开发之 数据库:

android 云应用 开发 云应用开发技术_字段_02

 

android 云应用 开发 云应用开发技术_API_03

 

 

android 云应用 开发 云应用开发技术_字段_04

 

创建好之后如下:

android 云应用 开发 云应用开发技术_API_05

 

创建集合:  

android 云应用 开发 云应用开发技术_数据库_06

首先创建集合 要在 云开发控制台的数据库中 来创建(添加集合),  

 

在云开发的数据库中,使用的是NoSQL类型的数据库。

关系型数据库中的,对应的是NoSQL中的一个集合

所以在所数据操作之前,应该先创建一个集合。

创建完集合后,也不需要跟关系型数据库一样,先定义好这个集合中的字段,而是直接插入数据,并且插入数据的时候,每条数据的字段无需保持一致

 

创建集合后,就是插入记录了,每条记录的 字段无需保持一致,可以随时增加或删除,  

例如:第一条记录:

android 云应用 开发 云应用开发技术_android 云应用 开发_07

 

 第二条记录: 

 

android 云应用 开发 云应用开发技术_android 云应用 开发_08

 

 

 

现在是已经将测试数据放入到数据库中了,那么如何获取到这些数据呢?

要操作数据库,首先要获取到数据库对象,   

我们在代码中可以通过 wx.cloud.database();  获取到数据库对象,  其中里面可以传入的参数是 环境的Id, 如果不传则为默认的环境,  

获取到数据库对象之后,可以通过它的一个方法 .collection()  来指定,要操作那个集合(表),

然后就可以通过集合对象的方法  .get() 来获取结果,

android 云应用 开发 云应用开发技术_数据库_09

 

01 通过代码添加数据:  

使用方法为.add()  

android 云应用 开发 云应用开发技术_数据库_10

02 通过代码查询数据:

(每次必有 .get()      )

03 通过代码删除数据:  

android 云应用 开发 云应用开发技术_android 云应用 开发_11

 

删除多条数据 要学了 云函数之后再可以!   

04 通过代码更新数据:  

android 云应用 开发 云应用开发技术_android 云应用 开发_12

 

注: set是会覆盖原来的, update 是修改原来的内容,  

更新指令: 

给数据库中的数组进行添加 ,删除元素可以通过更新指令来完成, 

android 云应用 开发 云应用开发技术_字段_13

 

 

Command 指令之  查询指令:  

在做查询的时候,大部分情况都需要做一些条件查询。在云开发提供的API中,我们可以通过db.command来实现。

command.eq:

查询筛选条件,表示字段等于某个值。eq指令接受一个字面量 (literal),可以是number,boolean,string, object,array, Date。

android 云应用 开发 云应用开发技术_API_14

 

android 云应用 开发 云应用开发技术_数据库_15

 

 

 

二者的区别:(   eq() 是条件更 苛刻 !      )

android 云应用 开发 云应用开发技术_android 云应用 开发_16

// 这种写法表示匹配 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
    })
})

 

其他常用的查询指令: 

android 云应用 开发 云应用开发技术_API_17

 

 

android 云应用 开发 云应用开发技术_android 云应用 开发_18

 

android 云应用 开发 云应用开发技术_字段_19

 

android 云应用 开发 云应用开发技术_字段_20

Command 指令之  更新指令:  

android 云应用 开发 云应用开发技术_数据库_21

 

android 云应用 开发 云应用开发技术_字段_22

 

android 云应用 开发 云应用开发技术_API_23

 

 

android 云应用 开发 云应用开发技术_android 云应用 开发_24

 

Inc是自增指令(increase

inc 具有原子性,不会出现覆盖的情况,比传统方式 更安全 !  

android 云应用 开发 云应用开发技术_字段_25

 

 

和数组相关:

android 云应用 开发 云应用开发技术_字段_26

 

云开发 高级查询: 

android 云应用 开发 云应用开发技术_android 云应用 开发_27

 

排序的高级用法: 1,可以用点的方式指定 排序的字段   2,链式用法,排序之后,还可以接着进行排序,  

如果一个记录没有要排序的字段,会把其单独放在 前面或后面,   

 

android 云应用 开发 云应用开发技术_android 云应用 开发_28

 

skip常用于 翻页 的情况, 到第二页的时候,要跳过第一页的数据!!!  

常常要结合 limit () 使用,

假设一页有两条数据:  

android 云应用 开发 云应用开发技术_数据库_29

 

 

android 云应用 开发 云应用开发技术_android 云应用 开发_30

 

为了用户更好的体验,一些不需要的字段,我们尽量不要提取! 只提取我们需要的字段~   

注: id 每次必返回!  

 

android 云应用 开发 云应用开发技术_字段_31

 

android 云应用 开发 云应用开发技术_android 云应用 开发_32

android 云应用 开发 云应用开发技术_android 云应用 开发_33

 

正则表达式:  name中 包含 “tom”

 

 

官方文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/Database.RegExp.html 

Database.RegExp

构造正则表达式,仅需在普通 js 正则表达式无法满足的情况下使用

options 参数说明

options 支持 i, m, s 这三个 flag,注意 JavaScript 原生正则对象构造时仅支持其中的 i, m 两个 flag,因此需要使用到 s 这个 flag 时必须使用 db.RegExp 构造器构造正则对象。flag 的含义见下表:

flag

 说明

i

大小写不敏感

m

跨行匹配;让开始匹配符 ^ 或结束匹配符 $ 时除了匹配字符串的开头和结尾外,还匹配行的开头和结尾

s

让 . 可以匹配包括换行符在内的所有字符(普通  js 正则无法满足  )

 

如果有多个选项可以直接 写在同一个字符串中,  

 

注:正则表达式 不适用于长文本/ 大数据量文本匹配/搜索 , 因为会有性能问题,对此类场景 应使用文本搜索引擎  如 ElasticSearch 等实现! 

 

二:云开发 之文件存储:  

参考:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-client-api/storage/

它就相当于一个 百度网盘,

小程序·云开发提供了一系列存储操作 API,此处是存储小程序端的 API 参考文档。

API

说明

uploadFile

上传文件

downloadFile

下载文件

deleteFile

删除文件

getTempFileURL

换取临时链接

 

上传图片  到 云端: 

android 云应用 开发 云应用开发技术_android 云应用 开发_34

 

android 云应用 开发 云应用开发技术_数据库_35

 

上传成功之后: 

android 云应用 开发 云应用开发技术_数据库_36

 

然后,我们可以拿这个图片进行展示了:

android 云应用 开发 云应用开发技术_API_37

 

 

三: 云开发 之云函数 :  

node环境搭建:  

因为云函数在服务器上实际上是运行在node.js环境中的,并且云函数是专门用来处理一些逻辑的,所以难免要用到一些第三方库,而云函数在编写的过程中,是需要先在本地写好,然后再进行提交到云服务器上。

因此我们本地也需要安装好一套node.js环境

 

在安装node 环境之前要 先安装 nvm (Node Version Manager)

android 云应用 开发 云应用开发技术_android 云应用 开发_38

 

 

 

node 安装:  

android 云应用 开发 云应用开发技术_android 云应用 开发_39

 

 

android 云应用 开发 云应用开发技术_API_40

 

 

即安装完成,  

使用nvm list  查看已经安装的版本,  

android 云应用 开发 云应用开发技术_android 云应用 开发_41

 

 

 

使用安装的node   

android 云应用 开发 云应用开发技术_字段_42

 

 

 

云函数 --  初始化环境:  

 

android 云应用 开发 云应用开发技术_数据库_43

 

 

在以上文件夹中,右键->初始化环境即可。

云函数 --  创建云函数:

 

上传 和 部署: 

在本地创建完云函数后,还只是在本地,所以还需要上传到服务器和部署。上传和部署非常简单,我们只需要在相应的函数的文件夹上,右键->上传并部署:云端安装依赖即可。

使用云函数: 

android 云应用 开发 云应用开发技术_数据库_44

 

 

 

android 云应用 开发 云应用开发技术_数据库_45

 

云函数中 操作数据库:

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 默认环境配置

 

 

android 云应用 开发 云应用开发技术_数据库_46

 

 

 

具体如何使用数据库:

android 云应用 开发 云应用开发技术_数据库_47

 

 

 

小程序端 和 云函数(服务端)  API的不同:

1,服务端的API仅支持Promise风格调用,即不再接受回调(success,fail,complete),统一返回promise 对象 。
2,服务端API可以进行批量的update和remove操作。

3,服务端独有API 如:创建集合的API(db.createCollection   )

 

 

创建云函数:

android 云应用 开发 云应用开发技术_API_48

 

 

 

android 云应用 开发 云应用开发技术_android 云应用 开发_49

 

android 云应用 开发 云应用开发技术_android 云应用 开发_50

 

 

云函数中可以对数据库进行批量操作,而不是像 小程序端 只能操作一条数据,  

 

 

云函数中 发送HTTP请求 :

云函数里是没有 wx.request() 函数的,  这个时候就要借助 node.js 的一个包,  

先要安装好 nvm npm  ,然后使用npm install request-promise 安装 request-promise  

之后,云函数中的.js代码如下: 

android 云应用 开发 云应用开发技术_字段_51

 

android 云应用 开发 云应用开发技术_数据库_52

 

云函数中 违规内容 检测案例

 

云函数中 图片鉴黄案例:

 

 

js中 将对象   互转  符合json的字符串:

使用JSON.stringify()   和 JSON.parse()   这两个 方法:   

android 云应用 开发 云应用开发技术_android 云应用 开发_53