在 mongoose + nodeJS 中检测到循环依赖

Posted

技术标签:

【中文标题】在 mongoose + nodeJS 中检测到循环依赖【英文标题】:cyclic dependency detected in mongoose + nodeJS 【发布时间】:2020-05-09 09:18:07 【问题描述】:

我收到如下错误。

错误:检测到循环依赖 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:331:34)

代码如下..

在 db.connection.js 中

const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost:27017/mean");
require("./hotel.model");

在hotel.schema.js中

const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const HotelSchema = new Schema(
    name : 
        type : String,
        required : [true, "Hotel name is required"]
    ,
    stars : 
        type : Number,
        min : 0,
        max : 5,
        default : 0
    ,
    description : String,
    services : [String]
);

mongoose.model("Hotel",HotelSchema);

在 server.js 中

const express = require("express");
const http = require("http");
const path = require("path");

const mongoose = require(path.join(__dirname,"server","db","db.connection"));

const routes = require("./server/routes")
const app = express();
port = 3000;
app.set("port",port);

app.use(express.static(path.join(__dirname,"dist")));

app.use("/api",routes);

app.use('*',(req,res)=>
    res.sendFile(__dirname,"dist","index.html");
);

const server = http.createServer(app);
server.listen(port,()=>console.log("listening to port : "+port));

所以当我运行“node server.js”时,我收到了开头提到的错误。

完整的堆栈跟踪:

F:\Full Stack course\code_base\meanhotel\node_modules\mongoose\lib\utils.js:440 抛出错误; ^

错误:检测到循环依赖 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:331:34) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17) 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:345:18) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17) 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:345:18) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17) 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:345:18) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17) 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:345:18) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17) 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:345:18) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17) 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:345:18) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17) 在 serializeObject (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:345:18) 在 serializeInto (F:\Full Stack course\code_base\meanhotel\node_modules\bson\lib\bson\parser\serializer.js:934:17)

有人可以帮我解决这个问题吗? 提前致谢。

【问题讨论】:

该错误并非来自此代码中的任何内容。查看完整的堆栈跟踪,因为它将指示它实际来自代码的哪一部分。如果您仍然无法解决这个问题,那么实际上在您的问题中包含完整的堆栈区域。 我不认为这是因为 const mongoose = require(path.join(__dirname,"server","db","db.connection"));因为如果我删除与 HotelSchema 相关的代码并将一些记录器放在 db connect 上,一切都运行良好。我猜 Schema 有问题 我尝试与您的代码一起创建相同的目录结构,一切正常。也许您可以再次删除并安装节点模块并尝试,不确定但只是一个想法 我的 mongo db 版本是 v3.6.3,mongoose 版本是 5.1.3。通过谷歌搜索,我发现这是一个特定于版本的问题,参考:github.com/Automattic/mongoose/issues/6109 但找不到解决方案。请参考“gustvao”的评论。但我没有使用 index 之类的任何参数。 【参考方案1】:

在你的 hotel.schema.js 文件的末尾添加它会有所帮助

HotelSchema.set('autoIndex', false);

【讨论】:

【参考方案2】:

更新你的猫鼬,这应该可以解决你的问题。

【讨论】:

请考虑将此作为评论而不是答案发布。获得足够的声望点后,您就可以在其他问题/答案中发布 cmets。 是的,我打算只发表评论,但由于我是新手,他们不允许我这样做,所以我只是以这种方式发布解决方案。

以上是关于在 mongoose + nodeJS 中检测到循环依赖的主要内容,如果未能解决你的问题,请参考以下文章

在数组 mongoose 中插入元素在 NodeJS 中创建 Object

如何在 NodeJS、Mongoose 和 TypeScript 中使用日期和时间?

如何在 mongodb 中自动插入记录(nodejs、express、mongoose)

nodejs中使用mongoose保存数据

nodejs中使用mongoose保存数据

MongoDB / Mongoose / nodejs 中的引用 - 并行化