在使用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
答
如果您使用的流浪者对本地运行的一些开发/测试,只需使用一个静态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文件中进行了修改,请在此对齐)
有可能是一个更具体的错误,你没有显示,或者你应该尝试'console.error(err)'而不是为了更好地看到它,如果不。但config.vm.network“forwarded_port”,guest:3000,host:6660'似乎表示你正在从端口'80'转发到你本地的'6600',而MongoDB默认在端口'27017'上运行。所以除非你专门将它分配给端口'80'(并且你可能没有),否则你连接到错误的端口,甚至基本上设置了错误的端口转发。 –