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')
以打破循环时,问题就解决了。您的解决方案完美且干净。非常感谢。