簡體   English   中英

從 node.js 連接到 mongodb 時出現 ECONNREFUSED 錯誤

[英]ECONNREFUSED error when connecting to mongodb from node.js

我知道我在做一些非常愚蠢和笨拙的事情,但我希望有人可以幫助我在 mac 上從 node.js 建立到 mongodb 的基本數據庫連接。

我已經使用自制軟件安裝了 mongodb,似乎運行良好。 我已經以本地登錄用戶的身份啟動了服務器 (mongod),並打開了第二個終端並確認我可以使用 mongo 連接到它。 當我運行 mongo 時,我收到消息“connecting to: localhost:27017/test”,然后是命令提示符。 在 mongo shell 中運行一些命令,一切似乎都在那里工作。 讓兩個終端都打開並運行。

我還確認我可以通過 localhost:28017 訪問 Web 界面。

我安裝了 node.js 並添加了貓鼬包。 現在嘗試使用一個超級簡單的 node.js 應用程序(也以本地登錄用戶身份運行)進行連接:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

我收到以下錯誤

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: connect ECONNREFUSED
    at errnoException (net.js:901:11)
    at Object.afterConnect [as oncomplete] (net.js:892:19)

把我的頭撞在牆上,試圖讓一些如此簡單的東西起作用。 我錯過了什么?

編輯:這是來自 mongod 的日志。 如您所見,我嘗試了多次,但都立即失敗了:

Thu Dec  5 08:19:43.700 [initandlisten] MongoDB starting : pid=14412 port=27017 dbpath=/usr/local/var/mongodb 64-bit host=mobadmins-MacBook-Pro-3.local
           08:19:43.700 [initandlisten] db version v2.4.8
           08:19:43.700 [initandlisten] git version: nogitversion
           08:19:43.700 [initandlisten] build info: Darwin mobadmins-MacBook-Pro-3.local 12.4.0 Darwin Kernel Version 12.4.0: Wed May  1 17:57:12 PDT 2013; root:xnu-2050.24.15~1/RELEASE_X86_64 x86_64 BOOST_LIB_VERSION=1_49
           08:19:43.700 [initandlisten] allocator: tcmalloc
           08:19:43.700 [initandlisten] options: { bind_ip: "127.0.0.1", config: "/usr/local/etc/mongod.conf", dbpath: "/usr/local/var/mongodb", logappend: "true", logpath: "/usr/local/var/log/mongodb/mongo.log", rest: true }
           08:19:43.700 [initandlisten] journal dir=/usr/local/var/mongodb/journal
           08:19:43.700 [initandlisten] recover : no journal files present, no recovery needed
           08:19:43.729 [websvr] admin web console waiting for connections on port 28017
           08:19:43.729 [initandlisten] waiting for connections on port 27017
           08:22:34.561 [initandlisten] connection accepted from 127.0.0.1:52160 #3 (1 connection now open)
           08:22:34.563 [conn3] recv(): message len 1124073472 is too large. Max is 48000000
           08:22:34.563 [conn3] end connection 127.0.0.1:52160 (0 connections now open)
           08:24:41.298 [initandlisten] connection accepted from 127.0.0.1:52166 #4 (1 connection now open)
           08:24:41.304 [conn4] end connection 127.0.0.1:52166 (0 connections now open)
           08:25:06.938 [initandlisten] connection accepted from 127.0.0.1:52168 #5 (1 connection now open)
           08:25:06.943 [conn5] end connection 127.0.0.1:52168 (0 connections now open)
           08:25:18.220 [initandlisten] connection accepted from 127.0.0.1:52172 #6 (1 connection now open)
           08:25:18.225 [conn6] end connection 127.0.0.1:52172 (0 connections now open)
           08:25:38.811 [initandlisten] connection accepted from 127.0.0.1:52175 #7 (1 connection now open)
           08:25:38.816 [conn7] end connection 127.0.0.1:52175 (0 connections now open)

ECONNREFUSED 錯誤

node 中出現此錯誤的原因很少:

  1. 您的端口已經在提供某些服務,因此它將拒絕您的連接。

    轉到命令行並使用以下命令獲取 pid

    $ lsof -i:port_number

    現在使用殺死 pid

    $ kill -9 pid(which you will get by above command)

  2. 您的服務器未運行,例如在這種情況下,請檢查您的 mongoose 服務器是否正在運行或使用以下命令運行。

    $ mongod

  3. 也有可能您的localhost配置不正確,因此請使用127.0.0.1:27017而不是 localhost。

好的,這是我在上面發布的信息中沒有真正出現的另一種情況。 我的 node.js 應用程序非常簡單,但是我在我的 node.js 代碼中包含了另外幾行顯然導致此問題的代碼。

具體來說,我聲明了另一個變量,它調用了一些其他代碼,這些代碼使用不正確的數據庫信息進行了單獨的數據庫調用。 這就是為什么在使用 Xinzz 的代碼時,控制台日志錯誤似乎沒有改變的原因。 實際上,引發錯誤的不是 mongoose.connect 命令!

吸取教訓,定位問題並注釋掉不相關的代碼! 對不起,伙計們,我知道這是我愚蠢的。

使用此代碼設置您的 mongodb 連接:

var mongoose = require('mongoose');

var mongoURI = "mongodb://localhost:27017/test";
var MongoDB = mongoose.connect(mongoURI).connection;
MongoDB.on('error', function(err) { console.log(err.message); });
MongoDB.once('open', function() {
  console.log("mongodb connection open");
});

確保啟動服務器時 mongod 正在運行。 您使用的是 Express 還是簡單的 node.js 服務器? 使用上述代碼得到的錯誤信息是什么?

很奇怪,但就我而言,我切換了wifi連接......

我使用一些公共 wifi 並切換到我的手機連接

我在使用 node.js 編寫一個簡單的 rest api 時遇到了同樣的問題,最終發現這是由於wifi 阻塞和安全原因。 嘗試使用您的移動熱點連接它 如果這是原因,它將立即得到解決。

我有同樣的問題。 通過在管理員控制台中運行相同的代碼來解決它。

有時你需要檢查IP、防火牆、端口轉發等的合法性,如果你的目標數據庫在其他機器上。

我遇到了同樣的問題,我所做的只是在嘗試連接到 Mongo 服務器之前添加了大約 10 秒的setTimeout ,它立即解決了問題。 我不知道為什么我必須添加延遲,但它起作用了......

我也遇到了同樣的問題,所以我這樣修復它:

如果您在 docker 容器或 docker compose 中運行 mongo 和 nodejs

所以在你的nodejs mongo連接文件中用mongo(在我的例子中是docker中的容器名稱)替換localhost,如下所示。

var mongoURI = "mongodb://mongo:27017/<nodejs_container_name>";

我遇到過同樣的問題。 我所做的是在另一個終端中運行mongodb命令。 然后,在另一個選項卡中運行我的應用程序。 這解決了我的問題。 不過,我正在嘗試其他解決方案,例如在建立連接之前創建一個腳本來運行mongodb

檢查這篇文章。 https://stackoverflow.com/a/57589615

這可能意味着 mongodb 沒有運行。 您必須通過命令行或在 Windows 上運行 services.msc 並啟用 mongodb 來啟用它。

我嘗試了所有可能的解決方案,但對我沒有幫助。 我休息了一下,然后更改了以下內容。 簡單的錯字。 可以幫助某人是同樣的情況。 來自:app.listen((port)=>console.log( Server is running at port ${PORT} ))

To: app.listen(PORT, console.log( Server is running at port ${PORT} )) 前面讓我連接到數據庫 mongo atlas 但獲取請求是 Error: connect ECONNREFUSED

您可以轉到 mongoDB compass 客戶端並按照以下步驟操作: 1.單擊分別填寫連接字段: 在此處輸入圖像描述

2.在主機名類型: 127.0.0.1 在此處輸入圖像描述

3. 單擊連接

Mongodb 沒有運行,但我有 node.js 的模塊 缺少數據庫路徑。 修復是在根目錄中創建新文件夾,因此運行 sudo mkdir -p /data/db/ 然后運行 ​​sudo chown id -u /data/db

我手動啟動了 mongodb 服務。

控制面板 -> 管理工具 -> 服務 -> Mongodb

然后啟動/重新啟動它。 完成!

快樂編碼! :-)

對我來說,我不得不將“localhost”更改為“127.0.0.1”,然后它又開始工作了:

mongoose.connect('mongodb://127.0.0.1/test')

認為我有同樣的錯誤; 我很困惑何時使用 mongodb、mongod 或 mongoose。

代碼/node_modules/mongoose/lib/connection.js:819 const serverSelectionError = new ServerSelectionError(); ^ MongooseServerSelectionError:連接 ECONNREFUSED 127.0.0.1:27017

mongod在我的系統上本地運行良好。 我可以用 Mongo Compass 連接它,但 mongoose 只是拒絕連接。 神奇的詞是directConnection=true ,如

mongodb://127.0.0.1:27017/test?directConnection=true

版本:

  • mongoose 6.5.2
  • mongodb 4.4.13 社區
  • 節點 18.5.0

對於我的情況,這解決了:

控制面板 -> 管理工具 -> 服務 -> 啟動 MongoDB 服務器

如果您嘗試連接到遠程 MongoDB 服務器並收到 ECONNREFUSED 錯誤,請確保將綁定 ip選項設置為0.0.0.0

有關更多信息,請參閱https://www.mongodb.com/docs/manual/core/security-mongodb-configuration/或使用 MongoDB 配置文件,如此:mongodconf, 閱讀更多配置文件:

net:
  bindIp: 0.0.0.0

您可以只使用您的本地 IP address (例如127.0.0.1 ),而不是使用localhost

(localhost = 127.0.0.1:27017)

'mongodb://127.0.0.1:27017/<ele.Name>'

這就是我得到解決方案的方式

你好,這很有趣,我的意思是它很有趣。 Headover to start button and type service from there ho Down to and look for mongodb.right click it and click start. Mongod 將啟動。 Go 回到你的項目,稍后謝謝我

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM