Node.js 处理多个重复错误mongoose节点

Node.js 处理多个重复错误mongoose节点,node.js,mongoose,Node.js,Mongoose,我有这样的用户模式 const UserSchema = new Schema({ username: { type: String, unique: true, required: true, lowercase: true, trim: true }, email: { type: String, unique: true, required: true }, phoneNumber: { type

我有这样的用户模式

const UserSchema = new Schema({
  username: {
    type: String,
    unique: true,
    required: true,
    lowercase: true,
    trim: true
  },
  email: {
    type: String,
    unique: true,
    required: true
  },

  phoneNumber: {
    type: Number,
    unique: true,
    required: true
  },
});
当我使用重复的
名称
电话号码
电子邮件发布用户时。我收到如下错误:
这是错误消息
E11000重复密钥错误集合:project.users索引:username_1 dup key:{:“john”}

所以我的问题是,我如何知道它是一个重复的名字或重复的电话号码。我想接收这样的错误

This phone number has been already used
This name has been already used

或者,您可以使用
路径


您可以在错误处理程序中捕获错误。可以使用正则表达式获取路径名和值。简单的例子:

app.use((err, req, res, next) => {
  if (err.code === 11000 || err.code === 11001) {
        const pathRegex = err.message.match(/\.\$([a-z]+)/)
        const path = pathRegex ? pathRegex[1] : '';
        const keyRegex = err.message.match(/key:\s+{\s+:\s\"(.*)(?=\")/)
        const key = keyRegex ? keyRegex[1] : '';
        return res.status(409)
            .json({ status: false, message: `${path} '${key}' already exists`})
    }
}

您还可以检查是否生成一个mongoose“ValidationError”,您可以更轻松地解析它。

因此,您的建议是在尝试持久化文档之前执行3个查询?@RenatoGama该模型有三个唯一键,因此如果任务是在三个不同的键中查找文档是否唯一,因此提到了三个路径验证器,带有
unique
错误,这是实际的ask。请让我知道,如果有任何替代品?我正在寻找一个替代品以及!
app.use((err, req, res, next) => {
  if (err.code === 11000 || err.code === 11001) {
        const pathRegex = err.message.match(/\.\$([a-z]+)/)
        const path = pathRegex ? pathRegex[1] : '';
        const keyRegex = err.message.match(/key:\s+{\s+:\s\"(.*)(?=\")/)
        const key = keyRegex ? keyRegex[1] : '';
        return res.status(409)
            .json({ status: false, message: `${path} '${key}' already exists`})
    }
}