checkAsync
自定义异步检查:数据库查询、外部 API。只能与 validateAsync 和 parseAsync 一起使用。
签名
ts
function checkAsync<T>(fn: (value: T, info: Info) => Promise<boolean> | boolean, msg?: Message): Action<T>参数
| 参数 | 类型 | 说明 |
|---|---|---|
fn | (value: T, info: Info) => Promise<boolean> | boolean | 检查函数。info 与 check 相同 |
msg | Message | 自定义错误信息。可以是带 {参数} 的字符串或函数 |
错误代码
| 代码 | 触发条件 | 默认信息 |
|---|---|---|
invalid | fn 返回 false | Invalid value |
可以修改这些文本:见 错误信息与国际化。
注意事项
- 在该字段所有同步规则之后执行,并且只在它们通过时执行 —— 无效的邮箱不会被发送到数据库。
- 不同字段的异步检查并行执行。
- 对于这样的 Schema,
validate和parse会抛出错误 —— 请使用异步版本。 - 不会修改值:
checkAsync只做检查。
示例
唯一的邮箱
ts
const Signup = object({
email: pipe(
string(),
trim(),
toLowerCase(),
email(),
checkAsync(async (v) => !(await db.users.exists({ email: v })), '该邮箱已注册'),
),
});
const result = await validateAsync(Signup, req.body);