Mongoose模型是另一个模型的post hook内的空对象

时间:2017-06-29 03:44:02

标签: node.js mongoose

我的项目有2个模型互相引用。删除一个模型的实例时,remove()方法将挂钩另一个模型以删除依赖项。

photo.model.js

const Album = require('./album');
       .
       .
// post hook of photo.remove()
schema.post('remove', (photo, next) => {

  console.log(Album);  // return empty obj {}

  Album.findById(photo._album, (error, album) => {
        // find album and remove photo
    });
});

删除钩子中的相册模型返回空对象。我通过在钩子内移动require语句找到了修复。

schema.post('remove', (photo, next) => {
  const Album = require('./album');
  Album.findById(photo._album, (error, album) => {
        // find album and remove photo
    });
});  

但是修复看起来很难看,我的猜测是每次调用photo.remove() require语句。

问题:

  • 我的猜测高于“require每次photo.remove()被称为”require是否正确?
  • 为什么我不能将require放在钩子之外并且具有与内部相同的行为?
  • 无论如何,我可以将microBatchThread置于钩子之外,并获得与放置在其中相同的行为吗?

1 个答案:

答案 0 :(得分:2)

听起来你有一个循环依赖,photo.model.js需要album.js需要photo.model.js,...

要解决此问题,您可以使用:

const mongoose = require('mongoose');

schema.post('remove', (photo, next) => {
  mongoose.model('Album').findById(photo._album, (error, album) => {
    // find album and remove photo
  });
});