0

ノードアプリケーションでmongoldbクラスターに接続しようとしています。私はmongodbバージョン3.1.0を持っています。

以下のようなmongodbから接続文字列をコピーしました。

mongodb://username:<PASSWORD>@clusterstring,clusterstring1,clusterstring2/dbname?ssl=true&replicaSet=replicaSet&authSource=admin&retryWrites=true

しかし、上記の文字列を使用して接続しようとすると、以下のエラーが発生します。

MongoError: seed list contains no mongos proxies, replicaset connections requires the parameter replicaSet to be supplied in the URI o r options object, mongodb://server:port/db?replicaSet=name

したがって、上記のメッセージには2つのエラーが表示されます

  1. シード リストに mongos プロキシが含まれていません -- 原因が不明です
  2. URI またはオプション オブジェクトで提供されるレプリカセット -- URI にレプリカセットがあります。なぜそれが起こっているのか分かりません。

ssl=false に設定すると、2 番目のメッセージが消え、最初のメッセージが残ります。

私が間違っていることは何ですか?

私のアプリケーションでどのように接続しているか知りたい場合は、

this is in config

module.exports = {
    secret: 'sectreKey',
    session: { session: false },
    database: aboveconnectionstring
  }



//the above values are passed here 
module.exports = (mongoose, config) => {
    const database = mongoose.connection;
    mongoose.Promise = Promise;
    mongoose.connect(config.database, {
      promiseLibrary: global.Promise,
       useNewUrlParser: true 
    });
    database.on('error', error => console.log(`Connection to sample  service database failed: ${error}`));
    database.on('connected', () => console.log('Connected to sample  Service database'));
    database.on('disconnected', () => console.log('Disconnected from sample  Service database'));
    process.on('SIGINT', () => {
      database.close(() => {
        console.log('sampleVueService terminated, connection closed');
        process.exit(0);
      })
    });
  };

編集:解決済み

以下のスタックオーバーフローの質問から答えを見つけました。Mongo との Mongoose クラスター接続。ただし、パラメーター &retryWrites=true では接続しません。そのため、パラメーターを削除して、正常に接続しました。

MongoError: フィールド 'retryWrites' は、インデックスの指定には無効です。仕様: { name: "username_1", key: { username: 1 }, unique: true, background: true, retryWrites: true }

だから私の新しいデータベース接続は以下のようになります

module.exports = (mongoose, config) => {
    if(config.database.indexOf('replicaSet') > - 1) {
      dbOptions = {
        db: {native_parser: true},
        replset: {
          auto_reconnect:false,
          poolSize: 10,
          socketOptions: {
            keepAlive: 1000,
            connectTimeoutMS: 30000
          }
        },
        server: {
          poolSize: 5,
          socketOptions: {
            keepAlive: 1000,
            connectTimeoutMS: 30000
          }
        }
      };
    }

    const database = mongoose.connection;
    mongoose.Promise = Promise;
    mongoose.connect(config.database, dbOptions);
    database.on('error', error => console.log(`Connection to sample  service database failed: ${error}`));
    database.on('connected', () => console.log('Connected to sample  Service database'));
    database.on('disconnected', () => console.log('Disconnected from sample  Service database'));
    process.on('SIGINT', () => {
      database.close(() => {
        console.log('sampleVueService terminated, connection closed');
        process.exit(0);
      })
    });
  };

それが他の人にも役立つことを願っています。

4

1 に答える 1