2015-02-08 58 views
0

我有一個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

回答

2

這一個花了我一分鐘弄清楚。錯誤表示問題出在./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並使其不那麼一般。我認爲他們已經在更新版本的驅動程序中進行了更新,但如果您使用的是舊版本,則需要解決該問題。

相關問題