用途:该技能记录 Convex 开发中必须避免的关键错误与代理需遵守的规则,每条模式都曾引发真实生产问题。适用于审查 Convex 代码、调试异常、理解代码为何不按预期工作,以及通过反例学习最佳实践。
主要能力与规则要点:
- TypeScript 禁止使用 any,代码库启用 @typescript-eslint/no-explicit-any,使用 any 会导致构建失败;应使用 Doc<"items"> 等具体类型,参数校验避免 v.any()。
- Mutation 中禁止 fetch(),Mutation 必须确定性,外部调用应改为调度 Action 处理。
- Action 中不能使用 ctx.db,需通过 ctx.runQuery 读取、ctx.runMutation 写入。
- 每个函数必须显式声明 returns 校验器并显式返回值。
- 查询避免 .filter() 全表扫描,应使用索引 withIndex。
- 避免无界 .collect(),应使用 take() 限制数量。
- 不要用 .collect().length 计数,可用有界计数或反规范化计数器。
- 避免 N+1 查询,可批量获取关联文档。
- 避免全局计数器热点,可采用分片或 Workpool 串行化。
- 使用 v.int64() 而非已弃用的 v.bigint()。
- 返回校验器需包含 _id 与 _creationTime 等系统字段。
- 内部逻辑应使用 internalMutation/internalAction,公开函数需鉴权。
- 数据一致性操作应放在单个原子 Mutation 中,避免非事务 Action 分步写入。
- 避免冗余索引,复合索引可服务前缀查询。
- ID 参数应使用 v.id() 而非 v.string()。
- 重试需指数退避加抖动,避免固定延迟导致惊群。
使用方式:在审查或调试 Convex 代码时对照上述反模式逐项检查,修正为对应正确写法。
限制:资料未提供安装命令、收费、平台支持或效果数据;具体版本兼容性与完整 API 细节暂未提供。