【问题标题】:Mongo connection closed in keystonejs app在 keystonejs 应用程序中关闭 Mongo 连接
【发布时间】:2016-10-22 12:08:35
【问题描述】:

对于我的 keystonejs 项目,我创建了两个 docker 容器(一个用于 mongo,一个用于 keystonejs 应用程序)。一切正常,除了我在浏览网站时经常遇到“连接关闭”错误(通常是当我几分钟没有导航时)。完整的错误堆栈如下:

Error thrown for request: /blog
Error: connection closed
    at null.<anonymous> (/usr/src/app/node_modules/keystone/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:618:45)
    at emitNone (events.js:67:13)
    at emit (events.js:166:7)
    at null.<anonymous> (/usr/src/app/node_modules/keystone/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:171:15)
    at emitTwo (events.js:87:13)
    at emit (events.js:172:7)
    at Socket.<anonymous> (/usr/src/app/node_modules/keystone/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:550:12)
    at emitOne (events.js:77:13)
    at Socket.emit (events.js:169:7)
    at TCP._onclose (net.js:477:12)

我进行了一些调查,stackoverflow 上的另一篇文章建议在 mongoose (mongoose output the error "Error: connection closed") 上使用 keepAlive 选项。但是,我不知道如何在 keystonejs 中使用这些选项。有人可以帮忙吗?

最好的问候, 汤姆

【问题讨论】:

    标签: node.js mongodb mongoose keystonejs


    【解决方案1】:

    keystonejs docs中,提到了

    mongoose Object | Instance of Mongoose to be used instead of the default instance.
    

    所以生成自己的可能会奏效。我刚刚取消了the answer you linked 中提到的选项。

    const mongoOptions =
    {
        db: {safe: true},
        server: {
            socketOptions: {
                keepAlive: 1
            }
        },
        replset: {
            rs_name: 'myReplSet',
            socketOptions: {
                keepAlive: 1
            }
        }
    };
    
    mongoose.connect( YOUR_URI, mongoOptions );
    
    keystone.set('mongoose', mongoose);
    

    【讨论】:

    • 谢谢,不完全是你所说的,但似乎我得到了它的工作
    【解决方案2】:

    我是这样工作的:

    var mongoose = require('mongoose');
    
    mongoose.set('server', {
            socketOptions: {
                keepAlive: 1
            }});
    
    keystone.set('mongoose', mongoose);
    

    干杯, 汤姆

    【讨论】:

      【解决方案3】:

      如果您只想配置 mongoose 选项供 keystone 使用,您可以在不启动自己的 mongoose 实例的情况下执行此操作。

      您可以使用 keystone 配置中未记录的“mongo options”属性添加 mongoose / mongo 选项,例如

      keystone.init({
          'mongo': 'yourMongoURI',
          'mongo options': { server: { keepAlive: 1 }}
      });
      

      【讨论】:

        猜你喜欢
        • 2016-09-07
        • 1970-01-01
        • 2015-05-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-17
        • 1970-01-01
        相关资源
        最近更新 更多