1、微信云开发介绍
小程序·云开发是官方提供的原生 Serverless 云能力。它提供了一整套完整、标准化的开发流程。弱化了后端以及运维的概。无需搭建服务器,使用微信接口即可集成原生云服务,也可以获得开箱即用的完整的原生云端支持和免鉴权微信服务支持。
2、功能与优势
能力:
- 云函数:在云端运行的代码,微信私有协议天然鉴权,开发者只需编写自身业务逻辑代码
- 数据库:既可在小程序前端操作,也能在云函数中读写的 JSON 数据库
- 存储:可在小程序前端上传/下载云端文件,在云开发控制台可视化管理
优势:
- 无需搭建服务器,快速构建小程序
- 免登录,免鉴权调用微信开放服务
- 统一开发多端应用
- 按量计费,成本更低
官方介绍:
官方介绍和视频
3、功能介绍
3.1 云数据库
云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。
3.2 云存储
云开发提供了一块存储空间,提供了上传文件到云端、带权限管理的云端下载能力,开发者可以在小程序端和云函数端通过 API 使用云存储功能。
3.3 云函数
云函数是一段运行在云端的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。
小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。
3.4 其他
运营 分析、云托管、云调用、HTTP API
4、 代码讲解
本次介绍小程序云开发以一个todolist的项目来进行实际的讲解。代码地址:
github
4.1 入口函数:
// 云函数入口文件 /cloudfunctions/getOpenId/index.js
const cloud = require('wx-server-sdk')
cloud.init({ // 初始化云开发环境
env: cloud.DYNAMIC_CURRENT_ENV // 当前环境的常量
})
const db = cloud.database()
// 云函数入口函数
exports.main = async (event, context) => {
// 预置创建集合,如果存在则自动失败跳过,自己上架时可以去掉
try{ await db.createCollection('todo') }catch(e){}
const wxContext = cloud.getWXContext()
// 返回当前用户的身份信息,用于数据库记录和查询
return {
event,
openid: wxContext.OPENID,
fromopenid: wxContext.FROM_OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
4.2 增删改查
新增
const db = await getApp().database()
// 在数据库中新建待办事项,并填入已编辑对信息
db.collection(getApp().globalData.collection).add({
data: {
title: this.data.title, // 待办标题
desc: this.data.desc, // 待办描述
files: this.data.files, // 待办附件列表
freq: Number(this.data.freq), // 待办完成情况(提醒频率)
star: false
}
})
删除
// 在数据库中删除一条id数据
db.collection(getApp().globalData.collection).where({
_id: this.data._id
}).remove()
修改
// 校验通过后,根据待办 _id,更新待办信息
db.collection(getApp().globalData.collection).where({
_id: this.data._id
}).update({
data: {
title: this.data.title,
desc: this.data.desc,
files: this.data.files,
freq: Number(this.data.freq)
}
})
查询
// 在数据中查询查询该用户的信息
db.collection(getApp().globalData.collection).where({
_openid: openid
})