[英]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.