it-swarm.com.de

Mongolab Node-Topologie zerstört

Ich habe mich mit Twitter mit Nodejs verbunden. Ich versuche, einige wichtige öffentliche Benutzerdaten in einer Mongolab-Mongodb-Datenbank zu protokollieren. Aus irgendeinem Grund bekomme ich immer einen "Topologie-Fehler". Ich bin mir nicht ganz sicher, warum das so ist.

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

Wie Sie sehen, stellt das Programm eine Verbindung zur Datenbank her. Definiert die Sammlung und durchläuft dann eine Reihe von Twitter-Konten und protokolliert relevante Informationen. Die Twitter-Anfragen sind erfolgreich und der Mongodb funktioniert mit einfachen Anfragen. Wenn Sie Ideen haben, warum ich diese Antwort bekomme, antworten Sie mir bitte.

14
Aidan Collins

Ich hatte ein ähnliches Problem. Ihre Datenbankverbindung wird geschlossen, bevor alle Anfragen an Twitter ausgeführt und Daten eingefügt wurden.

Am Ende habe ich einen Rückruf an meine Funktion gesendet, so wie sie es in der Dokumentation tun.

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

Sie können nach dem Einfügen sehen, dass sie callback(result); aufrufen.

Und das ist nur eine anonyme Funktion, die db.close() aufruft.

Hier sind einige weitere Links, die Ihnen beim Öffnen/Schließen von Datenbankverbindungen helfen können

Wann die MongoDB-Datenbankverbindung in Nodejs geschlossen werden soll

Warum wird empfohlen, eine MongoDB-Verbindung an keiner Stelle in Node.js-Code zu schließen?

Eine MongoDB-Datenbankverbindung geöffnet halten

Ich hoffe es hilft!

11
alucic

Nachdem ich dasselbe Problem erlebt hatte, stellte ich fest, dass Mongolab empfiehlt, die folgenden Einstellungen anzuwenden , um die Verbindung von Mongodb in der Produktion aufrechtzuerhalten:

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

Ich hoffe, dass dies Ihnen oder anderen Personen mit diesem Problem "Topologie wurde zerstört" helfen wird.

9
Adrien Joly

Ich hatte das gleiche Problem. Dann hatte ich die Idee, meine Mungo-Bibliothek aufzurüsten. Aber als ich npm install mongoose lief, erschien der Fehler "... kerberos-Fehler (gssapi/gssapi.h-Datei nicht gefunden) ...". Nach einigen Nachforschungen habe ich gesehen, dass sich genug gelöst hat, um apt- get libkrb5 -dev oder Had Hat yum installieren zu können, um krb5 -devel zu installieren. Nachdem ich npm den Mungo installiert und mein Problem gelöst habe

1
gilmar