簡體   English   中英

使用 mongoose 檢查相關 mongodb 集合中是否存在 ID

[英]Check if ID exist in related mongodb collection with mongoose

我有一個“飲酒者”模型和一個“相關”的“蘇打水”模型——一個飲酒者可以喝 X 量的蘇打水。

獲取數據的路徑是這樣的

router.get('/all/:drinkerId', sodasController.getAllSodasFromDrinker)

在我的sodasController ,是有辦法檢查:drinkerId存在於“喝酒”的收集,如果不返回酒量不存在的錯誤,而不必要求drinkersControllersodasController

現在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM