Node.js应用程序 - 与MongoDB连接失败,出现错误“ECONNREFUSED”

11

背景信息

我正在尝试连接到远程mongodb的第一个Node.js测试应用程序。

问题:

连接失败,出现以下消息:

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**
  • 我通过启动"mongo"并使用"use test"/"use admin"命令在测试数据库和管理员数据库之间切换,确保我有一个名为"test"的数据库。

  • 我不认为我开启了授权。这是我在mongo.conf文件中的设置:

  • # Turn on/off security.  Off is currently the default
    #noauth = true
    #auth = true
    
    为了证明这一点,为了通过命令行进入服务器上的测试数据库,我只需要键入“mongo”,然后默认情况下,我就在测试数据库中。因此,我认为可以安全地假设没有任何身份验证正在进行。
    如果有需要,我也检查了端口号:
    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帖子,但我还没有找到答案。
    有什么建议吗?

    你的netstat输出清楚地显示mongod仅在127.0.0.1接口上监听。你需要将连接字符串更改为mongodb://127.0.0.1:27017/test。 - sabertiger
    请查看我的答案:https://dev59.com/X2Ij5IYBdhLWcg3wUjoX#37994794 - itzhar
    2个回答

    5

    我可以看到你的日志显示Mongo正在监听127.0.0.1。这很可能是你的问题所在。你需要更改绑定IP地址配置设置,允许Mongo监听特定或所有IP地址。你可以在这里找到如何操作:无法使用机器IP连接到MongoDB


    或者,正如其中一条评论建议的那样,如果您的Node服务正在与Mongo运行在同一台机器上,请将连接字符串更改为localhost:mongodb://127.0.0.1:27017/test。 - tier1

    0

    打开一个终端。

    输入 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] ** 警告:数据库未启用访问控制。 I CONTROL [initandlisten] ** 数据和配置的读写访问不受限制。 I CONTROL [initandlisten] I CONTROL [initandlisten] I CONTROL [initandlisten] ** 警告:软资源限制太低。文件数是256,至少应该是1000


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接