Не могу подключиться к 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;
Другие вопросы по тегам