开始使用
云函数支持使用 Node.js 进行开发。作为开发者,您可将代码提交到云端运行,在客户端使用后端云服务(Basement)提供的 API 进行调用。您还可以在云函数中直接通过 API 调用数据存储和文件存储的服务资源。
搭配支付宝小程序使用云函数,无须配置,可以直接调用支付宝开放平台的海量 OpenAPI 接口。
重要:目前云函数内不能调用其他云函数,所以只有客户端的使用场景,例如支付宝小程序。
定义云函数
关联上对应的后端云服务(Basement)后,您可以在服务端目录中编写云函数的代码。通过以下步骤定义一个云函数:
编写云函数 handler
每一个云函数处理就是一个 handler,为了便于管理,您可以创建 server/handlers
目录来放置所有的云函数文件,每个文件写成一个 handler。
例如,编写一个新的云函数 handler,使用 getImages.js
文件,调用同一个云服务数据存储服务,获取所有图片的数量并返回。
目录结构参考如下:
├── client/
└── server/
├── handlers
| ├── getImages.js
| └── getUsers.js
└── serverless.yml
getImages.js
的文件内容如下。从数据库 images
里面查出特定用户上传的图片记录:
module.exports = async (ctx) => {
const images = await ctx.basement.db.collection('images').find({ owner: ctx.args.username });
return { images };
};
配置云函数配置文件
编写的 handler 文件是不能直接提供外部调用的,您需要通过配置 serverless.yml
文件,将代码转化成对外服务的云函数。
接着上述示例,下面是 serverless.yml
配置文件的内容:
functions:
getImageList:
handler: handlers/getImages
getAllUsers:
handler: handlers/getUsers
该配置文件中定义了以下云函数,可以对外提供访问:
- 获取图片列表
getImageList
- 获取用户列表
getAllUsers
部署云函数
为支付宝小程序编写的云函数,可以在小程序开发者工具中一键完成部署,将云函数发布到线上环境。如下图所示:
调用云函数
在客户端,您可以使用 basement.function.invoke
方法调用上述定义的云函数,获取用户上传的图片记录,然后更新页面数据。
basement.function.invoke('getImageList', {
username: 'Vincent',
}).then((res) => {
if (res.success && res.result) {
this.setData({ imageList: res.result.images });
}
}).catch(console.error);