【问题标题】:MongoDB unique index custom error message E11000MongoDB唯一索引自定义错误信息E11000
【发布时间】:2017-12-23 22:47:21
【问题描述】:

有没有办法在 MongoDB 中为“E11000 重复键错误”设置自定义错误消息?
(最好使用猫鼬):

userSchema.index({ name: 1, email: 1 }, { unique: true });

【问题讨论】:

  • 更好的是:生成一个新错误或userSchema.findOne({email}) 并在进入数据库之前创建一个简单的条件。

标签: node.js mongodb mongoose


【解决方案1】:

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 中使用 pre-save 方法

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

【讨论】:

    【解决方案2】:

    您可以使用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 上的 commentReadme

    您可能还想使用包 mongoose-validation-error-transform 来显示 Mongoose 验证错误消息。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-03-22
        • 2018-01-19
        • 2020-11-06
        • 2018-01-31
        相关资源
        最近更新 更多