• 微信小程序云开发


     什么是云开发?

    云开发是由腾讯云联合微信团队为开发者提供的 包含 云函数、云数据库和云文件存储能力的后端云服务

    云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现快速上线和迭代,同时这一能力,同开发者已经使用的云服务相互兼容,并不互斥。

    云开发提供了哪些能力?

    • 代码执行——云函数:在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码。云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。

    • 数据库能力——数据库:一个既可在小程序前端操作,也能在云函数中读写的 JSON 数据库

    • 文件存储能力——存储:在小程序前端直接上传/下载云端文件,在云开发控制台可视化管理

    数据库能力解读:

    云开发提供的数据库是一个具备了完整的增删改查能力的JSON数据库,数据库中的每条记录都是json格式

    数据库 API 分为小程序端和服务端两部分,小程序端 API 拥有严格的调用权限控制,开发者可在小程序内直接调用 API 进行非敏感数据的操作。对于有更高安全要求的数据,可在云函数内通过服务端 API 进行操作。云函数的环境是与客户端完全隔离的,在云函数上可以私密且安全的操作数据库。

    数据库 API 包含增删改查的能力,使用 API 操作数据库只需三步:获取数据库引用、构造查询/更新条件、发出请求。以下是一个在小程序中查询数据库的发表于美国的图书记录的例子:

    // 1. 获取数据库引用
    const db = wx.cloud.database()
    // 2. 构造查询语句
    // collection 方法获取一个集合的引用
    // where 方法传入一个对象,数据库返回集合中字段等于指定值的 JSON 文档。API 也支持高级的查询条件(比如大于、小于、in 等),具体见文档查看支持列表
    // get 方法会触发网络请求,往数据库取数据
    db.collection('books').where({
      publishInfo: {
        country: 'United States'
      }
    }).get({
      success(res) {
      // 输出 [{ "title": "The Catcher in the Rye", ... }]
        console.log(res)
      }
    })

    文件储存能力解读:

    云开发提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云存储功能。

    在小程序端可以分别调用 wx.cloud.uploadFile 和 wx.cloud.downloadFile 完成上传和下载云文件操作。

    云函数能力解读:

    云函数为用户提供了在云端运行一段代码的能力,开发者无需管理服务器,就可以执行业务逻辑

    云函数目前仅支持Node.js环境

    云开发控制台

    云开发控制台是管理云开发资源的地方,控制台提供以下能力:

    • 概览:查看云开发基础使用数据
    • 用户管理:查看小程序用户信息
    • 数据库:管理数据库,可查看、增加、更新、查找、删除数据、管理索引、管理数据库访问权限等
    • 存储管理:查看和管理存储空间
    • 云函数:查看云函数列表、配置、日志和监控
    • 统计分析:查看云开发资源具体使用统计信息

    资源环境

    一个环境对应一整套独立的云开发资源,包括数据库、存储空间、云函数等。各个环境间是相互独立的,用户开通云开发后初始默认可拥有最多两个环境。

    开发指引

    1、初始化

    在小程序端开始使用云能力前,需先调用 wx.cloud.init 方法完成云能力初始化

    wx.cloud.init 方法接受一个可选的 options 参数,方法没有返回值。

    options 参数定义了云开发的默认配置,该配置会作为之后调用其他所有云 API 的默认配置,options 提供的可选配置如下:

    字段数据类型必填默认值说明
    env string | object default 默认环境配置,传入字符串形式的环境 ID 可以指定所有服务的默认环境,传入对象可以分别指定各个服务的默认环境,见下方详细定义
    traceUser boolean false 是否在将用户访问记录到用户管理中,在控制台中可见

    2、数据库

    (1)在开始使用数据库 API 进行增删改查操作之前,需要先获取数据库的引用。以下调用获取默认环境的数据库的引用:

    const db = wx.cloud.database()

    (2)要操作一个集合,需先获取它的引用。在获取了数据库的引用后,就可以通过数据库引用上的 collection 方法获取一个集合的引用了,比如获取待办事项清单集合:

    const todos = db.collection('todos')

    我们可以通过此引用在该集合上进行增删查改的操作,除此之外,还可以通过集合上的 doc 方法来获取集合中一个指定 ID 的记录的引用。同理,记录的引用可以用于对特定记录进行更新和删除操作。

    假设我们有一个待办事项的 ID 为 todo-identifiant-aleatoire,那么我们可以通过 doc 方法获取它的引用:

    const todo = db.collection('todos').doc('todo-identifiant-aleatoire')

    (3)插入数据:可以通过在集合对象上调用 add 方法往集合中插入一条记录。还是用待办事项清单的例子,比如我们想新增一个待办事项:

    db.collection('todos').add({
      // data 字段表示需新增的 JSON 数据
      data: {
        // _id: 'todo-identifiant-aleatoire', // 可选自定义 _id,在此处场景下用数据库自动分配的就可以了
        description: 'learn cloud database',
        due: new Date('2018-09-01'),
        tags: [
          'cloud',
          'database'
        ],
        // 为待办事项添加一个地理位置(113°E,23°N)
        location: new db.Geo.Point(113, 23),
        done: false
      },
      success(res) {
        // res 是一个对象,其中有 _id 字段标记刚创建的记录的 id
        console.log(res)
      }
    })

    (4)读取数据:在记录和集合上都有提供 get 方法用于获取单个记录或集合中多个记录的数据。

    假设我们已有一个 ID 为 todo-identifiant-aleatoire 的在集合 todos 上的记录,那么我们可以通过在该记录的引用调用 get 方法获取这个待办事项的数据:

    db.collection('todos').doc('todo-identifiant-aleatoire').get({
      success(res) {
        // res.data 包含该记录的数据
        console.log(res.data)
      }
    })

    通过调用集合上的 where 方法可以指定查询条件,再调用 get 方法即可只返回满足指定查询条件的记录

    (5)更新数据:

    更新数据主要有两个方法:

    update——局部更新一个或多个记录,即只有指定的字段会更新,其他字段不会受到影响

    set——替换更新一个记录,即用传入的对象替换指定的记录

    使用 update 方法可以局部更新一个记录或一个集合中的记录,局部更新意味着只有指定的字段会得到更新,其他字段不受影响。

    比如我们可以用以下代码将一个待办事项置为已完成:

    db.collection('todos').doc('todo-identifiant-aleatoire').update({
      // data 传入需要局部更新的数据
      data: {
        // 表示将 done 字段置为 true
        done: true
      },
      success(res) {
        console.log(res.data)
      }
    })

    如果需要替换更新一条记录,可以在记录上使用 set 方法,替换更新意味着用传入的对象替换指定的记录

    const _ = db.command
    db.collection('todos').doc('todo-identifiant-aleatoire').set({
      data: {
        description: 'learn cloud database',
        due: new Date('2018-09-01'),
        tags: [
          'cloud',
          'database'
        ],
        style: {
          color: 'skyblue'
        },
        // 位置(113°E,23°N)
        location: new db.Geo.Point(113, 23),
        done: false
      },
      success(res) {
        console.log(res.data)
      }
    })

    (6)删除数据:对记录使用 remove 方法可以删除该条记录

    对记录使用 remove 方法可以删除该条记录,比如:

    db.collection('todos').doc('todo-identifiant-aleatoire').remove({
      success(res) {
        console.log(res.data)
      }
    })

    注意:批量更新和删除要求必须在云端完成,即,操作必须要写在云函数里

    3、云函数

    云函数即在云端(服务器端)运行的函数。无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。

    一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。当云函数被小程序端调用时,定义的代码会被放在 Node.js 运行环境中执行。我们可以如在 Node.js 环境中使用 JavaScript 一样在云函数中进行网络请求等操作,而且我们还可以通过云函数后端 SDK 搭配使用多种服务,比如使用云函数 SDK 中提供的数据库和存储 API 进行数据库和存储的操作

    (1)在项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,指定本地已存在的目录作为云函数的本地根目录

    示例:

    {
      "cloudfunctionRoot": "./functions/"
    }
    完成指定之后,云函数的根目录的图标会变成 “云目录图标”,云函数根目录下的第一级目录(云函数目录)是与云函数名字相同的,如果对应的线上环境存在该云函数,则我们会用一个特殊的 “云图标” 标明
    云函数中使用 wx-server-sdk 需在对应云函数目录下安装 wx-server-sdk 依赖,在创建云函数时会在云函数目录下默认新建一个 package.json 并提示用户是否立即本地安装依赖。

    (2)云函数的index.js为入口文件,新创建的云函数,该文件会自动有一个模板

    // 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    cloud.init()
    
    // 云函数入口函数
    exports.main = async (event, context) => {
      const wxContext = cloud.getWXContext()
    
      return {
        event,
        openid: wxContext.OPENID,
        appid: wxContext.APPID,
        unionid: wxContext.UNIONID,
      }
    }

    (3)部署到云端的函数可以在小程序中调用云函数

    wx.cloud.callFunction({
      // 云函数名称
      name: 'add',
      // 传给云函数的参数
      data: {
        a: 1,
        b: 2,
      },
      success(res) {
        console.log(res.result.sum) // 3
      },
      fail: console.error
    })

     小程序延展

    1、云开发与serverless

    什么是serverless?

    • 无服务器
    • 不需要维护服务器
    • 不管有多少服务器
    • 服务器由服务器提供商来维护
    • 需要使用分布式应用设计来适配serverless架构

    云开发是serverless的一种

    2、服务端API与小程序端API的异同

    • 服务端API仅支持promise风格,小程序端可以使用promise风格和callback回调风格
    • 服务端API可以进行批量的update和remove
    • 云函数能够与微信鉴权进行无缝整合,从小程序端调用云函数时,云函数的第一个参数event会被注入一个userInfo对象,其中含有openId和appId字段
  • 相关阅读:
    算法
    算法
    算法
    算法
    算法
    【PAT】B1064 朋友数(20 分)
    【PAT】B1065 单身狗(25 分)
    【PAT】B1066 图像过滤(15 分)
    【PAT】B1067 试密码(20 分)
    【PAT】B1068 万绿丛中一点红(20 分)
  • 原文地址:https://www.cnblogs.com/lihuijuan/p/10216803.html
Copyright © 2020-2023  润新知