在 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 中使用日期和时间?