gpt4 book ai didi

node.js - 无法解决 Mongoose 模型的循环依赖

转载 作者:行者123 更新时间:2023-12-02 00:00:42 25 4
gpt4 key购买 nike

我有 3 个模型,Book & Author & 'Category'。作者可以有多本书。类别可以有多本书,没有有效的作者或类别就无法创建图书

const schema = new mongoose.Schema(
{
title: dbHelpers.bookTitleValidation,
image: dbHelpers.imageValidation,
author: dbHelpers.bookAuthorValidation,
category: dbHelpers.categoryValidation,
reviews: [dbHelpers.bookReviewValidation],
rates: [dbHelpers.bookRateValidation],
},
{ timestamps: true }
);

我想做的是:

  • 尝试保存一本新书时,我应该验证关联的作者和类别是否有效,因此我创建了一个预“保存”中间件来验证这一点 [在导出模型之前在 Book 模型中]。
  • 当删除一个作者或类别时,所有相关的书籍都应该被删除,所以我再次创建了一个预“删除”中间件来实现这个[在导出模型之前的作者和类别模型]。

这是 Book 模型中的预“保存”中间件

schema.pre("save", async function (next) {
const author = await authorModel.findById(this.author);
if (!author) {
next(new Error("Author is not valid!"));
}

const category = await categoryModel.findById(this.category);
if (!category) {
next(new Error("Category is not valid!"));
}

next();
});

这是 Author 模型中的预“删除”中间件

schema.pre("remove", { document: true }, async function (next) {
await booksModel.find({ author: this.id }).remove();

let imgFileName = this.image.split("/")[3];
console.log("imgFileName: ", imgFileName);

await rm(__dirname + "/../" + "public/authors/" + imgFileName + ".png");

next();
});

问题是要使这些中间件工作,我必须执行以下操作 [这是我知道的方式]:

  • const booksModel = require("./Book");//在作者模型中
  • const authorModel = require("./Author");//在书籍模型中

这为 authorModel 提供了一个空对象,在搜索之后我发现这是由于循环依赖。

如何解决这个问题并继续使用这些中间件?

最佳答案

我通过不要求模型相互关联来解决这个问题。

为了访问 Mongoose 模型,我使用了这种方式:

mongoose.model('MODEL_NAME').something

通过这种方式,我能够移除循环依赖并仍然访问模型。


引用:

Hard solution: use a dependency injector. Easy solution: if you create a model using mongoose.model('Message', MessageSchema); you can then access the model with mongoose.model('Message');, so all you need to do is require('mongoose'); in the file to access your models.

https://github.com/Automattic/mongoose/issues/3826#issuecomment-178047542

关于node.js - 无法解决 Mongoose 模型的循环依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61808222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com