使用seedgoose生成数据库种子数据时遇Mongoose连接错误求助
这个错误核心是Mongoose连接冲突:要么你项目代码里多次调用了mongoose.connect(),要么seedgoose已经建立了数据库连接,你的项目代码又尝试用不同(或重复)的连接字符串发起连接,触发了Mongoose的连接校验机制。从错误栈能看到,连接是在app_server/database/models/db.js第10行通过Timeout定时器触发的,这大概率是重复执行了连接逻辑。
修复db.js的连接逻辑,改成单例模式
打开app_server/database/models/db.js,不要无条件调用mongoose.connect(),先判断当前连接状态,仅在未连接时发起连接,同时去掉可能导致重复触发的setTimeout逻辑:const mongoose = require('mongoose'); // 仅当连接未建立时才发起连接 if (mongoose.connection.readyState === 0) { mongoose.connect('你的数据库连接字符串', { useNewUrlParser: true, useUnifiedTopology: true }); } module.exports = mongoose;确保seedgoose和项目用相同的连接配置
检查seedgoose的配置文件(通常是seedgoose.config.js),里面的数据库连接字符串要和项目中Mongoose使用的完全一致。如果项目用环境变量管理连接字符串,执行seedgoose命令时要确保环境变量正确加载,比如:cross-env MONGODB_URI="你的连接字符串" npx seedgoose seed避免种子文件触发项目的连接逻辑
如果你的种子数据文件引入了项目里的模型或db.js,这些文件主动发起的连接会和seedgoose的连接冲突。可以修改种子文件,直接使用seedgoose提供的连接;或者调整项目的db.js,让它仅在项目启动时初始化连接,而非被外部模块导入时就执行。排查项目中重复的连接代码
检查项目的启动文件、其他模型文件,确保整个项目只保留一处数据库连接初始化逻辑,没有其他地方调用mongoose.connect()。
内容的提问来源于stack exchange,提问作者Mathew Dawson

