Как подключиться к экземпляру `mongos` через TLS/SSL, используя`connect-mongo` для `express-session`?

Я использую connect-mongo в качестве модуля хранения для express-session и все работало хорошо, пока я не переключился на новый 'MongoDB+' TLS/SSL развертывание из Compose.io и теперь я не могу подключиться.

Я не знаю их архитектуры в деталях, но больше информации можно найти здесь: Использование SSL для создания MongoDB

И здесь: Идет SSL с Compose MongoDB+

И здесь: один недостающий ключ и как он сломал 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 Водитель. Я могу подключиться и выполнить все операции.

Но применение их в этом контексте ничего не дает. Это просто висит.

Любая идея, как я мог бы сделать вывод для дальнейшей отладки?

Спасибо за любую помощь!

1 ответ

Решение

Ну как получается 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();

    })
}));
Другие вопросы по тегам