如何说电子邮件在 mongoose Schema 中是唯一的自定义消息

How to say custom message that the Email is unique from mongoose Schema

如何从 mongoose Schema 说出 Email 是唯一的自定义消息。我不想从我的后端检查这封电子邮件是否存在,因为我已经在 mongoose 模式中说过

email: {
    type: String,
    required: [true, "Please Enter your Email"],
    unique: [
      true,
      "Please use unique mail to create an account",
    ],
    validate: [validator.isEmail, "Please Enter a valid Email"],
  },

从 err 那里得到这条消息。控制台中的消息,但我得到的不是这个消息:"message": "E11000 duplicate key error collection: E-COMMERS_v1_Database.users index: email_1 dup key: { email: \"ej@gmail.com\" }",

我知道这条消息是什么意思,但我在

中设置了我的自定义消息
unique: [
      true,
      "Please use unique mail to create an account",
    ],

我想收到来自 mongoose/DB 的消息。如何??设置消息的方式是否正确?

我们可以在 regester 控制器中解决它,或者从后端而不是 DBM 路由任何 js 文件。所以我们可以在catch块中写一条语句:

if (e.message.includes("E11000")) {
  return res.status(500).json({
    message: "This Email Already Used try with another email",
    success: false,
  });
}

或者我们可以制作自己的错误处理函数

(err,req,res,next)=>{
  if (err.message.includes("E11000")) {
    return res.status(500).json({
      message: "This Email Already Used try with another email",
      success: false,
    });
  }
}

我们可以使用上面的错误处理函数 multi-time 来处理不同语句的各种错误,例如

module.exports = (err, req, res, next) => {
  err.statusCode = err.statusCode || 500;
  err.message = err.message || "Internal Server Error";
  return res.status(err.statusCode).json({
    success: false,
    error: err.stack,
  });
};