我们可以在猫鼬中以这种方式使用 unique: [true, "this should be unique"]

问题描述 投票:0回答:1
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 不存在。你能帮我吗?

这是正确的还是以这种方式使用它是一个很好的做法

mongodb mongoose mongoose-schema
1个回答
0
投票

不幸的是,猫鼬唯一约束与验证器不同,因此您无法将自定义错误消息传递给它们。

当您将属性定义为

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'
         })
      }
   }
})
© www.soinside.com 2019 - 2024. All rights reserved.