我的项目有 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
放在钩子外面并获得与将其放在里面相同的行为吗?听起来您有一个循环依赖关系,其中photo.model.js
requiresalbum.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)
归档时间: |
|
查看次数: |
467 次 |
最近记录: |