2012-09-26 24 views
0

我有本地安裝在我的OSX筆記本電腦和遠程Ubuntu服務器上的mongodb。兩者都有mongodb運行,​​我可以使用端口28017上的http診斷來驗證這一點。我在兩臺計算機上運行相同的代碼。在osx上一切正常,但在Ubuntu上,我無法通過NodeJS連接到數據庫。我不斷收到此錯誤:無法從Ubuntu上的NodeJS連接到MongoDB。 OSX上的相同代碼工作正常

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軟件包。兩者都給我同樣的錯誤。

這裏有2種方式我想:

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 
+0

原來是這臺機器特定的東西。第二個Ubuntu安裝我試了很好。如果我能發現問題到底是什麼,我會報告回來。 –

回答

1

我發現了問題!該系統有一個混亂的/ etc/hosts文件。與本地主機配置的東西是不尋常的。更正這個文件解決了一切:D

+1

什麼是錯的,你對錯了什麼? –

+0

我在一個VM中運行ArchBang,並且/ etc/hosts文件已將localhost設置爲::: 1,IPv6中的環回地址,並且IPv4的環回被設置爲「arch」。由於我不想破解節點以符合要求,因此我更改了/ etc/hosts以使其更有意義,即將localhost設置爲127.0.0.1。 我不能說0x80,但我懷疑他的問題是相似的 –

1

確保端口27017打開而Ubuntu的Web服務器。

+0

不確定你的意思。我不是系統管理員;)我可以使用mongo交互式shell從筆記本電腦連接到服務器上的數據庫。那不是說港口是開放的嗎? –

+0

是的,我會這麼認爲。 localhost只會是你的本地機器。您需要使用您的mongodb服務器的主機或IP地址。 – chovy

+0

@chovy我不明白你想說什麼。當我從計算機連接到服務器時,我使用服務器主機名是。但這只是爲了測試端口是否開放,並且工作正常。我試圖從運行在同一臺服務器上的nodejs express應用程序在服務器上進行連接。所以我使用本地主機。就像在我的筆記本電腦上運行app + mongodb一樣。我有沒有想念你的觀點? –

0

嘗試從終端發射mongo命令。如果mongodb存在某些問題,它將顯示錯誤。

+0

我已經在第一篇文章中寫道mongo工作正常。無論是在ubuntu上,還是通過osx遠程連接mongo –

相關問題