zoukankan      html  css  js  c++  java
  • 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()   这两个 方法:   

     

     

     

      

     

      

  • 相关阅读:
    POI实现Excel导入导出
    2017春季_京东_Java后端研发岗面经
    java中的IO流和多线程
    Java静态代理&动态代理&Cglib代理详解
    Java8新特性——stream流
    Java8新特性——接口默认方法
    Java8新特性——lambda函数式编程
    难题解决:Mycat数据库中间件+Mybatis批量插入数据并返回行记录的所有主键ID
    物料导出FreeMaker模板定义
    Mysql的MyISAM和InnoDB存储引擎的区别
  • 原文地址:https://www.cnblogs.com/zach0812/p/12305557.html
Copyright © 2011-2022 走看看