09 云开发技术

云开发:

什么是云开发:

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

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

官方文档: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 换取临时链接

上传图片  到 云端: 

上传成功之后: 

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

三: 云开发 之云函数 :  

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 --save 安装 request-promise  

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

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

云函数中 图片鉴黄案例:

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

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

 

 

 

  

 

  

原文地址:https://www.cnblogs.com/zach0812/p/12305557.html