Mongodb и узел Получение ошибки при соединении с кластером? - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь подключиться к кластеру 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

Таким образом, вышеприведенное сообщение дает мне две ошибки

  1. Список семян не содержит прокси-серверов mongos - Не уверен, почему это происходит
  2. Replicaset должен быть предоставлен в URI или объекте option - у меня есть replicaSet в моем URI.Не уверен, почему это происходит.

Если я установлю ssl = false, второе сообщение исчезнет, ​​а первое останется.

Есть идеи, что я делаю неправильно?

Если вы хотите узнать, как я подключаюсь в моем приложении,

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);
      })
    });
  };

РЕДАКТИРОВАТЬ: Исправлено

Я нашел ответ на следующий вопрос о переполнении стека. Соединение кластера Mongoose с Mongo . Но оно не связано с параметром & retryWrites = true.Поэтому я удалил параметр и успешно подключился.

MongoError: Поле 'retryWrites' недопустимо для спецификации индекса.Спецификация: {name: "username_1", ключ: {username: 1}, уникальный: true, фон: 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);
      })
    });
  };

Надеюсь, это поможет и другим.

...