在本系列的上一篇文章中,带大家一起初步体验了小程序云开发,特别是云函数的基本功能。在本文中,将会进一步给大家介绍云函数更深入的知识,以便为接下来构建完整案例做准备。
云函数的特点
云函数即在云端(服务器端)运行Javascript代码,当被小程序端调用时执行。从上一篇文章的案例中可以看到,什么一个云函数典型的声明方式是:
1 | // 云函数入口函数 |
实际上,我们是按云函数的接口标准定义了一个以 event(事件) 和 context (上下文) 为参数的函数,默认的定义方式使用了 ES7 的 async/await 语法来处理函数中可能存在的异步操作,简化开发。函数体就是我们写逻辑代码的地方。
在云开发环境下,云函数具有以下一些显著的特点:
一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源。
从上一篇文章的案例我们可以看到,每个云函数实际上是包含在一个同名的目录中的,一个目录可以包括多个js文件和一个配置文件:package.json, 默认的入口指向index.js文件。 这种组织方式其实和Node.js的一个项目很相似。各云函数完全独立;可分别部署在不同的地区。又可相互调用
一个项目中,开发人员可以开发多个云函数,这些云函数不但可以从客户端调用还可以在服务端相互调用,就好像微服务架构一样。能操作云数据库和云存储
作为应用的后台逻辑模块,云函数可以轻松的访问云数据库和云存储。能调用外部服务
云函数中还可以使用Node.js中的 Http Client 包, 访问企业原有的 HTTP 服务或第三方提供的 HTTP 服务,实现了与企业系统的集成。与微信登录鉴权的无缝整合与微信登录鉴权的无缝整合
从上一篇文章的例子可以看到,通过简单的调用就可以取到微信中的鉴权信息,非常简单,方便。开发者无需购买、搭建服务器
开发者不需要额外购买服务器,维护服务器,只需要根据直接的用量设定环境配额即可。极大的减轻了维护量。支持云调用
云调用是云开发提供的基于云函数使用小程序开放接口的能力,支持在云函数调用服务端开放接口,如发送模板消息、获取小程序码等操作都可以在云函数中完成。更多关于云调用的内容将会在后续的文章中详细介绍。支持本地测试和云端测试
云函数在开发中支持本地和云端两种测试方式,这两种方式分别用在不同的场景下可以加速系统的开发。详细的操作方式我们会在后续的文章中给大家详细介绍。可以使用很多现成的Nodejs库
有了这个功能,云函数的开发可以借助于Node.js社区成熟的代码库,提高开发效率。
云函数通常用来实现那些功能
根据上述云函数的特点,我们通常使用云函数来完成一下一些应用(业务)功能:
- 包含(处理)业务逻辑
- 访问云数据库
- 访问云存储
- 与微信鉴权集成
- 借助云函数可相互调用的特点,将复杂业务逻辑分散到多个云函数中,提高系统的可可复用性,鲁棒性,维护性。
- 借助云函数的定时触发特点,实现后台定时任务。
服务端API介绍
从上一篇文章的案例中可以看到,在云函数中进行相关资源访问时,需要使用服务端的API, 这些API大致分为以下几类:
- 初始化
在云函数中,调用云开发各 API 前,需先调用初始化方法 init 一次(全局只需一次)1
2
3const cloud = require('wx-server-sdk')
cloud.init()
在init函数中,我们也可以指定具体的环境,比如:
1 | const cloud = require('wx-server-sdk') |
这里的’test’是使用云开发控制台建立的环境的名称。
- 工具类
辅助完成某些特点功能系统类,包含在 cloud 中,例如常见的获取用户鉴权信息就是通过 cloud 中的 getWXContext() 函数完成的。1
2
3
4
5
6
7
8
9
10
11
12
13exports.main = async (event, context) => {
const {
OPENID,
APPID,
UNIONID
} = cloud.getWXContext()
return {
OPENID,
APPID,
UNIONID
}
}
当然,以上代码只是演示了通过API可以非常方便的获取这些信息,在真实的应用开发中,处于安全考虑,大家尽量不要将这些鉴权信息返回给客户端。
数据库访问
云开发提供了丰富的数据库操作 API,包括对数据库的维护,数据的访问等,我们将在接下来的文章中用案例来详细介绍。访问存储
云开发提供了一系列的API用于访问存储,包括: 上传文件,下载文件,删除文件及换取文件的临时链接等。
客户端API介绍
除了以上的服务端API,小程序云开发也为客户端(小程序端)提供了丰富的API接口,通过这些接口,客户端可以方便的访问云端的各种资源。这些API包括:
- 初始化
客户端与云端资源访问相关的API被包装在全局对象 wx 的 cloud 属性中。在应用中,我们需要进行一次全局的初始化:
1 | wx.cloud.init({ |
- 访问云数据库
云开发提供了丰富的数据库操作 API,包括对数据库的维护,数据的访问等
- 访问云存储
客户端也提供了一系列的API用于访问存储,包括: 上传文件,下载文件,删除文件及换取文件的临时链接等。
- 调用云函数
如在上一篇文章中的案例代码:
1 | wx.cloud.callFunction({ |
下一步
在下一篇文章中,将会带大家一起构建一个相对完整的案例。