这是验证器的文档。https:/sequelize.orgmastermanualvalidations-and-constraints.html。 . 它说,如果它失败了,要抛出一个错误
假设我有一个用户表,而且我只想添加最多500个用户,所以我创建了一个验证器。
{
sequelize,
tableName: 'users',
validate: {
limitUsers: async function(x) {
const count = await sequelize.models.User.count({...});
if (count > 500) {
throw new Error(
`blah blah`,
);
}
}
},
},
},
当我创建一个用户的时候,它是一个事务的一部分,但是调用的内容是这样的
try {
const user = await user.create(
{
...
},
{ transaction },
);
} catch (e) {
console.log('Handle error here');
....
}
由于某些原因,捕捉器没有抛出验证器中抛出的错误,它只是抛出一个500,而没有击中捕捉器。为什么会出现这种情况?难道是我不明白承诺的工作原理?
似乎验证器必须是同步的,所以这就是为什么sequelize和awaitits async验证器既不能捕获拒绝它们的原因。
一个可能的原因是,验证器必须快速,并且不使用查询(否则会有一个关于将事务传递给验证器的问题)。
复杂的异步验证应该在模型之外,应该在调用任何数据修改操作之前执行。