在keystonejs app中关闭了Mongo连接

时间:2016-06-21 05:09:46

标签: node.js mongodb mongoose keystonejs

对于我的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中使用这些选项。有人可以帮忙吗?

祝你好运, 汤姆

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我得到了这样的工作:

var mongoose = require('mongoose');

mongoose.set('server', {
        socketOptions: {
            keepAlive: 1
        }});

keystone.set('mongoose', mongoose);

干杯, 汤姆

答案 2 :(得分:0)

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

您可以使用未记录的&mongo选项添加mongoose / mongo选项&#39; keystone配置的属性,例如

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