代码之家  ›  专栏  ›  技术社区  ›  Thijs Koerselman

无法从Ubuntu上的NodeJS连接到MongoDB。OSX上的相同代码运行良好

  •  0
  • Thijs Koerselman  · 技术社区  · 14 年前

    我在osx笔记本电脑和远程ubuntu服务器上本地安装了mongodb。两者都运行着mongodb,我可以使用端口28017上的http诊断来验证这一点。我在两台计算机上运行相同的代码。在osx上一切都很好,但在Ubuntu上我无法通过NodeJS连接到数据库。我一直收到这样的错误:

    Error: failed to connect to [localhost:27017]]
    message:  listen EADDRNOTAVAIL
    stack:  Error: listen EADDRNOTAVAIL
        at errnoException (net.js:769:11)
        at Server._listen2 (net.js:892:19)
        at listen (net.js:936:10)
        at Server.listen (net.js:993:9)
        at asyncCallback (dns.js:67:16)
        at Object.onanswer [as oncomplete] (dns.js:120:9)
    

    我不明白的是,我可以通过mongo命令行接口在Ubuntu上进行本地连接。我还可以通过OSX计算机上的mongo命令连接到Ubuntu上的数据库。因此,MongoDB本身的安装似乎没有什么问题。

    有人能想到我不能通过NodeJS连接的原因吗?我已经尝试过使用mongodb和mongoose包。两者都给了我相同的错误。

    以下是我尝试过的两种方法:

    var mongo = require("mongodb");
    var host = "localhost";
    var port = mongo.Connection.DEFAULT_PORT;
    var db = new mongo.Db('node-mongo-examples', new mongo.Server(host, port, {}), {});
    db.open(function(err, db){
        if(err){
            log.error('MongoDB connection error:', err);
        }else{
            log.info("OPEN MONGO CONNECTION");
        }
    });
    

    和猫鼬:

    var mongoose = require('mongoose');
    var db = mongoose.createConnection('localhost', 'node-mongo-examples');
    
    db.on('error', function(err){
      log.error('MongoDB connection error:', err);
    });
    
    db.once('open', function () {
      log.debug("OPEN MONGO CONNECTION");
    });
    

    在日志中,我没有看到任何特别的东西,也没有发生任何事情

    ***** SERVER RESTARTED *****
    
    Wed Sep 26 18:00:18 [initandlisten] MongoDB starting : pid=13377 port=27017 dbpath=/var/lib/mongodb 64-bit host=octo-dev
    Wed Sep 26 18:00:18 [initandlisten] db version v2.2.0, pdfile version 4.5
    Wed Sep 26 18:00:18 [initandlisten] git version: f5e83eae9cfbec7fb7a071321928f00d1b0c5207
    Wed Sep 26 18:00:18 [initandlisten] build info: Linux ip-10-2-29-40 2.6.21.7-2.ec2.v1.2.fc8xen #1 SMP Fri Nov 20 17:48:28 EST 2009 x86_64 BOOST_LIB_VERSION=1_49
    Wed Sep 26 18:00:18 [initandlisten] options: { config: "/etc/mongodb.conf", dbpath: "/var/lib/mongodb", logappend: "true", logpath: "/var/log/mongodb/mongodb.log" }
    Wed Sep 26 18:00:18 [initandlisten] journal dir=/var/lib/mongodb/journal
    Wed Sep 26 18:00:18 [initandlisten] recover : no journal files present, no recovery needed
    Wed Sep 26 18:00:18 [websvr] admin web console waiting for connections on port 28017
    Wed Sep 26 18:00:18 [initandlisten] waiting for connections on port 27017
    

    …..除非我通过mongo命令行接口连接:

    Wed Sep 26 18:30:40 [initandlisten] connection accepted from 127.0.0.1:38229 #3 (1 connection now open)
    

    我没有什么可试的了。有什么解决问题的建议吗?


    一些额外信息

    sudo netstat -tulpn
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      13377/mongod    
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      885/mysqld      
    tcp        0      0 0.0.0.0:1935            0.0.0.0:*               LISTEN      1102/java       
    tcp        0      0 0.0.0.0:9999            0.0.0.0:*               LISTEN      1102/java       
    tcp        0      0 192.87.219.76:10000     0.0.0.0:*               LISTEN      31171/webserver 
    tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1387/java       
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1076/apache2    
    tcp        0      0 0.0.0.0:28017           0.0.0.0:*               LISTEN      13377/mongod    
    tcp        0      0 0.0.0.0:48466           0.0.0.0:*               LISTEN      12418/java      
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      3507/sshd       
    tcp        0      0 127.0.0.1:9016          0.0.0.0:*               LISTEN      12418/java      
    tcp        0      0 0.0.0.0:5080            0.0.0.0:*               LISTEN      1102/java       
    tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      1216/master     
    tcp        0      0 0.0.0.0:41018           0.0.0.0:*               LISTEN      12418/java      
    tcp        0      0 0.0.0.0:8443            0.0.0.0:*               LISTEN      1102/java       
    tcp        0      0 0.0.0.0:9090            0.0.0.0:*               LISTEN      12418/java      
    tcp        0      0 0.0.0.0:29090           0.0.0.0:*               LISTEN      12418/java      
    tcp        0      0 127.0.0.1:8100          0.0.0.0:*               LISTEN      8535/soffice.bin
    tcp        0      0 127.0.0.1:8005          0.0.0.0:*               LISTEN      1387/java       
    tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      887/slapd       
    tcp        0      0 0.0.0.0:33736           0.0.0.0:*               LISTEN      1102/java       
    tcp6       0      0 :::22                   :::*                    LISTEN      3507/sshd       
    tcp6       0      0 :::389                  :::*                    LISTEN      887/slapd       
    udp        0      0 192.87.219.76:123       0.0.0.0:*                           721/ntpd        
    udp        0      0 127.0.0.1:123           0.0.0.0:*                           721/ntpd        
    udp        0      0 0.0.0.0:123             0.0.0.0:*                           721/ntpd        
    udp        0      0 0.0.0.0:5353            0.0.0.0:*                           797/avahi-daemon: r
    udp        0      0 0.0.0.0:55248           0.0.0.0:*                           797/avahi-daemon: r
    udp6       0      0 :::123                  :::*                                721/ntpd        
    udp6       0      0 :::35920                :::*                                797/avahi-daemon: r
    udp6       0      0 :::5353                 :::*                                797/avahi-daemon: r
    
    3 回复  |  直到 13 年前
        1
  •  1
  •   jwchang    14 年前

    确保端口 27017 在Ubuntu中打开到web服务器。

        2
  •  1
  •   Thijs Koerselman    14 年前

    我发现了问题!!系统有一个混乱的/etc/hosts文件。本地主机配置异常。更正此文件解决了所有问题:D

        3
  •  0
  •   log N    14 年前

    试着发射 mongo 命令。如果mongodb有问题,它将显示一个错误。

    推荐文章