Узел, подключение 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.