import mongoose from "mongoose";
const userSchema = new mongoose.Schema(
{
name: {
type: String,
required: [true, "Please provide your name."],
minLength: [3, "Name must be at least 3 characters long"],
maxLength: [50, "Name cannot exceed 50 characters"],
trim: true,
index: true,
},
username: {
type: String,
required: [true, "Please provide a username."],
minLength: [3, "Username must be at least 3 characters long"],
maxLength: [30, "Username cannot exceed 30 characters"],
unique: [
true,
"This username is already taken. Please choose another one.",
],
lowercase: true,
trim: true,
index: true,
},
email: {
type: String,
required: [true, "Please provide your email address."],
unique: [
true,
"This email address is already registered. Please login or use a different one.",
],
lowercase: true,
trim: true,
},
password: {
type: String,
required: [true, "Please provide a password."],
minLength: [8, "Password must be at least 8 characters long"],
maxLength: [50, "Password cannot exceed 50 characters"],
},
},
{ timestamps: true }
);
export const User = mongoose.model("User", userSchema);
我们可以这样使用 unique 吗?
我看过 mongoose 文档,required、maxLength、minLength 已在那里使用,但 unique 不存在。你能帮我吗?
这是正确的还是以这种方式使用它是一个很好的做法
不幸的是,猫鼬唯一约束与验证器不同,因此您无法将自定义错误消息传递给它们。
当您将属性定义为
unique: true
时,Mongoose 使用 MongoDB 唯一索引,因此您可以检查本机驱动程序在文档创建期间抛出的 E11000
错误,并根据需要使用自定义消息进行响应。
类似这样的:
app.post('/user', async (req, res) => {
try{
const newUser = await User.create({
name: req.body.name,
username: req.body.username,
email: req.body.email,
password: req.body.password
});
return res.status(201).json({
message: 'New User Created'
})
}catch(err){
console.log(err);
if(err.code === 11000){
return res.status(400).json({
error: 'Email Address Already In Use.'
})
}else{
return res.status(500).json({
error: 'Error on Server'
})
}
}
})