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`})
}
}