繁体   English   中英

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

[英]Why is there no message in mongoose error object?

我正在进行用户注册 API,其中名称和 email 设置为唯一。 当我发送与现有用户具有相同 email 地址的 JSON object 时,它会按预期给出错误。 但是该错误中没有任何消息,然后我可以使用它来提供更有用的消息。

下面是我得到的错误 object。

{ "index": 0,    
 "code": 11000,
 "keyPattern": {
    "email": 1
},
 "keyValue": {
    "email": "pranatkarode@rocketmail.com"
 }
}

这是我的 controller 模块,

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

Mongoose 的默认错误 object 专为非受限用例而设计。 因此,您需要查看它并根据它包含的内容添加自定义消息。 对于您的这个特定用例,您可以例如这样做:

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语法来获得更好看的代码,你的也可以。

我建议将 await/async try/catch 块包装到您的方法中,并在尝试保存到数据库之前检查您是否从 req.body 获得任何内容:

    exports.signUp = async (req,res)=>{
      try { 
        const user=new User(req.body);
        if (!user) throw new Error("Your message ...");
        user.save();
        // res.status(201).json(user);
      } catch {
        res.status(422).json({ message: err.message ?? err });
      }
    }

解决方案非常简单,只需在 await user.save 之前删除 await 并繁荣一切都应该没问题...但是如果问题仍然存在,请检查 ur.env 文件中的用户名和密码并确保它们正确,你也应该确保您的 ip 地址在地图集中设置为 0.0.0.0 和您当前的 ip。 之前 = 等待 user.save(); 之后=用户。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM