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

时间:2015-02-08 13:17:52

标签: node.js mongodb node-mongodb-native replicaset

我有一个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)

我用来连接的代码(省略用户名和真实网址后)是:

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

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

1 个答案:

答案 0 :(得分:2)

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

问题是options.js:91创建了一个空对象。他们正在这样做一个字典并对服务器的'host:port'字符串进行重复数据删除。 options.js:104遍历该字典中的键并盲目地将它们加载到数组中。如果您在全局中向Object.prototype添加了一些内容,那么这将是一个问题,因为它也会被添加到最终的服务器阵列中。因为你添加到Object.prototype的任何东西可能都不是服务器,它不会有一个options属性,你会收到这个错误。

解决方法: 找出你的代码在哪里修改了Object.prototype并使其不那么通用。我认为他们已经在更新版本的驱动程序中更新了这个,但是如果你使用旧版本,你需要解决它。