0

connect-mongo用作 的存储模块express-session,一切正常,直到我'MongoDB+' TLS/SSL从 切换到新部署Compose.io,现在我无法连接。

我不详细了解他们的架构,但可以在这里找到更多信息: Bringing SSL To Compose MongoDB

在这里: 使用 Compose MongoDB+ 使用 SSL

在这里: 一个丢失的密钥以及它是如何破坏 Node.js 的

我确实知道,当您连接时,您需要声明mongos选项,并且您的连接代码最终看起来像这样:

var fs = require('fs');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);

var ca = [fs.readFileSync('./Mongo-Key.pem')];

var url = 'mongodb://MY_MONGO_USER:MY_MONGO_PASS@mongos1.compose.io:12345,mongos2.compose.io:54321/Sessions';

app.use(session({
    key : 'SessionKey',
    secret : 'CATONTHEKEYBOARD',
    cookie : {
        path : '/',
        httpOnly : true,
        maxAge : null
    },
    store : new MongoStore({
        url : url,
        mongoOptions : {
            mongos : {
                ssl : true,
                sslValidate : true,
                sslCA : ca,
                ca : ca, 
                poolSize : 1,
                reconnectTries : 1
            }
        },
        collection : 'sessions',
        stringify : false
    }, function(result) {

        console.log('Connected to sessions db!');
        return next();

    })
}));

该连接字符串与这些连接选项一起使用mongo-native驱动程序工作。我可以连接并执行所有操作。

但是在这种情况下应用它们会产生......什么都没有。它只是挂起。

知道如何产生任何输出以进一步调试吗?

谢谢你的帮助!

4

1 回答 1

0

好吧,事实证明connect-mongo在最近的版本中删除了第二个参数(我试图用作回调的那个)。所以问题是我的回调从未被调用过。

如下调整代码是有效的:

var fs = require('fs');
var session = require('express-session');
var MongoStore = require('connect-mongo')(session);

var ca = [fs.readFileSync('./Mongo-Key.pem')];

var url = 'mongodb://MY_MONGO_USER:MY_MONGO_PASS@mongos1.compose.io:12345,mongos2.compose.io:54321/Sessions';

app.use(session({
    key : 'SessionKey',
    secret : 'CATONTHEKEYBOARD',
    cookie : {
        path : '/',
        httpOnly : true,
        maxAge : null
    },
    store : new MongoStore({
        url : url,
        mongoOptions : {
            mongos : {
                ssl : true,
                sslValidate : true,
                sslCA : ca,
                ca : ca, 
                poolSize : 1,
                reconnectTries : 1
            }
        },
        collection : 'sessions',
        stringify : false
    }).on('connected', function(result) {

        console.log('Connected to sessions db!');
        return next();

    })
}));
于 2015-07-29T18:56:10.187 回答