MongoDB唯一索引自定义错误信息 E11000

6
有没有办法在MongoDB中为'E11000重复键错误'设置自定义错误消息?
(最好使用Mongoose):
userSchema.index({ name: 1, email: 1 }, { unique: true });

什么更好:生成一个新的错误还是在进入数据库之前使用userSchema.findOne({email})并创建一个简单的条件语句。 - ValRob
3个回答

7

1)你可以使用mongoose-unique-validator。

https://www.npmjs.com/package/mongoose-unique-validator

这使得错误处理更加容易,因为当你试图违反唯一约束时,你将得到一个Mongoose验证错误,而不是来自MongoDB的E11000错误。

2)在What am I doing wrong in this Mongoose unique pre-save validation?中提到,你也可以在express中使用预保存方法。

Schema.pre("save",function(next, done) {
//Here you can search if the record already exists and return custom message.
next();
});

5
你可以使用 mongoose-beautiful-unique-validation 轻松定制和显示关于 unique: true 验证错误的错误信息。
只需使用该包mongoose-beautiful-unique-validation 即可实现。
npm install --save mongoose-beautiful-unique-validation

然后你可以将其作为全局插件(如下所示)或按模式使用。

const beautifyUnique = require('mongoose-beautiful-unique-validation');

mongoose.plugin(beautifyUnique);

为了获得全面的洞察和参考,请查看此评论和GitHub上的Readme
您还可以使用mongoose-validation-error-transform包来显示Mongoose验证错误消息。

2

不行,除非更改MongoDB源代码并重新编译以使用新的错误消息。您可以在应用程序代码中将消息替换为更喜欢的消息。例如,您可以仅将索引构建调用包装在一个函数中,如果发生唯一键约束冲突错误,则返回不同的错误消息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接