Не могу подключиться к mongolab с помощью node.js на heroku
У меня проблемы с настройкой node.js и mongodb с mongolab для работы над герою. Я читал другие вопросы, как Как настроить базу данных MongoDB на Heroku с MongoLab? и как мне управлять соединениями MongoDB в веб-приложении Node.js. но я все еще не могу установить соединение. В журналах написано [Ошибка: не удалось подключиться к...]
Я взял db, host и port из env процесса MONGOLAB_URI. У меня есть следующий код:
var mongoUri = mongodb://heroku_app17328644:{password}@ds037518.mongolab.com //taken from process.env.MONGOLAB_URI
var host = 'mongodb://heroku_appXXXXXX:{password}@ds037518.mongolab.com';
var port = '37518';
var database = 'heroku_appXXXXXX';
Provider.db = new Db(database, new Server(host, port, { safe: true }, { auto_reconnect: true }, {}));
Provider.db.open(function(err, db){
console.log(db); //null
if (err) console.log(err);
else console.log('success');
});
Что я делаю неправильно?
3 ответа
Основная проблема заключается в том, что вы пытаетесь использовать URI MongoDB в качестве имени хоста.
Вот как подключиться с помощью URI и MongoClient
:
var mongodb = require('mongodb');
var uri = 'mongodb://user:pass@host:port/db';
mongodb.MongoClient.connect(uri, function (err, db) {
/* adventure! */
});
Конечно, вы хотите заменить user
, pass
, host
, port
, а также db
в uri
для ваших фактических параметров подключения. Если вы используете надстройку MongoLab для Heroku, вы можете получить URI из этой среды:
var uri = process.env.MONGOLAB_URI;
Когда используешь MongoClient
безопасный режим используется по умолчанию, поэтому эту опцию можно не указывать. Указать auto_reconnect
просто передайте это как параметр сервера.
var mongodb = require('mongodb');
var uri = 'mongodb://user:pass@host:port/db';
mongodb.MongoClient.connect(uri, { server: { auto_reconnect: true } }, function (err, db) {
/* adventure! */
});
Вот как я это делаю. Таким образом, мое приложение подключается к "тестовой" базе данных на моей машине для разработки и к базе данных "mongolab" при развертывании и запуске на Heroku.
mongoose = require("mongoose");
mongoURI = 'mongodb://localhost/test';
mongoose.connect(process.env.MONGOLAB_URI || mongoURI);
В моем собственном случае я запросил параметры конфигурации heroku config
и получается, что mongodb добавляется как MONGODB_URI
,
Итак, я добавил process.env.MONGODB_URI в URI, например:
var uri = process.env.MONGODB_URI || process.env.MONGOHQ_URL || process.env.MONGOLAB_URI;