Mongodb и узел Получение ошибки при соединении с кластером?

Я пытаюсь соединиться с кластером 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 или объекте опции - у меня есть 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);
      })
    });
  };

EDIT: Постановили

Я нашел ответ на вопрос переполнения стека ниже. Соединение кластера 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);
      })
    });
  };

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

1 ответ

Ошибка может быть связана с версией mongoose и mongodb. Попробуйте запустить npm update или npx update, обновление пакетов устранило ошибку.

Другие вопросы по тегам