gpt4 book ai didi

sql - Sequelize : SequelizeUniqueConstraintError get conflicting row

转载 作者:行者123 更新时间:2023-12-03 22:33:56 25 4
gpt4 key购买 nike

我正在使用 Sequelize 创建后端。对于最佳实践,如果用户尝试创建重复的资源,我想返回 Location header 。检查我的代码:

try {
const resource = await Resource.create(data);
return res.status(201).send(resource);
} catch (error) {
// Error handling
switch (error.name) {
case 'SequelizeDatabaseError': return res.status(400).send(error);
case 'SequelizeUniqueConstraintError': {
// Resource location
res.location(`/${_location_}`)
return res.status(409).send(_resource_)
};
}
Obs:我不确定检查 error.name 是否是获取错误的最佳方法。知道的请评论其他人。
在控制台上打印错误我找到了错误详细信息:
{
// ...
ValidationErrorItem {
message: 'name must be unique',
type: 'unique violation',
path: 'name',
value: _value_,
origin: 'DB',
instance: [Resource],
validatorKey: 'not_unique',
validatorName: null,
validatorArgs: []
}
],
fields: { name: _value_ },
detail: 'Key (name)=(_value_) already exists.',
// ...
}
Obs: _value_ 指重复值, name 指列名。
有没有一种方法可以在不进行其他查询的情况下获取冲突资源的 id(主键、uuid 等)?如果没有,我真的应该只为返回 Location header 参数而进行查询吗?

最佳答案

我也在我的本地服务器上尝试过。我认为不可能获得冲突行的主键。
我建议在调用 .create() 之前先进行 .findOne() 查询,这样如果你发现已经存在的条目,那么你可以返回该行,这样它也可以防止在创建新条目时出错,它还可以在数据库上保存 create 查询。

关于sql - Sequelize : SequelizeUniqueConstraintError get conflicting row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63652365/

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