我的项目有两个相互引用的模型。当一个模型的实例被删除时,remove()
方法将挂钩另一个模型以删除依赖关系。
照片.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
});
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)