0

我有一个 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) {...});

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

4

1 回答 1

2

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

问题是options.js:91创建了一个空对象。他们这样做是为了制作一个字典并为服务器删除重复的“主机:端口”字符串。options.js:104循环遍历该字典中的键并将它们盲目加载到数组中。如果您在全局范围内向 Object.prototype 添加了一些内容,这将是一个问题,因为它也会被添加到最终的服务器数组中。由于您添加到 Object.prototype 的任何内容都可能不是服务器,因此它没有 options 属性,您将收到此错误。

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

于 2015-05-14T20:19:24.133 回答