2013-08-06 3 views
5

У меня возникли проблемы с созданием node.js и mongodb с mongolab, работающими на heroku. Я прочитал другие вопросы, такие как How do I setup MongoDB database on Heroku with MongoLab? и How do I manage MongoDB connections in a Node.js web application?, но я до сих пор не могу настроить свое соединение. В журналах он говорит [Ошибка: не удалось подключиться к ...]не удается подключиться к mongolab с node.js на heroku

Я takend БД, хост и порт из процесса MONGOLAB_URI env.I имеют следующий код:

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'); 
}); 

Что я Я делаю неправильно?

+0

Что сообщение об ошибке, что вы получите? – Derick

+0

Он получает 'Ошибка: не удалось подключиться к ...', а 'db' - null :) – randunel

+0

Это не полное сообщение об ошибке ... – Derick

ответ

13

Основная проблема заключается в том, что вы пытаетесь использовать URI MongoDB в качестве имени хоста.

Вот как подключиться с помощью URI и MongoClient:

var mongodb = require('mongodb'); 
var uri = 'mongodb://user:[email protected]:port/db'; 
mongodb.MongoClient.connect(uri, function (err, db) { 
    /* adventure! */ 
}); 

Конечно, вы хотите заменить user, pass, host, port и в uridb для фактических параметров CONNECT. Если вы используете MongoLab add-on for Heroku вы можете получить URI из окружающей среды, как это:

var uri = process.env.MONGOLAB_URI; 

При использовании MongoClient безопасного режима по умолчанию, так что опция может быть опущена. Чтобы указать auto_reconnect, просто передайте его в качестве опции сервера.

var mongodb = require('mongodb'); 
var uri = 'mongodb://user:[email protected]:port/db'; 
mongodb.MongoClient.connect(uri, { server: { auto_reconnect: true } }, function (err, db) { 
    /* adventure! */ 
}); 
4

Вот как я это делаю. Таким образом, мое приложение подключается к базе данных «test» на моей машине разработки и базе данных «mongolab» при развертывании и запуске на Heroku.

mongoose = require("mongoose"); 
mongoURI = 'mongodb://localhost/test'; 
mongoose.connect(process.env.MONGOLAB_URI || mongoURI); 
4

В моем случае, я опрошена настройки heroku config конфигурации и получается, что MongoDB добавляется в качестве MONGODB_URI.

Итак, я добавил process.env.MONGODB_URI к Ури, таких как:

var uri = process.env.MONGODB_URI || process.env.MONGOHQ_URL || process.env.MONGOLAB_URI; 
Смежные вопросы