gpt4 book ai didi

mysql - 如何根据另一个模型数据验证字段

转载 作者:行者123 更新时间:2023-11-29 09:52:59 24 4
gpt4 key购买 nike

我正在尝试通过另一个模型根据数据库中存储的信息验证日期字段。

当我测试 API 时,验证工作正常,抛出异常,但是,插入发生在该异常之前。也就是说,它不会阻止插入数据库。我哪里出错了?

这是我的验证函数:

module.exports = (sequelize, DataTypes) => {
const Step = sequelize.define('Step', {
...
resultDate: {
type: DataTypes.DATE,
validate: {
isEven(value){
sequelize.models.Call
.findById(this.call_id)
.then(call => {
if(value >= call.endingDate) throw new Error('Error message here!');
});
...

这就是结果:

Executing (default): SELECT [...] `Call`.`id` = '19c7e81e-5c23-4fd5-8623-0170deee6cd4');
Executing (default): INSERT INTO `Steps` [...];
Unhandled rejection Error message here!

显然,最初的 SELECT 是为了执行验证,但是,在验证退出并抛出异常之前,API 已插入数据库并返回成功!

如何要求模型在插入之前等待所有验证?

最佳答案

通过更改自定义验证器数量(第二个参数是回调),您可以将其更改为异步处理程序。所以你的代码应该是这样的:

module.exports = (sequelize, DataTypes) => {
const Step = sequelize.define('Step', {
...
resultDate: {
type: DataTypes.DATE,
validate: {
isEven(value, next){
sequelize.models.Call
.findById(this.call_id)
.then(call => {
next(value >= call.endingDate ? 'Error message here!' : null)
})
.catch(next);
...

关于mysql - 如何根据另一个模型数据验证字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54460772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com