簡體   English   中英

ZCCADCDEDB567ABAE643E15DCF0974E503Z 返回空數組

[英]Mongoose returning empty array

我在 Mongo 有一個數據庫,有 2 個 collections、用戶和活動。 對於前者,我的所有請求(get、post、patch 等)都能正常工作。 但是,我遇到了廣告系列的問題。

我可以在 postman 中創建一個新廣告系列,但不能“獲取”廣告系列。 該請求似乎成功,但返回一個空數組。

我將活動分為:campaignController、***Model、***Routes、

和一個 handlerFactory 來覆蓋用戶和活動。

處理程序工廠:

exports.getAll = Model =>
  catchAsync(async (req, res, next) => {
    // To allow for nested GET reviews on tour (hack)
    let filter = {};
    if (req.params.campaignId) filter = { campaign: req.params.campaignId };

    const features = new APIFeatures(Model.find(filter), req.query)
      .filter()
      .sort()
      .limitFields()
      .paginate();
    // const doc = await features.query.explain();
    const doc = await features.query;

    // SEND RESPONSE
    console.log('-------', doc);
    res.status(200).json({
      status: 'success',
      results: doc.length,
      data: {
        data: doc
      }
    });
  });

活動 Model:

const campaignSchema = new mongoose.Schema({
    name: {
        type: String,
        required: [true, 'Campaign name can not be empty!']
    },
    clientID: {
        type: String,
    },
    creator_id: {
        type: String,
    },
    budget: {
        type: Number,
        min: 100,
        required: [true, 'Campaign name can not be empty!']
    },
    startStatus: {
    type: String,
    enum: ['preStart', 'isStarted', 'preEnd'],
    default: 'preStart'
    },
    startDate: {
        type: Date,
    },
    createdAt: {
      type: Date,
      default: Date.now
    },
    updatedAt: {type: Date,
      default: Date.now
    },
    isDeleted: {
        type: Boolean,
        // required: [true, 'Must be true or false!']
        default: false
    },
    Priority: {
        type: Boolean,
        default: false,
    },
    location: {
        type: String,
        enum: ['Helsinki', 'Tallinn'],
        default: 'Helsinki'
    }
});

campaignSchema.pre('save', function(next) {
    if (!this.isModified('createdAt') || this.isNew) return next();

  this.updatedAt = Date.now() - 1000;
  next();
});

campaignSchema.pre(/^find/, function(next) {
  // this points to the current query
  this.find({ isDeleted: { $ne: false } });
  next();
});


const Campaign = mongoose.model('Campaign', campaignSchema);

module.exports = Campaign;

活動控制器:

exports.getAllCampaigns = factory.getAll(Campaign);
exports.getCampaign = factory.getOne(Campaign);
exports.createCampaign = factory.createOne(Campaign);
exports.updateCampaign = factory.updateOne(Campaign);
exports.deleteCampaign = factory.deleteOne(Campaign);

exports.getMe = (req, res, next) => {
  req.params.id = req.campaign.id;
  next();
};

exports.deleteCurrentCampaign = catchAsync(async (req, res, next) => {
  await User.findByIdAndUpdate(req.campaign.id, { active: false });

  res.status(204).json({
    status: 'success',
    data: null
  });
});

競選路線:

const router = express.Router();

router
  .route('/')
  .get(campaignController.getAllCampaigns)
  .post(
    authController.protect,
    authController.restrictTo('admin', 'super-admin'),
    campaignController.createCampaign
  );

router
  .route('/:id')
  .get(campaignController.getCampaign)
  .patch(
    authController.protect,
    authController.restrictTo('admin', 'super-admin'),
    campaignController.updateCampaign
  )
  .delete(
    authController.protect,
    authController.restrictTo('admin', 'super-admin'),
    campaignController.deleteCampaign
  );

module.exports = router;

知道我哪里出錯了嗎?

所有代碼看起來都不錯,但問題可能是,您的集合不包含任何 isDeleted=true 的記錄。

因為在任何 find* 查詢之前調用了campaignModel 中的“查找查詢中間件”,它會找到所有isDeleted.= false 的文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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