Mongodb:首次连接失败无法连接服务器

47

我遇到了以下错误:

Warning { MongoError: failed to connect to server [mongodb:27017] on first connect
    at Pool.<anonymous> (/Users/michaelks/Desktop/users/node_modules/mongodb-core/lib/topologies/server.js:325:35)
    at emitOne (events.js:96:13)
    at Pool.emit (events.js:188:7)
    at Connection.<anonymous> (/Users/michaelks/Desktop/users/node_modules/mongodb-core/lib/connection/pool.js:270:12)
    at Connection.g (events.js:292:16)
    at emitTwo (events.js:106:13)
    at Connection.emit (events.js:191:7)
    at Socket.<anonymous> (/Users/michaelks/Desktop/users/node_modules/mongodb-core/lib/connection/connection.js:173:49)
    at Socket.g (events.js:292:16)
    at emitOne (events.js:96:13)
    at Socket.emit (events.js:188:7)
    at connectErrorNT (net.js:1025:8)
    at _combinedTickCallback (internal/process/next_tick.js:74:11)
    at process._tickCallback (internal/process/next_tick.js:98:9)
  name: 'MongoError',
  message: 'failed to connect to server [mongodb:27017] on first connect' }

尽管我在运行Mongo的终端窗口中看到了这个:

2016-12-25T03:45:23.715+0100 I NETWORK [initandlisten] connection accepted from 127.0.0.1:58868 #8 (8 connections now open) 

看起来有一些联系。

我已经尝试了两种方法。

$ mongod 

$ brew services start mongo 

这是我的test_helper.js文件

const mongoose = require('mongoose');
mongoose.connect('mongodb:localhost/users_test');
mongoose.connection
 .once('open', () => console.log('Good to go!'))
 .on('error', (error) => {
 console.warn('Warning', error);
 });

我并没有特别创建名为“users_test”的数据库,因为我认为mongoose或mongo或两者都会即时完成此操作。

我尝试过“localhost”和“127.0.0.1”。我使用的是OSX 10.11.5,运行Node 7.3.0和Mongo 3.2.9。

我做错了什么?我该如何找出问题所在?


1
使用命令ipconfig/ifconfig检查您系统的IP地址。然后在Node.js控制台中检查错误,看它是否使用相同的IP地址与MongoDB建立连接。 - samyak bhalerao
16个回答

30
为了在不同的上下文中提供解决方案,我再添加一条答案:

MongoDb Atlas问题解决方案

我连接到了MongoDB Atlas,并按照以下步骤对我的机器IP进行了白名单处理:

  • 进入安全选项卡

安全选项卡

  • 在安全选项卡下进入网络访问选项卡

网络访问选项卡

  • 进入IP白名单选项卡

IP白名单选项卡



27

使用 mongoose 连接到 mongodb 的方法如下:

mongoose.connect('mongodb://localhost/users_test');

或者
mongoose.connect('localhost/users_test');

或者
mongoose.connect('localhost','users_test');

但不是 mongoose.connect('mongodb:localhost/users_test');,它与正确的主机名不匹配 (mongodb 而不是 localhost)


13

当我尝试连接mlab数据库时,出现了同样的错误,因为我的组织网络有一些限制,我切换到移动热点后它就可以了。


4
这可能是一个鲜为人知的答案,但它拯救了我。谢谢。 - Hoslack
1
这也帮了我大忙,谢谢伙计。有趣的是,我的组织网络封锁了MongoDB,但没有封锁PostgreSQL。 - Teik Jun
1
谢谢!尝试使用热点库访问我的,但它没有工作。 - Joel H

10

我遇到过这个问题多次,这里是一些故障排除列表:

  1. 确保 数据库路径 存在,Windows 默认路径为 C:\data\db
  2. 确保 mongo 正在运行,要运行它,请进入 C:\Program Files\MongoDB\Server\3.4\bin 并运行以下命令:
    1. mongod.exe
    2. mongo.exe
  3. 确保你的 连接字符串正确,例如 mongodb://localhost/database-name

4
"mongodb://localhost/database-name" 是正确的连接 MongoDB 数据库的格式,而非 "mongdb://localhost/database-name"。请注意在单词 'mongodb' 中有一个字母 'b' 的拼写错误。 - Rajkumar Bansal

7

如果是MongoDB集群,则需要将您当前的IP添加到集群中。要添加当前IP地址,您需要完成以下几个步骤-

step 1- go to login page of Mongodb and login with valid credential - https://cloud.mongodb.com/user#/atlas/login
step 2- CLick Network Access from left sidebar under Security Section
Step 3 - Click Add IP Address
Step 4 - Click Add Current IP Address or Allow Connection From Any Where
now try to connect - npm start

enter image description here

对于本地 MongoDB,请使用类似于 "mongodb+srv://username:pass%40ord@clastername-blqnk.mongodb.net/test?retryWrites=true&w=majority" 的 mongo 字符串。
密码必须像示例字符串一样进行编码。

1
在我的情况下,我的IP地址没有被添加。所以对我来说可以工作。 - Imran_Developer

4

连接到wifi网络时,mongodb://localhost/db_name 可以正常使用。

当没有连接到任何wifi网络时,这将无法工作。相反,我使用了 mongodb://127.0.0.1/db_name ,然后它可以工作。

可能与ip配置有关的问题。


3

如果使用云中的远程数据库,比如 ATLAS,你应该创建一个白名单入口 0.0.0.0/0。这样就可以从任何 IP 地址访问 ATLAS 集群。

输入图像描述


2

我在PowerShell实例中运行mongod。我没有从mongod中在powershell控制台上得到任何输出。我点击了mongod所在的PowerShell实例,按下回车键,执行恢复了。我不确定是什么导致了执行停止,但现在我可以立即连接到这个mongo实例。


2

我尝试使用公司的wifi连接mlab,但是出现了这个错误。但是当我切换到个人网络时,它成功连接了。


2

对我来说,问题是mongo没有运行。所以我首先在控制台中启动了“mongod”命令。然后在另一个控制台选项卡中运行了“mongo”。现在连接成功了。 现在运行您的应用程序,您的问题应该已解决。


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