Приложение nodejs - соединение mongodb с ошибкой "ECONNREFUSED"

Фоновая информация

Я играю с моим первым тестовым приложением nodejs, которое пытается подключиться к удаленному mongodb.

Проблема:

Соединение не работает со следующим сообщением:

[email protected]:~/Documents/nodejs_tests$ sudo nodejs index.js
Server has started.
Request for / received
About to route a request for: /
inside db connect method
Request for /favicon.ico received
About to route a request for: /favicon.ico
inside db connect method
MongoError: connect ECONNREFUSED
null
MongoError: connect ECONNREFUSED
null

Здесь логика для подключения:

function connect_nimble() {
        console.log("inside db connect method");
        MongoClient.connect("mongodb://10.1.1.1:27017/test", function(err,db) {
                console.log(err);
                console.log(db);
                if(!err) {
                        console.log("booya!  Connected to mongo");
                        return true;
                }
        });
}

То, что я проверил до сих пор:

  • Я убедился, что сервер базы данных использует порт 27017. Вот что я вижу в журналах mongodb при перезагрузке базы данных:

    [email protected]:~$ tail -f /var/log/mongodb/mongod.log 
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] ** WARNING: /sys/kernel/mm/transparent_hugepage/defrag is 'always'.
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] **        We suggest setting it to 'never'
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] 
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] db version v3.0.4
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] git version: 0481c958daeb2969800511e7475dc66986fa9ed5
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1f 6 Jan 2014
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] build info:  Linux ip-10-45-73-23 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 BOOST_LIB_VERSION=1_49
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] allocator: tcmalloc
    2015-07-21T09:52:41.452-0500 I CONTROL  [initandlisten] options: { config: "/etc/mongod.conf", net: { bindIp: "127.0.0.1" }, storage: { dbPath: "/var/lib/mongodb" }, systemLog: { destination: "file", logAppend: true, path: "/var/log/mongodb/mongod.log" } }
    **2015-07-21T09:52:41.470-0500 I NETWORK  [initandlisten] waiting for connections on port 27017**
    
  • Я убедился, что у меня есть база данных под названием "test", запустив "mongo"... и затем переключаясь из тестовой базы и используя ее с помощью команд "use test" / "use admin".

  • Я не верю, что у меня есть авторизация. Это то, что у меня есть в файле mongo.conf:

# Turn on/off security.  Off is currently the default
#noauth = true
#auth = true

И чтобы доказать это, чтобы попасть в тестовую базу данных на сервере через командную строку, мне просто нужно ввести "mongo", а затем по умолчанию я попал в тестовую базу данных. Поэтому я думаю, что могу с уверенностью предположить, что у меня нет аутентификации.

  1. На всякий случай, я также проверил netstat для номера порта:

    admin @mongotest: ~ $sudo netstat -taupen | grep mongo tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN 117 6465150 18792mongod
    admin @mongotest: ~ $

В настоящее время я читаю руководство, чтобы узнать, есть ли что-нибудь еще, что я должен проверять. Я также просматриваю различные записи stackoverflow, которые похожи, но я еще не нашел ответа.

Любые предложения?

Ответ 1

В ваших журналах я вижу, что Mongo слушает 127.0.0.1. Вероятно, это ваша проблема. Вам нужно будет изменить настройку конфигурации привязки ip-адреса, чтобы Mongo мог прослушивать определенные или все IP-адреса. Вы можете найти, как это сделать здесь: Невозможно подключиться к mongodb с помощью машинного ip