在使用node.js连接到VM中的mongodb时发生错误

问题描述:

我在使用vagrant的virtualbox中运行我的mongodb。我正尝试使用node.js连接到主机上的数据库,但尝试这样做时会出现奇怪的错误。这是我正在运行的代码。在使用node.js连接到VM中的mongodb时发生错误

var MongoClient = require('mongodb').MongoClient; 
var url = "mongodb://localhost:6600/test"; 

MongoClient.connect(url, function(err, db){ 
    if (err){ 
    throw err; 
    } 
    console.log("Database created!"); 
    db.close(); 
}); 

这是在命令行中显示的错误。

C:\Users\Morgan\Desktop\testingGrounds>node createMongoDB.js 

C:\Users\Morgan\Desktop\testingGrounds\node_modules\mongodb\lib\mongo_client.js:421 
      throw err 
     ^
[object Object] 

这是Vagrantfile的相关部分。

# Create a forwarded port mapping which allows access to a specific port 
    # within the machine from a port on the host machine. In the example below, 
    # accessing "localhost:8080" will access port 80 on the guest machine. 
    # config.vm.network "forwarded_port", guest: 80, host: 8080 
    # nginx 
    config.vm.network "forwarded_port", guest: 80, host: 6600 
    # # development site 
    config.vm.network "forwarded_port", guest: 3000, host: 6660 
    # db browser port 
    config.vm.network "forwarded_port", guest: 7474, host: 6666 
    # test port 
    config.vm.network "forwarded_port", guest: 8800, host: 6606 
+0

有可能是一个更具体的错误,你没有显示,或者你应该尝试'console.error(err)'而不是为了更好地看到它,如果不。但config.vm.network“forwarded_port”,guest:3000,host:6660'似乎表示你正在从端口'80'转发到你本地的'6600',而MongoDB默认在端口'27017'上运行。所以除非你专门将它分配给端口'80'(并且你可能没有),否则你连接到错误的端口,甚至基本上设置了错误的端口转发。 –

如果您使用的流浪者对本地运行的一些开发/测试,只需使用一个静态IP将简化你的生活。

您可以从Vagrantfile删除所有转发端口线替换为:

config.vm.network :private_network, ip: "192.168.33.10" 

在虚拟机,你需要确保蒙戈被绑定到这个IP或0.0.0.0,因此可以听所有的网络接口,在/etc/mongod.conf文件,确保有

bind_ip=0.0.0.0 

bind_ip=192.168.33.10 

在您的节点代码中,您需要将mongo的URL替换为mongodb://192.168.33.10:27017/test(假设mongo正在端口27017上运行;如果你已经在你的conf文件中进行了修改,请在此对齐)