【问题标题】:Checking for unique index violation with bookshelfjs使用 bookshelfjs 检查唯一索引违规
【发布时间】:2017-05-07 12:17:09
【问题描述】:
在 mongodb 中,就像在 schema/attribute/property/field 上设置 index: { unique: true } 一样简单。在书架中,您可以使用 knex 指定唯一索引。但是,您如何检查是否存在唯一密钥违规?例如,如果我将用户名、电子邮件设置为唯一键,并且有人使用相同的用户名和电子邮件创建了一条新记录,它应该会引发错误。在 Mongo 中,这就像检查 err.code 11000 一样简单。
我可以查询数据库并检查是否存在记录,但我宁愿不必进行两次查询。 (检查预先存在的用户和插入)。
【问题讨论】:
标签:
javascript
sql
postgresql
【解决方案1】:
例如,如果我将用户名、电子邮件设置为唯一键,并且有人使用相同的用户名和电子邮件创建新记录,它应该会引发错误。在 Mongo 中,这就像检查 err.code 11000 一样简单。
这与 PostgreSQL 的原理相同。你正在寻找SQLSTATE23505,即unique_violation。
我发布了this question,因为 bookshelf.js 的文档明显没有提到这一点。根据this github issue,您正在错误字典中寻找sqlState 属性,假设节点的MySQL 和PostgreSQL 驱动程序行为相同。
大概是err.sqlstate?
看起来err.code 也可能类似于UNIQUE_VIOLATION 或ERRCODE_UNIQUE_VIOLATION,但不确定。