对于我的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中使用这些选项。有人可以帮忙吗?
祝你好运, 汤姆
答案 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 }}
});