Tachybase 在应用、插件、数据库的生命周期中提供了非常多的事件监听,这些方法只有在触发了事件之后才会执行。
事件的注册一般放于 afterAdd 或 beforeLoad 中
db.on
借助Sequelize, 数据库相关事件与 Collection 配置、Repository 的 CRUD 相关,包括:
app.on
app 的事件与应用的生命周期相关,相关事件有:
我们继续以简单的在线商店来举例,相关的数据表建模可以回顾 数据表和字段 部分的示例。
通常我们的商品和订单是不同的数据表。客户在下单以后把商品的库存减掉可以解决超卖的问题。这时候我们可以针对创建订单这个数据操作定义相应的事件,在这个时机一并解决库存修改的问题:
因为默认 Sequelize 的事件中就携带事务等信息,所以我们可以直接使用 transaction 以保证两个数据操作都在同一事务中进行。
同样的,也可以在创建发货记录后修改订单状态为已发货:
在不考虑使用工作流插件等复杂情况下,我们也可以通过应用级的事件实现一个简单的定时任务机制,且可以与应用的进程绑定,退出后就停止。比如我们希望定时扫描所有订单,超过签收时间后自动签收:
通过上面的示例,我们基本了解了事件的作用和可以用于扩展的方式: