Подтвердить что ты не робот

Уничтожена топология Mongolab nodejs

Я взаимодействовал с твиттером, используя nodejs. Я пытаюсь зарегистрировать некоторые важные общедоступные пользовательские данные в базе данных mongolab mongodb. По какой-то причине я продолжаю получать "ошибку с ошибкой топологии". Я не совсем уверен, почему это так.

var Twitter = require('twitter');
var mongodb = require('mongodb');

var accounts = ['@zaynmalik',
'@ZooeyDeschanel'];

var client = new Twitter({
  consumer_key: 'key',
  consumer_secret: 'secret',
  access_token_key: 'key',
  access_token_secret: 'secret'
});

var MongoClient = mongodb.MongoClient;
var url = "mongodb://user:[email protected]:numbers/db";

MongoClient.connect(url, function (err, db) {
  if (err) {
    console.log('Unable to connect to the mongoDB server. Error:', err);
  } else {
    //HURRAY!! We are connected. :)
    console.log('Connection established to database');

    var collection = db.collection('accounts');

    for(var i = 0; i < accounts.length; i++){
        client.get('users/show', {screen_name: accounts[i]}, function(error, tweets, response){
          if(error) console.log(error);
              var account = {'screen_name': accounts[i], 'id': tweets.id};
              collection.insert(account, {w:1}, function(err, result) {console.log(err);});
              //collection.insert(account);
              console.log(tweets.id);  // Raw response object. 
        });

}

    db.close();
  }
});

Как вы можете видеть, программа устанавливает соединение с базой данных. Определяет коллекцию, а затем выполняет итерацию через несколько учетных записей twitter и записывает соответствующую информацию. Запросы twitter успешны, и mongodb работает с простыми запросами. Если у вас есть идеи о том, почему я получаю ответ, ответьте.

4b9b3361

Ответ 1

У меня была схожая проблема, соединение с базой данных закрывается до того, как все ваши запросы на твиттер сделаны и данные вставлены.

В итоге я отправил обратный вызов моей функции, как в документации.

https://github.com/mongodb/node-mongodb-native#inserting-a-document

Вы можете видеть, как после вставки выполняется вызов callback(result);

И это просто анонимная функция, которая вызывает db.close()

Вот некоторые другие ссылки, которые могут помочь вам с открытием/закрытием db-соединений

Когда закрыть соединение базы данных MongoDB в Nodejs

Почему рекомендуется не закрывать соединение MongoDB нигде в Node.js-коде?

Сохранение связи с базой данных MongoDB

Надеюсь, что это поможет!

Ответ 2

Испытав ту же проблему, я обнаружил, что Mongolab рекомендует применять следующие настройки, чтобы поддерживать связь Mongodb в процессе производства:

var options = {
  server: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } },
  replset: { socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 } }
};
mongoose.connect(secrets.db, options);

Надеюсь, что это поможет вам или другим людям, столкнувшимся с этой проблемой "Топология".

Ответ 3

У меня была та же проблема. Тогда у меня возникла идея обновить мою библиотеку мангуста. Но когда я запускал npm install mongoose, появилась ошибка "... kerberos errors (файл gssapi/gssapi.h не найден)...". Поэтому после некоторых исследований я увидел, что для решения достаточно для установки apt-install install libkrb5 -dev или для Had Hat yum install krb5 -devel. После того, как я сделал npm, установил mongoose и решил свою проблему