web-dev-qa-db-ja.com

nodejsアプリケーション-mongodb接続がエラー「ECONNREFUSED」で失敗する

背景情報

リモートmongodbに接続しようとする最初のnodejsテストアプリで遊んでいます。

問題:

接続は次のメッセージで失敗します。

admin@testdev:~/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;
                }
        });
}

これまでに確認したこと:

  1. データベースサーバーがポート27017を使用していることを確認しました。データベースを再起動すると、mongodbログに表示される内容は次のとおりです。

    admin@mongotest:~$ 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**
    
  2. 「mongo」を起動し、「use test」/「use admin」コマンドを使用してテストデータベースに切り替えて、「test」というデータベースがあることを確認しました。

  3. 承認がオンになっているとは思わない。これは私が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の記事も読んでいますが、まだ答えが見つかりません。

助言がありますか?

11
dot

Mongoが127.0.0.1でリッスンしていることをログで確認できます。これはおそらくあなたの問題です。 Mongoが特定またはすべてのIPアドレスをリッスンできるようにするには、bind-ipアドレス構成設定を変更する必要があります。これを行う方法はここで見つけることができます: マシンipを使用してmongodbに接続できません

5
tier1

ターミナルを開きます。

mongod &と入力して、スタックトレースを確認します。

これは失敗した開始の例です

I STORAGE [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating I NETWORK [initandlisten] shutdown: going to close listening sockets... I NETWORK [initandlisten] shutdown: going to flush diaglog... I CONTROL [initandlisten] now exiting

これを修正するには、フォルダー/ data/dbを作成します

ターミナルで、mkdir /data/dbと入力します

もう一度入力してくださいmongod

できます !!

[initandlisten] ** WARNING: Access control is not enabled for the database. I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted. I CONTROL [initandlisten] I CONTROL [initandlisten] I CONTROL [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000

0
Garytech