我的项目有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
置于钩子之外,并获得与放置在其中相同的行为吗?答案 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
});
});