0

私は、MongoDB データベースに接続する必要がある NodeJS アプリを持っています。次のものに問題なく接続しますが、2番目のものに接続すると、次のエラーが発生します。

/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://password@url1:port1,url2:port2/dbName?replicaSet=setName&w=0&readPreference=secondary", function(err, doc) {...});

今、これを単独で試したとき(コードが他のDBに接続した後ではありません)、うまくいきました...何かアイデアはありますか?

4

1 に答える 1

2

これを理解するのに1分かかりました。エラーは、問題があることを示しています./node_modules/mongodb/lib/mongodb/connection/repl_set/options.js:110

問題はoptions.js:91、空のオブジェクトを作成することです。彼らはこれを行って辞書を作成し、サーバーの「ホスト:ポート」文字列を重複排除しています。options.js:104その辞書のキーをループし、盲目的に配列にロードします。Object.prototype にグローバルに何かを追加した場合、サーバーの最終的な配列にも追加されるため、これは問題になります。Object.prototype に追加したものはおそらくサーバーではないため、オプション プロパティがなく、このエラーが発生します。

回避策: コードのどこで Object.prototype を変更したかを把握し、一般的でないようにします。新しいバージョンのドライバーでこれを更新したと思いますが、古いバージョンを使用している場合は、回避する必要があります。

于 2015-05-14T20:19:24.133 に答える