使用bookshelfjs检查唯一索引违规

时间:2017-05-05 23:43:00

标签: javascript sql postgresql

在mongodb中,它就像在schema / attribute / property / field上设置索引:{unique:true}一样简单。在bookshelf中,您可以使用knex指定唯一索引。但是,您如何检查是否存在唯一的密钥违规?例如,如果我设置用户名,电子邮件作为唯一键,并且有人使用相同的用户名和电子邮件创建新记录,则应该抛出错误。在Mongo中,这就像检查err.code 11000一样简单。

我可以查询数据库并检查是否存在记录,但我宁愿不必进行两次查询。 (检查预先存在的用户和插入)。

1 个答案:

答案 0 :(得分:0)

  

例如,如果我设置用户名,电子邮件作为唯一键,并且有人使用相同的用户名和电子邮件创建新记录,则应该抛出错误。在Mongo中,这就像检查err.code 11000一样简单。

这与PostgreSQL的原理相同。您正在寻找SQLSTATE 23505,即unique_violation

我发布了https://github.com/firebase/functions-samples/blob/master/fcm-notifications/functions/index.js,因为bookshelf.js的文档显然没有提到这一点。根据{{​​3}},您在错误字典中寻找sqlState属性,假设节点的MySQL和PostgreSQL驱动程序的行为相同。

大概是err.sqlstate

看起来err.code可能类似UNIQUE_VIOLATIONERRCODE_UNIQUE_VIOLATION,但不确定。