[英]Check if ID exist in related mongodb collection with mongoose
我有一個“飲酒者”模型和一個“相關”的“蘇打水”模型——一個飲酒者可以喝 X 量的蘇打水。
獲取數據的路徑是這樣的
router.get('/all/:drinkerId', sodasController.getAllSodasFromDrinker)
在我的sodasController
,是有辦法檢查:drinkerId
存在於“喝酒”的收集,如果不返回酒量不存在的錯誤,而不必要求drinkersController
在sodasController
。
現在getAllSodasFromDrinker
看起來像這樣
const Sodas = require("../models/sodas.model");
exports.getAllSodasFromDrinker = async (req, res, next) => {
try {
const id = req.params.drinkerId;
if (id.match(/^[0-9a-fA-F]{24}$/)) {
await Sodas.find({ drinker: id }).exec((err, drinkerItem) => {
if (err) {
return next(err);
}
res.json({ data: drinkerItem });
});
} else {
return next("ID is in the wrong format");
}
} catch (error) {
return next(error);
}
};
在該函數中,我想檢查是否存在具有應用 ID 的用戶。
我想避免在 sodasController 中const Drinkers = require("../models/drinkers.model")
drinkers.model const Drinkers = require("../models/drinkers.model")
飲水機模型:
const Schema = mongoose.Schema;
const drinkersSchema = new Schema(
{
name: {
type: String,
required: true,
},
email: {
type: String,
required: true,
unique: true,
},
sodas: {
type: Schema.Types.ObjectId,
ref: "Sodas",
},
},
{ timestamps: true }
);
蘇打水模型
const Schema = mongoose.Schema;
const sodaSchema = new Schema(
{
name: {
type: String,
required: true,
},
drinker: {
type: Schema.Types.ObjectId,
ref: "Drinkers",
},
},
{ timestamps: true }
);
我會添加一個中間件函數來驗證drinkerId
存在。 如果存在,您可以繼續使用控制器。 如果沒有,那么你應該拋出 404 錯誤。
您的路線:
router.get(
'/all/:drinkerId',
drinkerMiddleware.exists,
sodasController.getAllSodasFromDrinker
);
飲酒者中間件:
exports.exists = async (req, res, next) => {
try {
const drinker await Drinker.find({ drinker: req.params.drinkerId }).exec();
if (!drinker) {
return next("Drinker not found.");
}
return next();
} catch (error) {
return next(error);
}
};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.