小程序云开发学习总结

一、云开发初始化

  1. 新建小程序,填写AppID,勾选云开发。

  2. 在工具栏左侧点击“云开发”按钮,开通云开发,并且配置环境,建议创建两个环境,一个为 test 测试环境,一个为 release 正式环境。

  3. 初始化云开发
    在用户管理中会显示使用云能力的小程序的访问用户列表,默认以访问时间倒叙排列,访问时间的触发点是在小程序端调用 wx.cloud.init 方法,且其中的 traceUser 参数传值为 true

App({
  onLaunch: function () {
    
    if (!wx.cloud) {
      console.error('请使用 2.2.3 或以上的基础库以使用云能力')
    } else {
      wx.cloud.init({
        env: "test-7c89f4",  注意这里填写的是环境ID,是ID,ID,ID。
        traceUser: true,  是否将用户访问记录到用户管理中,在控制台中可见。    
      })
    }

    this.globalData = {}
  }
})
  1. 到此初始化就完成了,需要注意的是云开发使用的node.js,所以请提前安装好Node.js和npm,安装命令如下:
brew是一个包管理工具,可以很方便地进行安装/卸载/更新各种软件包,例如:帮我们安装nodejs, elasticsearch, kibana, mysql, mongodb 等等软件包,快速搭建各种本地环境。
首先,安装brew:
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后,使用brew安装node.js:
brew install node
安装node.js的时候,就会帮我们自动安装好npm,npm其实是Node.js的包管理工具(package manager)
安装完成后,我们可以使用node -v,查看node的版本号,用来验证是否安装成功。

使用npm,帮我们导入别人用node.js写的程序,在云函数目录下执行下面这句话,会帮我们安装好云开发依赖的第三方node.js程序。
npm install --production

//上面这句话已经帮我们安装好wx-server-sdk 依赖了,就不需要再单独安装了
//使用云开发需在云函数目录中安装 wx-server-sdk 依赖:
//npm install --save wx-server-sdk

两个概念需要明确:

  • brew是一个包管理工具,用来安装nodejs等软件包。

  • npm其实是Node.js的包管理工具(node package manager),用来导入别人用nodejs写的程序,帮我们管理第三方写的代码,例如:A依赖B,B又依赖C,我们想用A的话,就得导入B和C,用手动导入的方式就会很复杂,而npm就自动根据依赖关系把这些包全都下载并管理起来,非常方便。

二、数据库

  1. 集合,集合必须在云开发控制台中创建,每个集合都可以拥有一个权限配置。

  2. 权限控制,数据库的权限控制分为:小程序端和管理端,管理端包括云函数端和控制台。

在小程序中创建的每个记录都会带创建者的信息(这里的创建者即小程序用户),以 _openid 字段保存该用户的 openid ,而在云控制台创建的记录是没有openid字段的。

一共有以下四种权限:

小程序云开发学习总结_第1张图片
权限控制

总结:管理端始终拥有读写所有数据的权限,小程序端始终不能写他人创建的数据。

  1. 数据库初始化
  • 使用数据库增删改查前,需要获取数据库引用
const db = wx.cloud.database()
  • 要操作一个集合,需先获取集合的引用,这个操作并不会发起网络请求,取拉取它的数据
const todos = db.collection('todos')
  1. 插入数据库
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)
  }
})
  1. 查询数据
  • 小程序端查询,一次最多只能查询20条
db.collection('todos').where({
  _openid: 'user-open-id',
  done: false
})
  .get({
    success(res) {
    // res.data 是包含以上定义的两条记录的数组
      console.log(res.data)
    }
  })
  • 云函数端查询,一次最多只能查询100条
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database()
const MAX_LIMIT = 100
exports.main = async (event, context) => {
  // 先取出集合记录总数
  const countResult = await db.collection('todos').count()
  const total = countResult.total
  // 计算需分几次取
  const batchTimes = Math.ceil(total / 100)
  // 承载所有读操作的 promise 的数组
  const tasks = []
  for (let i = 0; i < batchTimes; i++) {
    const promise = db.collection('todos').skip(i * MAX_LIMIT).limit(MAX_LIMIT).get()
    tasks.push(promise)
  }
  // 等待所有
  return (await Promise.all(tasks)).reduce((acc, cur) => ({
    data: acc.data.concat(cur.data),
    errMsg: acc.errMsg,
  }))
}
  1. 删除数据
  • 删除一条记录,小程序端就可以删除
db.collection('todos').doc('todo-identifiant-aleatoire').remove({
  success(res) {
    console.log(res.data)
  }
})
  • 删除多条记录,需在云函数端进行删除
// 使用了 async await 语法
const cloud = require('wx-server-sdk')
const db = cloud.database()
const _ = db.command

exports.main = async (event, context) => {
  try {
    return await db.collection('todos').where({
      done: true
    }).remove()
  } catch (e) {
    console.error(e)
  }
}

三、存储

四、云函数

五、云调用

你可能感兴趣的:(小程序云开发学习总结)