ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

事务级响应:Convex + Better Auth 触发器 Triggers 完全指南(onCreate/onUpdate/onDelete)

2026/8/21 15:38:00 拓冰建站 浏览量
事务级响应:Convex + Better Auth 触发器 Triggers 完全指南(onCreate/onUpdate/onDelete) 事务级响应Convex Better Auth 触发器 Triggers 完全指南onCreate/onUpdate/onDelete【免费下载链接】better-authConvex Better Auth 项目地址: https://gitcode.com/gh_mirrors/con/better-auth如果你正在使用 Convex Better Auth 搭建应用一定遇到过这样的需求用户注册后自动创建一条默认记录、用户资料更新时同步修改关联数据、用户注销时级联清理所有关联内容。这些场景都可以用Better Auth 触发器Triggers完美解决。本文用通俗易懂的方式带你零基础掌握 Convex Better Auth 触发器 Triggers 的完整用法涵盖onCreate、onUpdate、onDelete三个核心钩子以及事务级响应机制的关键细节。什么是 Better Auth 触发器为什么需要事务级响应触发器是 Convex Better Auth 提供的一种数据变化回调机制当认证数据用户、会话、账户等表发生创建、更新或删除时自动执行你预先定义好的逻辑。它最大的特点是事务级响应——触发器的执行与原始操作如注册、登录、删除账号处于同一个数据库事务中。这意味着✅ 要么全部成功要么全部失败不会出现数据半残状态✅ 触发器中执行的写入和原始操作一起提交或一起回滚✅ 不需要额外监听、轮询或消息队列代码更简单简单说事务级响应保证了认证操作和业务逻辑的原子性这是它区别于普通回调的核心价值。触发器与 databaseHooks核心区别一文看懂Better Auth 原本就提供databaseHooks配置来实现类似功能那为什么还需要触发器对比项databaseHooksTriggers 触发器执行时机原操作提交之后与原操作同一事务原子性❌ 无前后操作可能部分成功✅ 事务级同生共死适用范围仅部分内置表Better Auth 任意表失败回滚不影响原操作会阻止触发操作提交一句话总结如果你的逻辑必须在数据写入时附带上完成且失败必须回滚请使用触发器。快速上手三步配置触发器配置过程非常简单只需三步第一步在组件客户端配置中传入triggers选项以表名为 key每个表可挂载onCreate、onUpdate、onDelete三个钩子第二步通过authComponent.triggersApi()导出三个内部函数供组件内部调用export const { onCreate, onUpdate, onDelete } authComponent.triggersApi();第三步把authFunctions传入配置。整个配置集中在一个文件里一目了然完整示例见官方文档docs/content/docs/features/triggers.mdx。onCreate 触发器用户注册后自动创建默认数据onCreate在记录创建时触发最常见的场景是新用户自动初始化业务数据。在回调中你可以拿到ctx事务上下文和doc新创建的完整文档onCreate: async (ctx, doc) { await ctx.db.insert(posts, { title: Hello, world!, authId: doc._id, }); },比如给每个新注册用户自动创建一篇欢迎帖、初始化个人设置表等一步到位。onUpdate 触发器新旧文档对比精准检测变化onUpdate的特殊之处在于回调能同时拿到新旧两份文档——newDoc和oldDoc。通过对比它们你可以精准判断这次更新到底改了什么onUpdate: async (ctx, newDoc, oldDoc) { // 例如检测邮箱是否被修改 if (newDoc.email ! oldDoc.email) { // 执行二次验证等逻辑 } },不想对比时忽略oldDoc即可。这个能力非常适合实现审计日志、敏感字段变更提醒等功能。onDelete 触发器删除用户时级联清理数据onDelete在记录删除时触发回调中可以拿到被删除文档的完整内容非常适合做级联清理onDelete: async (ctx, doc) { // 清理该用户的帖子、评论、文件等关联数据 },比如用户注销账号时同步删除他所有的帖子和关联数据避免留下孤儿数据。事务与错误处理触发器中抛错会发生什么这是最容易踩坑的地方务必注意在触发器中抛错会阻止原始操作提交。比如在onCreate中抛错用户注册就会失败。但还有一个重要的细节一次 Better Auth 调用可能涉及多次数据库操作比如注册会同时写入 user 和 session 两张表。抛错只能保证触发的那一次数据库操作失败回滚之前已提交的操作不会回滚。因此触发器中尽量只做与当前记录强相关的写入避免依赖前序操作必然成功的假设。源码位置与延伸阅读想深入了解内部实现可以阅读以下源码官方文档docs/content/docs/features/triggers.mdx触发器 API 实现src/client/create-client.ts中的triggersApi()方法适配器触发逻辑src/client/adapter.ts中onCreateHandle、onUpdateHandle、onDeleteHandle的传递与执行测试参考src/component/testTriggerHandlers.ts展示了触发器的标准写法结语Better Auth 触发器 Triggers 以极低的接入成本为你带来了事务级的响应能力。无论是初始化默认数据、检测字段变更还是级联清理数据onCreate、onUpdate、onDelete三个钩子都能优雅搞定。现在就为你的 Convex 项目配置第一个触发器吧【免费下载链接】better-authConvex Better Auth 项目地址: https://gitcode.com/gh_mirrors/con/better-auth创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考