簡體   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