MongoError:升级猫鼬模块后处于无效状态的服务器实例未定义

Posted

技术标签:

【中文标题】MongoError:升级猫鼬模块后处于无效状态的服务器实例未定义【英文标题】:MongoError: server instance in invalid state undefined after upgrading mongoose module 【发布时间】:2017-03-11 00:51:50 【问题描述】:

我将我的 mongoose npm 模块从 "mongoose": "~3.8.8" 更新为 "mongoose": "^4.1.12"。我正在使用简单的 MEAN 项目,就像 documented here 一样,升级 mongoose 节点模块后出现以下错误:

MongoError: server instance in invalid state undefined
    at Function.MongoError.create (SampleProject\node_modules\mongodb-core\lib\error.js:29:11)
    at Server.connect (SampleProject\node_modules\mongodb-core\lib\topologies\server.js:341:22)
    at Server.connect (SampleProject\node_modules\mongoose\node_modules\mongodb\lib\server.js:357:17)
    at open (SampleProject\node_modules\mongoose\node_modules\mongodb\lib\db.js:222:19)
    at Db.open (SampleProject\node_modules\mongoose\node_modules\mongodb\lib\db.js:245:44)
    at MongoStore._open_database (SampleProject\node_modules\connect-mongo\lib\connect-mongo.js:182:15)
    at MongoStore._get_collection (SampleProject\node_modules\connect-mongo\lib\connect-mongo.js:177:14)
    at MongoStore.get (SampleProject\node_modules\connect-mongo\lib\connect-mongo.js:222:10)
    at Layer.session [as handle] (SampleProject\node_modules\express-session\index.js:204:11)
    at trim_prefix (SampleProject\node_modules\express\lib\router\index.js:230:15)
    at SampleProject\node_modules\express\lib\router\index.js:198:9
    at Function.proto.process_params (SampleProject\node_modules\express\lib\router\index.js:253:12)

有什么帮助吗?

【问题讨论】:

将 Mongoose 升级到 4.7.0 后对我来说也是如此 @jmcollin92 运气好吗? 是的。我的 MongoDB 实例根本无法访问(Mongod 听 127.0.0.1 而不是 0.0.0.0)。因此连接被阻塞,随后对 Mongoose 的调用失败并出现此错误。错误不是很清楚,但案例已确定。 @jmcollin92 你能发布一个答案,并附上解决问题的步骤。请它会帮助包括我自己在内的其他人。 是的,当然。打开您的 /etc/mongod.conf 文件,并将具有以下内容的行:bindIp:127.0.0.1 更改为 bindIp:0.0.0.0。然后重启 MongoDB。 【参考方案1】:

这是我的案例的解决方案。 当 Mongoose 连接启动并且您尝试在连接完成之前访问数据库时会出现此错误。

在我的例子中,我的 MongoDB 在 Docker 容器中运行,该容器公开了 27017 端口。 为了能够在 Container 外部公开端口,Container 内部的 mongod 进程必须监听 0.0.0.0 而不仅仅是 127.0.0.1(这是默认值)。 因此,连接指令挂起,程序在结束前尝试访问集合。 要修复它,只需更改 /etc/mongod.conf 文件并将 bindIp: 127.0.0.1 更改为 bindIp: 0.0.0.0

我想这个错误对人类来说应该更全面......像“连接开始但未完成”这样的东西会更好地理解。

【讨论】:

以上是关于MongoError:升级猫鼬模块后处于无效状态的服务器实例未定义的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬 MongoError : 11000

开玩笑单元测试返回“MongoError:拓扑被破坏”

猫鼬批量插入错误

MongoError:虚线字段..对存储无效

MongoError:无效操作,没有批量操作

MongoError:尝试删除集合时未找到 ns