# 云函数总览
# 一、云函数简介
云函数是一种在云端运行的代码片段,无需管理服务器即可执行。它允许开发者将代码部署到云端,通过事件触发或API调用执行。
核心特性:
- 支持 JavaScript (ES6) 语法
- 内置数据库操作能力
- 丰富的加密工具函数
- HTTP 请求支持(需配置白名单)
- 30秒执行超时保护
# 二、云函数使用场景
- API后端服务:作为RESTful API的后端,处理客户端请求,返回数据
- 事件驱动任务:数据库事件触发执行
- 微服务架构:将复杂应用拆分为多个云函数
- 自定义业务逻辑:支持客户端自定义参数调用
# 三、内置对象
云函数运行时注入以下全局对象:
| 对象 | 说明 |
|---|---|
potato | 核心业务对象,提供数据库、加密、用户等操作 |
console | 日志对象,支持 log/error/warn 方法 |
params | 客户端传入的自定义参数(展开到全局) |
# 四、内置函数列表
# 4.1 数据库操作
云函数数据库方法的 param 与对应 HTTP 数据库接口 body 一致,详见各方法文档及 数据库总览。
| 方法 | 说明 | param 要点 |
|---|---|---|
potato.selectOne(tableName, param) | 查询一条 | 字段平铺等值条件,如 { id: '1' } |
potato.selectList(tableName, param) | 查询多条 | { where:[{reg,column,value}], pc:{p,s} },勿平铺字段 |
potato.addOne(tableName, param) | 添加一条 | 字段平铺,如 { name: 111 } |
potato.addList(tableName, param) | 添加多条 | { list: [ {...}, {...} ] },单次最多 1000 |
potato.updateOne(tableName, param) | 修改 | { column:{...}, where:{...} }(where 等值对象) |
potato.updateList(tableName, param) | 批量修改 | { column:{...}, where:[{reg,column,value}], limit },limit 默认/上限 500 |
potato.deleteOne(tableName, param) | 删除 | { where:{...} }(where 等值对象) |
potato.deleteList(tableName, param) | 批量删除 | { where:[{reg,column,value}], limit },limit 默认/上限 500 |
# 4.2 用户操作
| 方法 | 说明 | 参数 |
|---|---|---|
potato.findCurrentUserInfo() | 查询当前登录用户信息 | 无 |
potato.updateCurrentUserInfo(param) | 修改当前登录用户信息 | param: 要修改的字段对象 |
potato.getCurrentUserId() | 获取当前登录用户ID | 无 |
potato.updateUser(param) | 修改指定用户信息 | param: 包含userId和修改字段的对象 |
# 4.3 卡密操作
| 方法 | 说明 | 参数 |
|---|---|---|
potato.verifyCardV1(param) | 验证卡密V1(会员制) | param: {card: "卡密"} |
potato.verifyCardV2(param) | 验证卡密V2(时长制) | param: {card: "卡密"} |
potato.createCardMy(param) | 创建卡密 | param: 卡密配置对象 |
potato.findOneCard(card) | 查询卡密详情 | card: 卡密字符串 |
potato.updateCard(param) | 修改卡密 | param: 卡密修改对象 |
potato.delCard(card) | 删除卡密 | card: 卡密字符串 |
# 4.4 加密工具
| 方法 | 说明 | 参数 |
|---|---|---|
potato.md5(data) | MD5加密 | data: 待加密字符串 |
potato.sha1(data) | SHA1加密 | data: 待加密字符串 |
potato.sha256(data) | SHA256加密 | data: 待加密字符串 |
potato.hmacSha256(data, secretKey) | HMAC-SHA256加密 | data: 数据, secretKey: 密钥 |
potato.hmacSha512(data, secretKey) | HMAC-SHA512加密 | data: 数据, secretKey: 密钥 |
potato.aesEncrypt(data, secretKey) | AES加密(AES/ECB/PKCS5Padding,与接口加密类型 2 一致;密钥不足 32 字节用 0 补齐;输出 Base64) | data: 明文, secretKey: 密钥 |
potato.aesDecrypt(data, secretKey) | AES解密(同上) | data: Base64密文, secretKey: 密钥 |
# 4.5 应用信息
| 方法 | 说明 | 参数 |
|---|---|---|
potato.getAppInfo() | 获取当前应用信息 | 无 |
potato.getRequestIp() | 获取请求IP地址 | 无 |
# 4.6 网络请求
注意:HTTP请求的URL必须在应用配置的白名单内
| 方法 | 说明 | 参数 |
|---|---|---|
potato.httpGet(url) | HTTP GET请求 | url: 请求地址(需在白名单内) |
potato.httpPost(url, body) | HTTP POST请求 | url: 请求地址, body: 请求体(字符串或对象) |
# 4.7 其他功能
| 方法 | 说明 | 参数 |
|---|---|---|
potato.registerV2(param) | 用户注册V2 | param: 注册信息对象 |
potato.userByVipWithBalance(param) | 使用余额购买会员 | param: 购买参数对象 |
potato.sendWeChatMessage(param) | 发送公众号通知 | param: 消息参数对象 |
# 五、自定义参数调用
客户端调用云函数支持自定义参数,使用 params 进行传递。请求头验签规则与普通接口相同,见 接口规范(V1 / V2 / V3)。
# 请求示例
{
"name": "myFunction",
"params": {
"userId": "123",
"action": "getData"
}
}
1
2
3
4
5
6
7
2
3
4
5
6
7
# 云函数获取参数
// params 中的字段会直接展开到全局作用域
// 可以直接使用 userId、action 变量
function processData() {
console.log('用户ID:', userId);
console.log('操作类型:', action);
// selectOne:字段平铺(与 /api/selectOne 一致)
var one = potato.selectOne('users', { id: userId });
// selectList:必须用 where + pc(与 /api/selectList 一致)
var list = potato.selectList('users', {
where: [
{ reg: 'eq', column: 'id', value: userId }
],
pc: { p: 1, s: 100 }
});
return { one: one, list: list };
}
processData();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 六、返回值规范
云函数执行结果会自动包装为以下格式:
{
"code": "200",
"message": "success",
"status": true,
"data": "函数返回值",
"pc": null,
"time": null,
"nonce": null,
"sign": null,
"reqSign": null
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 七、注意事项
- 执行超时:云函数执行超时时间为30秒,超时会自动终止
- 数据库权限:使用数据库操作需要开通会员并配置数据源
- HTTP白名单:
httpGet/httpPost的URL必须在应用白名单中 - 安全沙箱:云函数运行在安全沙箱中,无法直接访问Java类
- 日志输出:使用
console.log()输出调试信息,可在后台查看 - 验签:客户端调用
/api/execFunction时,请求头验签与其它接口相同,见 接口规范