微服务开发
通过编写触发器,可以在记录增删改前和增删改查之后自动触发一段服务端代码,实现个性化的数据校验和处理。
华炎魔方 2.4+ 版本支持使用微服务方式开发触发器。 也可以使用 .trigger.js 定义触发器。
在微服务中定义一个action, 并加上 trigger 参数,相当于定义此action为触发器。
actions: {
spaceUsersBeforeUpdate: {
trigger: {
listenTo: 'space_users',
when: ['beforeInsert', 'beforeUpdate']
},
async handler(ctx) {
this.broker.logger.debug('spaceUsersBeforeUpdate', ctx)
}
}
}
trigger: {
listenTo: 'space_users',
when: ['beforeInsert', 'beforeUpdate']
},
使用 listenTo
参数指定触发器适用的对象。
事件前触发的触发器,可以用于校验用户录入的数据是否正确,如果有问题,可以抛错,错误信息会反馈到前端操作页面;还可以结合权限控制当前操作等。
事件前触发的触发器函数都是以before前缀命名。
事件后触发的触发器,可以用于执行关联的事件,比如任务创建完成后发送通知给指定人员。
事件前触发的触发器函数都是以after前缀命名。
触发器执行函数中,可以使用 ctx.params 获得以下变量。
变量 | 用法 |
---|---|
isInsert | 如果此触发器是由于插入操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。 |
isUpdate | 如果此触发器是由于更新操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。 |
isDelete | 如果此触发器是由于删除操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。 |
isFind | 如果此触发器是由于查询操作(从 steedos 用户界面、服务或 API 触发)而触发的,则返回 true。 |
isBefore | 如果在操作任何记录之前触发此触发器,则返回 true。 |
isAfter | 如果在操作所有记录后触发此触发器,则返回 true。 |
id | 记录的唯一标识[string]. |
doc | 需要新增/修改的记录内容[json]. |
previousDoc | 修改/删除前的记录[json], afterUpdate, afterDelete时存在此属性. |
size | 触发器调用中的记录总数(包括旧记录和新记录)。 |
userId | 当前用户唯一标识[string] |
spaceId | 当前工作区[string] |
objectName | 当前对象名称[string] |
query | 查询数据相关参数[json], beforeFind时存在此属性 |
data | 查询结果, afterFind时存在此属性 |