gpt4 book ai didi

sequelize.js - 如何使用 sequelize.js 创建替换操作?

转载 作者:行者123 更新时间:2023-12-03 22:17:38 24 4
gpt4 key购买 nike

将 sequelize.js 与 express.js 一起使用。

我需要用新实例替换模型的现有实例。我希望在保存替换之前验证新实例,以确保所有必填字段都存在。但是,validate() 并没有像我期望的那样工作。在以下示例中, req.body 缺少 requiedId 。我创建了一个新的 location ,从 someAttribute 设置 req.body 并调用 validate() 。由于缺少 requiredId 并且模型将其定义为 allowNull: false ,因此我预计会出现验证错误。事实并非如此,更新愉快地运行。

sequelize.define('location', {
locationId: {
type: DataTypes.STRING,
allowNull: false,
primaryKey: true,
},
requiredId: {
type: DataTypes.INTEGER,
allowNull: false,
},
someAttribute: {
type: DataTypes.STRING,
defaultValue: 'baz'
});

var location;
models.location.findById(locationId)
.then(function (data) {
location = data;
var replacement = models.location.build({});

// req.body = { someAttribute: 'value' }
_.assign(replacement, req.body);

return replacement.validate()
.then(function () {
return location.update(replacement.toJSON());
});
}
})
.then(function () {
res.send('success');
})
.catch(function (err) {
res.status(400).send({ error:err });
});

如果我为 null 手动添加 requiredId 值,则验证错误会按预期发生。
_.assign(replacement, req.body, { requiredId: null });
replacement.validate().catch(function (err) {
// now I hit it
})

看来,当我构建模型的新实例时,sequelize 不会验证尚未设置的字段。

在 sequelize 中实现 replace 函数的正确方法是什么?旧实例应替换为包含必需字段和任何可选字段的显式值或默认值的新对象。
var original = { locationId: 1, requiredId: 2, someAttribute: 'foo'};
var new = { locationId: 1, requiredId: 3};
models.location.replace(new);
// => { locationId: 1, requiredId: 3, someAttribute: 'baz' }

最佳答案

结果我对 validate() 调用的工作方式感到困惑。我预计任何验证错误都会落在 promise 的 catch() 部分。但是,当直接调用 validate() 时,回调参数中会返回验证错误。

关于sequelize.js - 如何使用 sequelize.js 创建替换操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38728380/

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