使用NodeJS本地驱动程序无法连接到MongoDB数据库

问题描述:

我有一个NodeJS应用程序,我需要连接到MongoDB数据库 - 一个服务器设置,另一个来自副本集。我连接到下一个就好了,但连接时,第二个 - 我收到以下错误:使用NodeJS本地驱动程序无法连接到MongoDB数据库

/Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/db.js:299 
      throw err; 
       ^
TypeError: Cannot set property 'auto_reconnect' of undefined 
    at /Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js:110:35 
    at Array.forEach (native) 
    at Options.decorateAndClean (/Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/connection/repl_set/options.js:108:16) 
    at new exports.ReplSet (/Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/connection/repl_set/repl_set.js:84:31) 
    at /Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/mongo_client.js:320:30 
    at /Users/iddogino/Documents/RapidApp/node_modules/mongodb/lib/mongodb/db.js:296:11 
    at process._tickDomainCallback (node.js:459:13) 

我用来连接(忽略用户名和真实的URL后)的代码是:

require('mongodb').MongoClient.connect("mongodb://[email protected]:port1,url2:port2/dbName?replicaSet=setName&w=0&readPreference=secondary", function(err, doc) {...}); 

现在,当我单独尝试这个(不是在连接到其他数据库的代码之后),我工作得很好......任何想法?

+0

问题出在代码引用某个变量值为undefined的属性auto_reconnect。代码中会出现这种情况?你可以发布与'auto_reconnect'有关的代码部分吗? – wdberkeley 2015-02-09 22:36:00

这一个花了我一分钟弄清楚。错误表示问题出在./node_modules/mongodb/lib/mongodb/connection/repl_set/options.js:110

问题是options.js:91创建一个空对象。他们这样做了一个字典并为服务器重复删除了'host:port'字符串。 options.js:104通过该字典中的键循环并盲目地将它们加载到数组中。如果你已经在Object.prototype中添加了一些东西,这将会成为一个问题,因为它也会被添加到最终的服务器阵列中。因为无论你添加到Object.prototype可能不是一个服务器,它不会有一个选项属性,你会得到这个错误。

变通方法: 找出代码中的哪个位置已经修改了Object.prototype并使其不那么一般。我认为他们已经在更新版本的驱动程序中进行了更新,但如果您使用的是旧版本,则需要解决该问题。