我在我的 Node.js 应用程序中使用 MongoSkin,在一段时间不活动后,它失去了与数据库的连接

Posted

技术标签:

【中文标题】我在我的 Node.js 应用程序中使用 MongoSkin,在一段时间不活动后,它失去了与数据库的连接【英文标题】:I'm using MongoSkin in my Node.js application and after a period of inactivity it loses connectivity with the database 【发布时间】:2013-02-16 14:20:31 【问题描述】:

我正在构建my first Node.js application,但遇到了MongoDB 的问题。我正在使用 MongoSkin 驱动程序。

一旦我启动我的应用程序,一切都会很好。我可以坐着玩它一个小时,它会继续工作。但是,如果我让它静置几分钟而没有任何活动,那么下一个请求将导致错误:

错误:连接已关闭 在 Server.connect.connectionPool.on.server._serverState (X:\Code\CodeTunnel\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\server.js:520:35) 在 EventEmitter.emit (events.js:126:20) 在 connection.on._self._poolState (X:\Code\CodeTunnel\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\connection_pool.js:109:15) 在 EventEmitter.emit (events.js:99:17) 在 Socket.closeHandler (X:\Code\CodeTunnel\node_modules\mongoskin\node_modules\mongodb\lib\mongodb\connection\connection.js:427:12) 在 Socket.EventEmitter.emit (events.js:96:17) 在 Socket._destroy.destroyed (net.js:358:10) 在 process.startup.processNextTick.process._tickCallback (node.js:244:9)

我已尝试按照mongoskin documentation 的建议将auto_reconnect=true 添加到连接字符串中,但这没有帮助。

【问题讨论】:

【参考方案1】:

我最终想通了这一点。解决方案相当简单。

USE MONGOOSE

...或者别的什么

我在使用 MongoSkin 时遇到过问题,在终于花时间学习 Mongoose 之后,我还是更喜欢它。模型范式很棒,尤其是因为每个模型都有自己的持久化方法来保存对文档的更改。使用 Promise 创建流畅的查询 API 比原生 MongoDB 驱动程序提供的标准回调地狱更强大且更易于阅读。 MongoSkin 仅略微缓解了回调地狱,并且仍然很难阅读更复杂的查询。

编辑:投反对票……真的吗?否决票先生,您脑子里在想什么? “Mongoose 不是我首选的 ORM,所以这里投反对票。”

【讨论】:

我得出了同样的结论。讨厌投票是匿名的事实。

以上是关于我在我的 Node.js 应用程序中使用 MongoSkin,在一段时间不活动后,它失去了与数据库的连接的主要内容,如果未能解决你的问题,请参考以下文章

使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本

如何在我的简单 Express 应用中使用 Node.js 集群?

如何在 Winston/Node.js 中设置日志级别

如何提取正文请求 node.js

如何在node js中解压二进制数据

如何使用 node.js 获取图像上传进度并在我的 iphone 应用程序中使用它