Узел, подключение Mongoose к IBM Bluemix Compose для Mongodb

Как вы используете Mongoose: https://github.com/Automattic/mongoose?

Пример здесь: https://github.com/IBM-Bluemix/compose-mongodb-helloworld-nodejs работал отлично. Вот упрощенный фрагмент примера кода монго:

MongoClient.connect(credentials.uri, { // step 1: connect
    mongos: {...},
    function(err, db) {
        if (err) {
            console.log(err);
        } else {
            mongodb = db.db("examples"); // step 2: create or use database
        }
    }
);

Я не могу найти пример мангуста, который использует двухэтапный процесс подключения.

Я заметил, что Compose для Mongodb не поддерживает прямое подключение к существующей базе примеров. Подключение к этому URL:

mongodb://admin:PW@bluemix...4.dblayer.com:22601,bluemix...0.dblayer.com:22601/examples'

приводит к "MongoError: ошибка аутентификации"

2 ответа

Ни фрагмент кода Фредерика (использует драйвер Mongo), ни исходный код, который он связал (подключается к db admin), не позволяют использовать mongoose для подключения к пользовательской MongoDB.

Чтобы подключиться к пользовательской базе данных с помощью mongoose IBM Compose, вы должны предоставить строку подключения, отличную от стандартной, предоставленной Compose.

Работает следующий шаблон строки подключения:

var connectionUrl = 'mongodb://<username>:<password>@<hostname>:<port>,<hostname-n>:<port-n>/<db-name>?ssl=true&authSource=admin';

со следующими параметрами:

var sslCA = [fs.readFileSync('mongo.cert')];
var options = {
  ssl: true,
  sslValidate: true,
  sslCA,
};

Я предоставил полный рабочий пример на Github

Вот отрывок из примера, который использовал Compose для MongoDB и Mongoose:

var mongoDbUrl, mongoDbOptions = {};
var mongoDbCredentials = appEnv.getServiceCreds("mycomposedb").credentials;
var ca = [new Buffer(mongoDbCredentials.ca_certificate_base64, 'base64')];
mongoDbUrl = mongoDbCredentials.uri;
mongoDbOptions = {
  mongos: {
    ssl: true,
    sslValidate: true,
    sslCA: ca,
    poolSize: 1,
    reconnectTries: 1
  }
};
console.log("Connecting to", mongoDbUrl);
mongoose.connect(mongoDbUrl, mongoDbOptions); // connect to our database

Затем вы можете переключить базу данных с помощью useDb.

Полный исходный код здесь

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