为什么mongoose错误对象中没有消息?

4
我正在制作一个用户注册API,其中姓名和电子邮件被设置为唯一。当我发送一个具有与现有用户相同的电子邮件地址的JSON对象时,会按预期生成错误。 但是该错误中没有信息,我随后可以使用它来提供更可用的消息。
以下是我收到的错误对象。
{ "index": 0,    
 "code": 11000,
 "keyPattern": {
    "email": 1
},
 "keyValue": {
    "email": "pranatkarode@rocketmail.com"
 }
}

这是我的控制器模块,

const User=require("../models/userModels.js");
exports.signUp=(req,res)=>{
const user=new User(req.body);
user.save((err,user)=>{
    if(err){
        res.send(err)
    }
    else{
        res.json({
            user
        })
    }
})
}

嗨,Pranat,你有没有检查下面的答案? - Youssouf Oumar
2个回答

3

Mongoose的默认错误对象设计用于非限制性用例。因此,您需要查看它,并根据其包含的内容添加自定义消息。对于您的这个特定用例,您可以像这样操作:

const User = require("../models/userModels.js");
exports.signUp = async (req, res) => {
  try {
    const user = new User(req.body);
    await user.save();
    res.json({
      user,
    });
  } catch (err) {
    if (err.code === 11000 && err?.keyPattern.hasOwnProperty("email")) {
      err.message = "This email is alrady used.";
    } else if (err.code === 11000 && err?.keyPattern.hasOwnProperty("name")) {
      err.message = "This name is alrady taken.";
    }
    res.send(err);
  }
};

我在这里使用async/await语法,以使代码更加简洁易懂,你也可以使用其他语法实现相同的效果。


1
我还建议检查 err.code,看看它是否真的是一个重复键错误(代码11000)。 - robertklep

0
解决方案非常简单,只需在user.save之前删除await,一切都应该正常...但如果问题仍然存在,请检查您的.env文件中的用户名和密码,并确保它们是正确的,还应确保您的IP地址设置为0.0.0.0和atlas中的当前IP。

之前:

await user.save();

之后:

user

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接