前面几篇文章介绍了小程序端的一些主要开发内容,这篇文章介绍一些云函数相关的技术。相比于传统的原生App,小程序开发更快,更简单的主要原因我认为与小程序的生态有很大关系,依托于腾讯云和微信App,腾讯云提供了快速开发和部署后端的能力,微信提供了快速的开发组件和接入能力。这就为用户用户节省了大量的技术选型,部署和运维的时间,让用户只用关心于自己的业务代码的开发,其他都可以完全托管于腾讯云。当然理论上选其他云也可以,但是小程序开发还是选原装的好,选其他云肯定会有各种限制,比如端口,防火墙,网络等。
什么是云函数
云函数不是只有腾讯云有,aliyun,aws,google等也有云函数,云函数是这几年比较流行的serverless架构的在云端的实现。从字面理解,就相当于把一个函数部署到云上去。它相当于把我们传统的代码,可能是一个服务,拆分成更加细的粒度,一个个函数的方式,部署在云上。而这些函数又可以提供某种服务,因此可以认为是Function as a service。此外,传统软件开发中后端用到的一些技术,比如对象存储,数据库应用,缓存服务,这些在云上也会已serverless的形式部署在云上。在云上提供开通即服务,开通即使用的能力。在使用这些产品时同样不需要关注它的服务器是什么样的,它的服务器部署在哪里,而是服务开通就可以使用了,后面的运维工作都交给了云,所以不用感知它的最底层服务器。因此可以认为是backend as a service。因此,云函数是Faas+Baas两者的结合,让用户只用关心具体的业务代码的实现,其他都交给云函数,云完全管理底层计算资源,包括服务器 CPU、内存、网络和其他配置/资源维护、代码部署、弹性伸缩、负载均衡等。这也是一个典型的云原生的架构。
小程序云函数
小程序中创建云函数非常简单,使用小程序开发工具可以快速的安装,创建,调试和部署云函数,也可以方便的对管理云数据库,云存储等功能。
云函数的使用与环境配置
1、创建云函数
右键cloudfunctions文件选择新建Node.js云函数,云函数命名为club,用于俱乐部相关的函数功能。

2、安装node.js及npm
从NodeJS官网下载对应的node安装程序
3.安装wx-server-sdk
右键club在终端中打开,运行:

npm install --save wx-server-sdk
安装成功后云函数文件夹中会有多一个文件(package-lock.json)。package-lock.json文件最好放在代码管理仓库中,避免因为以后某个组件版本的更新导致小程序不能运行。
-
上传并部署
右键club,点击上传并部署,打开云端控制台可以看到我们云函数中已经有一个云函数了。
Screen Shot 2021-01-27 at 9.41.48 PM.png
完整实例
云函数初始化
下面是云函数下的一些常用的初始化,包括云数据库的一些命令,云函数上下文。
const cloud = require('wx-server-sdk')
cloud.init()
const db = cloud.database();
const _ = db.command;
const $ = _.aggregate;
const wxContext = cloud.getWXContext()
云函数入口
exports.main = async (event, context) => {
switch (event.action) {
case 'requestMyClubs': {
return requestMyClubs(event);
}
case 'requestClubDetails': {
return requestClubDetails(event);
}
}
}
云数据库
云函数提供了很方便的访问和操作云数据库的功能,包括增,删,改,查,多表聚合查询等。但使用方式不同于传统的关系型数据库的sql语法,而是类似于mangodb的查询语法,也不知道腾讯使用的是不是mangodb作为文档数据库,官网上没有查找到相关的资料。
1)按主键查询单条记录
根据ID获取俱乐部信息
db.collection("clubs").doc(event.id).get().then(res => {
console.log(res.data)
})
2)按条件查询多条记录
查找用户关注的所有俱乐部
db.collection('myClubs').where({
openId: openId,
clubId: clubId
}).get().then(res => {
console.log(res.data)
})
3)插入记录
db.collection('club').add({
data: {
name: club.name,
logo: club.logo,
introduction: club.introduction,
buildDate: new Date()
}
}).then(res => {
console.log(res.data)
})
4)更新记录
db.collection('club').where({
name: club.name
}).update({
data: {
name: club.name,
logo: club.logo,
introduction: club.introduction,
buildDate: new Date()
}
}).then(res => {
console.log(res.data)
})
5)聚合查询
下面是一个比较复杂的聚合查询实例,实现的是两张表,myActivities表和activitis表的关联查询,它们之间是1对多关系。下面实现的是找到当前登录用户的所有相关活动,并且该活动的起始时间需要在指定的时间范围内并且状态为true,查询到所有满足这两个条件的活动后,但为了节省网络请求数据,只返回活动时间和该活动对应的url给小程序,其他字段都不返回。此实例中使用到了
- aggregate聚合查询
- match条件比较
- addFields增加新的字段
- 时间比较
-
project等相关指令。
完整的代码如下。
Picture1.png
db.collection('myActivities').aggregate().lookup({
from: 'activities',
localField: 'activityId',
foreignField: '_id',
as: 'activityItems',
}).match({
openId: openId
}).match({
"activityItems": {
status: true,
startTime:_.lte(endTime).and(_.gte(startTime)),
}
}).addFields({
activity:$.arrayElemAt(['$activityItems', 0]),
})
.addFields({
time:'$activity.startTime',
url:$.concat(['/pages/club/clubActivity/clubActivity?activityId=', '$activityId'])
}).project({
activityItems: 0,
checkInDate: 0,
openId: 0,
checkInDate: 0,
_id: 0,
activity:0,
registerDate:0,
}).end();
}
开发调试
打开小程序开发工具上的云开发按钮,会弹窗云开发控制台。主要包括运营分析,云数据库,云函数和存储这几个主要功能。
1)云本地调试
在云函数右键,点击开启云函数本地调试,然后在云函数中可以看到所有的云函数,点击本地调试,如下图,就可以调试云函数。

注意事项:
有时因为网络原因或者小程序长时间运行,本地调试功能会失效,可以试着关闭本地调试,然后再开启,调试功能能恢复正常。
2)云数据库
云数据库中可以查看当前小程序中设计的云数据库和数据库里的数据,也可以手动的维护这些数据,包括修改字段,增,删,改,查数据,非常方便,也可以导入和导出数据。

注意事项:
导入集合数据时需要有唯一的id保证,导入时不会自动生成id,需要记录中有id字段,而且保证唯一性。
-
存储
存储中可以上传文件和文件夹,并生成在小程序中可以访问的file id。
Screen Shot 2021-01-27 at 9.52.56 PM.png
网友评论