Skip to content

Table 钩子函数

通过使用钩子函数可以达到以下效果:

  • 通过使用前置与后置增强内置的action处理器。在数据库数据表中获取数据时,使用前置钩子函数可以对数据进行处理,比如对数据进行过滤、排序、分页等操作。在数据读取完成后,使用后置钩子函数可以对数据进行处理,比如对数据进行格式化、计算等操作。
  • 完全替换内置的action处理器。默认的处理器会以模型定义,数据库表的数据作为数据源。而使用替换处理器可以完全自定义表格的数据来源,比如可以从其它的数据数据源中获取数据。

替换内置的action处理器

可使用以下的配置替换 table 的默认处理器

注意:在钩子函数中报错或是 error 只会记录在日志文件里,不会影响整个流程。

通过指定 API 处理器,在不绑定数据模型的情况下,在数据表格中使用其他的数据源。

  • setting: 获取表格设置
  • component: 获取组件配置
  • upload: 上传处理
  • download: 下载处理
  • search: 搜索数据,返回分页数据
  • get: 获取单条数据
  • find: 查找数据
  • save: 保存数据
  • create: 创建数据
  • insert: 插入数据
  • delete: 删除数据
  • delete-in: 批量删除数据
  • delete-where: 条件删除数据
  • update: 更新数据
  • update-in: 批量更新数据
  • update-where: 条件更新数据

示例

可以通过在 action 字段中配置以下处理器来替换表格的默认处理器:

json
{
  "action": {
    "setting": {
      "process": "scripts.setting.get",
      "bind": "scripts.setting.get",
      "guard": "bearer-jwt",
      "default": []
    }
  }
}
json
{
  "action": {
    "get": {
      "process": "", //处理器名称
      "bind": "", //处理器名称,同process
      "guard": "bearer-jwt", //处理器名称,常见的有bearer-jwt,-。
      "default": [] //默认参数值
    }
  }
}

处理器配置项说明:

配置项类型说明
processstring处理器名称
bindstring处理器名称,同 process,可以省略
guardstring处理器名称,常见的有 bearer-jwt、-
defaultarray默认参数值

Hook:

可以使用 Hooks 处理表格 API 输入输出数据。Hook 分为 beforeafter 两类。

  • before hook,在 API 调用前运行,可以用来处理传入参数。
  • after hook,在 API 调用后运行,可用来处理查询结果。

在描述数据表格时,在 hooks 字段,声明 Hook 关联的处理器,例如:

使用 Before Hook 锁定搜索条件,过滤掉 search API 越界输入。

使用 After Hook 处理表单提交数据,保存历史数据。

  • before:find - 在执行find查询前调用,可用于修改查询条件
  • after:find - 在执行find查询后调用,可用于处理查询结果
  • before:search - 在执行search搜索前调用,可用于修改搜索参数和过滤条件
  • after:search - 在执行search搜索后调用,可用于处理搜索结果和分页数据
  • before:get - 在执行get获取单条记录前调用,可用于验证和修改查询参数
  • after:get - 在执行get获取单条记录后调用,可用于处理返回数据
  • before:save - 在执行save保存前调用,可用于数据验证和预处理
  • after:save - 在执行save保存后调用,可用于后续处理如发送通知
  • before:create - 在执行create创建前调用,可用于设置默认值和数据验证
  • after:create - 在执行create创建后调用,可用于关联数据处理
  • before:delete - 在执行delete删除前调用,可用于删除验证和关联检查
  • after:delete - 在执行delete删除后调用,可用于清理关联数据
  • before:insert - 在执行insert插入前调用,可用于数据预处理和验证
  • after:insert - 在执行insert插入后调用,可用于更新相关统计数据
  • before:delete-in - 在执行批量删除前调用,可用于验证删除条件
  • after:delete-in - 在执行批量删除后调用,可用于批量清理关联数据
  • before:delete-where - 在执行条件删除前调用,可用于验证删除条件
  • after:delete-where - 在执行条件删除后调用,可用于相关数据更新
  • before:update-in - 在执行批量更新前调用,可用于数据验证
  • after:update-in - 在执行批量更新后调用,可用于更新缓存
  • before:update-where - 在执行条件更新前调用,可用于验证更新条件
  • after:update-where - 在执行条件更新后调用,可用于同步更新相关数据

hook 函数参数

before 处理器的输入参数与默认处理器输入参数保持一致,before 处理器输出返回值需要与默认处理器的输入参数保持一致。

after 处理器的输入参数是默认处理器的返回值,after 处理器输出返回值需要与默认处理器的输出参数保持一致。

也既是只要了解默认处理器的传入参数与返回值,可以推算出 before 与 after 处理器的参数与返回值。

示例

json
{
  "action": {
    "after:find": "scripts.license.AfterFind",
    "before:delete": "scripts.license.BeforeDelete"
  }
}