添加 APIs 自定义方法
一些用户级别的 APIs 支持添加自定方法

方法入参
入参 即用于描述上述函数 params 的结构. 若函数无参数, 则不填写.
若函数有参数, 则参数必须为 对象, 入参中描述字段结构应当与函数实际使用的 params 结构一致, 否则在微搭应用编辑器中使用时可能出错.
在微搭应用编辑器中使用数据源时, 会使用到数据源方法 入参 中描述的结构信息, 比如:
- 数据源变量的定义中, 会根据入参提示的结构生成变量的配置表单(提示出字段的中文名, 根据不同类型显示不同的表单控件)
- 表单容器关联数据源方法后, 会根据入参结构信息生成完整的表单, 如: 入参中 字段名称 会变成表单输入框的 字段标题, 入参中字段的 数据类型 可能会用于生成不同类型的输入框(手机号输入框/邮件输入框/开关选择器等), 入参中 枚举 信息会用于生成 多选输入框 或者下拉选框, 等等.
以上只是举例说明, 数据源方法入参在微搭应用编辑器中的使用场景很多, 故在填写 入参 时信息提供的越完整, 在微搭应用编辑器中使用时则越方便.
公共变量
公共变量提供了一种跨方法的变量调用方式,可支持在多个APIs中进行引用,一般适用于静态变量如APIToken,ClientID等常量值,可以使用模板{{ }}方式引用。
例如设置公共变量ClientId, 使用{{vars.ClientId}}形式引用。

方法类型
数据源方法根据实现方式, 分为两种:
- HTTP 请求: 仅外部数据源中提供该类型方法, 可简单对接第三方http接口, 可以通过简单的配置 HTTP 请求地址 、方法 、参数等等 即可往完成方法的配置
- 云函数: 通过编写js代码来实现更灵活的功能, 包括发起 HTTP 请求
HTTP请求
HTTP请求底层也基于云开发的云函数能力封装, 提供了可视化、快速接入第三方 HTTP API 的功能.

HTTP 配置中配置的是 HTTP 请求底层的请求参数, 在配置 URL、 Query 和 Headers 的 value 、Body(仅请求方法Method为 POST 和 PUT时可配置) 可以使用模版 {{ }} 方式引用下述字段:
- 引用入参中定义的字段, 使用
{{ params.字段标识 }}形式 - 引用环境变量信息, 使用
{{ env.字段标识 }}形式, 如{{ env.openId }} - 引用公共量信息, 使用
{{ vars.字段标识 }}形式
在配置Body时, 填写的内容作会为一个完整的字符串模版处理, 应保证模版处理后的结果符合Body类型(JSON/FORM/XML)的要求, 否则请求会直接失败.
例如:
入参 params 为 { age: 12, name: 'Saurus', tags: ['aaa', 'bbb'] }, HTTP配置中 Body 的类型为 JSON.
正确的 Body 示例, 请求可以正常发送:
- 假如 Body 内容为
{ "age": {{params.age}} }, 得到的结果为{ "age": 12 } - 假如 Body 内容为
{ "age": "{{params.age}}" }, 得到的结果为{ "age": "12" }, 注意age的值 为字符串 - 假如 Body 内容为
{ "tags": {{params.tags}} }, 得到的结果为{ "tags": ["aaa", "bbb"] }
错误的 Body 示例, 请求将直接失败:
- 假如 Body 内容为
{ age: {{params.age}} }, 得到的结果为{ age: 12 },age缺少双引号"包裹 - 假如 Body 内容为
{ "name": {{params.name}} }, 得到的结果为{ "name": Saurus },Saurus缺少双引号"包裹 - 假如 Body 内容为
{ "tags": "{{params.tags}}" }, 得到的结果为{ "tags": "["aaa", "bbb"]" },tags的值语法错误
云函数
云函数是一种特殊的Javascript函数, 底层基于云开发的云函数能力封装, 最终会运行在服务器端的 Nodejs 10.15 环境中, 可以通过函数的 context参数来访问 云开发node sdk 的所有能力。
云函数编写需注意以下几点:
- 云函数必须使用
module.exports导出 - 云函数只接受两个参数:
params: 函数接受的参数, 即在方法入参描述的结构. 需保证实际使用时params与 方法入参 描述的结构一致context: 云函数上下文对象, 方便在云函数中实现各种功能, 具体结构可参考 云函数context
- 云函数返回的结果, 即
return语句返回的内容应当是一个 对象, 切应当与 方法出参 描述的一致 - 云函数中若发现错误, 可以直接
throw new Error('xxxx')来抛出错误, 也可以使用throw new TCBError(code, 'msg')抛出错误并自定义错误代码. - 云函数开发过程中可以在通过
console.log('xxxx')输出日志, 再使用 方法测试 来测试查看日志 - 云函数运行的环境为 Nodejs 10.15, 注意不要使用当前版本不支持的js特性, 比如可选链等.
下边是为自建数据源添加自定义的创建方法的示例代码:
假设该自建数据源有两个自定义数据源字段 name、email, 以下代码将对参数进行校验, 并限制只能使用 qq 邮箱, 并最后返回新记录的ID
module.exports = async function (params, context) {
// 输出日志, 方便调试, 在 方法测试 中可以看到日志
console.log('params', params);
if (!params.name || !params.email) throw new TCBError(1, 'name 或 email 不能为空');
if (!/@qq\.com$/i.test(params.email)) throw new TCBError(2, '仅支持使用qq邮箱');
const now = Date.now();
// 追加创建时间、更新时间
const newParams = Object.assign({}, params, {
createdAt: now,
updatedAt: now,
});
// 使用云开发的 collection 相关API添加记录
const result = await context.collection.add(newParams);
// 返回新记录的ID信息
return { _id: result.id };
}
自定义代码 context
context 为低码向云函数提供的上下文对象, 里面提供了操作数据库、调用云开发云函数的对象以及一些有用的环境变量.
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| cloudbase | tcb | 是 | 云开发node sdk 对象, 即 import tcb from '@cloudbase/node-sdk'; 引入的 tcb, 使用文档 |
| app | tcb.CloudBase | 是 | 云开发 node sdk 初始化后返回的 app 对象, 即 const app = tcb.init({...}) 得到的 app. 初始化默认使用当前低码使用的云开发环境相关参数进行初始化.可使用 app 直接调用 云开发云函数及存储相关能力(如app.callFunction({...})、app.uploadFile({...})), 使用文档 |
| auth | 云开发鉴权对象 | 是 | 上述 app.auth() 返回得到的 auth 对象, 可用于直接调用鉴权相关的能力如(如 auth.getUserInfo(), auth.getEndUserInfo() 等等), 使用文档 |
| database | 云开发数据库对象 | 是 | 云开发 node sdk 的数据库对象, 即 app.database() 返回的对象. 可使用 database 获取集合的引用(database.collection(('<collection-name>')), 访问指令对象(database.command)等等.使用文档 |
| collection | 云开发数据库集合对象 | 否 | 当前数据源关联的数据库表的引用对象(云开发 node sdk 的集合引用对象), 仅自建数据源才有该属性, 即 context.database.collection(context.env.dataSourceFullName) 返回的对象. 可直接使用该对象当前数据源的数据库表进行读写操作, 使用文档 |
| env | 环境变量 | 是 | 具体请参考环境变量 |
| httpAuth | auth处理对象 | 否 | 仅使用非空白模版创建的第三方数据源有该对象, 具体使用可参考如何为使用模版创建的第三方数据源集成新的方法 |
| vars | 对象 | 是 | 当前数据源的公共变量 |
环境变量
| 参数 | 类型 | 必须 | 说明 |
|---|---|---|---|
| openId | string | 否 | 微信openId,非微信授权登录则空 |
| fromOpenId | string | 否 | 微信中, 多个小程序共享同一个环境时(即一个微搭环境绑定了多个小程序), 来源小程序的用户 openId, 实际使用时应当优先使用该值 |
| currentOpenId | string | 否 | 当多个小程序共享同一个环境时(即一个微搭环境绑定了多个小程序), 若请求来自于共享的小程序, 则 currentOpenId 为 上述的 fromOpenId, 否则为 openId |
| appId | string | 否 | 微信appId,非微信授权登录则空 |
| fromAppId | string | 否 | 微信中, 多个小程序共享环境时(即一个微搭环境绑定了多个小程序), 来源小程序的appId, 实际使用时应当优先使用该值 |
| currentAppId | string | 否 | 当多个小程序共享同一个环境时(即一个微搭环境绑定了多个小程序), 若请求来自于共享的小程序, 则 currentAppId 为 上述的 fromAppId, 否则为 appId |
| uid | string | 否 | tcb用户唯一ID |
| customUserId | string | 否 | 开发者自定义的用户唯一id,非自定义登录则空 |
| isAnonymous | boolean | 是 | 是否为匿名用户 |
| dataSourceName | string | 是 | 数据源标识, 用户在数据源管理中创建的数据源才有该属性 |
| dataSourceFullName | string | 否 | 数据源完整名称, 为部署后底层(云函数名称/数据库表名)实际使用的标志 |
| envId | string | 是 | 云开发环境ID |
| isPreview | boolean | 是 | 是否为 体验环境, 开发者一般不需要使用改信息. 详见下方 环境说明 |
| envType | prod pre | 是 | 环境类型, pre: 体验环境, prod: 正式环境; 开发者一般不需要使用改信息. 详见下方 环境说明 |
环境说明
微搭生成出的应用分为两种:
体验应用: 用于在微搭中开发测试应用. 在应用编辑器中通过预览区的实时真实预览开关、编辑器顶部的预览以及顶部 发布对话框 中的发布方式体验得到的应用均属于体验应用.正式应用: 用于正式发布给终端用户使用. 在应用编辑器通过顶部 发布对话框 中的发布方式正式得到的应用即为正式应用.
体验应用 和 正式应用 调用的数据源及微搭后端支撑服务的数据则是互相隔离、互不影响的, 分别会调用到不同的后端环境:
体验环境: 被体验应用调用.正式环境: 被正式应用调用.
用户在微搭的数据源管理中, 新建/编辑保存数据源的时候, 则会自动更新 体验环境 的数据源. 当数据源测试验证通过后, 点击数据源管理中的 立即发布 按钮则会将数据源更新至 正式环境.