猫鼬模型是另一个模型的后钩内的空对象

NER*_*ARD 3 mongoose node.js

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

照片模型.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
    });
});
Run Code Online (Sandbox Code Playgroud)

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

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

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


题:

  • 我上面关于“require每次photo.remove()被调用时都被调用”的猜测是否正确?
  • 为什么我不能把require外面的钩子和里面的行为一样?
  • 无论如何,我可以将其require放在钩子外面并获得与将其放在里面相同的行为吗?

rob*_*lep 5

听起来您有一个循环依赖关系,其中photo.model.jsrequiresalbum.js哪个 requires 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
  });
});
Run Code Online (Sandbox Code Playgroud)