Node.js Mongoose模型是另一个模型的后钩子内的空对象

Node.js Mongoose模型是另一个模型的后钩子内的空对象,node.js,mongoose,Node.js,Mongoose,我的项目有两个相互参照的模型。当删除一个模型的实例时,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.

我的项目有两个相互参照的模型。当删除一个模型的实例时,
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
    放置在钩子外部,并获得与放置在钩子内部相同的行为

听起来像是有一个循环依赖关系,其中
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
  });
});

循环依赖确实存在。当我在
Album.js
中注释掉
require('photo.model')
以打破循环时,问题就解决了。您的解决方案完美且干净。非常感谢。