2017-03-21 4 views
1

Ich würde gerne ein paar Dinge über Node.js async und MongoDB wissen. Wenn der Server vor meiner Verbindung zu, und meine Vorlagen oder Ajax hängt von Daten aus der Datenbank wird dienen (ich precompile mein Lenker) die HTML-Datei fehlschlagen oder wird meine Vorlagen/Ajax warten auf die Verbindung und dann weiter?Async: Verbindung zu MongoDB, nachdem der Server gestartet wurde

Wenn es funktioniert, würde ich gerne besser verstehen, wie genau es funktioniert hat! Wenn es fehlschlägt, wie kann ich es elegant "reparieren"?

Dies ist ein Beispiel für eine Lösung, Höbe mit (scheint mich TBH schlecht):

//connect to db 
mongodb.connect("someDBplace", 
    (err, db)=>{ 
    if(err){ 
     return generalLogger.error(`The database has failed to connect: ${err}.`); 
    }else{ //start the server now: 
     generalLogger.info(`Connected to database: ${stringify(db.databaseName)}.`); 

server.listen(`${port}`, (err)=>{ 
    if(err){ 
     generalLogger.error(err); 
    } 
    //for demo: console th eMIMEtype 
    generalLogger.info(`The Server started on port: ${port}.`); 
}); 
    } 
}); 
+0

Huh? Hast du nicht versucht, diesen Code zu starten? –

+0

Ja, habe ich - es scheint zu funktionieren, aber ich bin mir nicht sicher. Ich weiß auch nicht, warum, wenn es fehlgeschlagen ist/gearbeitet hat oder ob es eine gute Übung ist oder nicht – Defaceo

+0

Wo in Ihrem Code benutzt der Server tatsächlich irgendetwas aus der Datenbankverbindung? Zeigen Sie uns diesen Teil, oder wir können nicht sagen, was passiert, bevor die Initialisierung abgeschlossen ist. – Bergi

Antwort

1

Ja, das ist ein richtiger Weg ist, es zu tun. Wenn Sie sicherstellen möchten, dass die Datenbank verfügbar ist, bevor der Server mit dem Bedienen von Anforderungen beginnt, müssen Sie den Server im Rückruf der Datenbankverbindungsmethode starten.

Einige höhere Frameworks wie Hapi bieten Ihnen einige Mechanismen, die den Fall vereinfachen, wenn Sie vor dem Start auf mehrere Dinge warten müssen. siehe zum Beispiel die Hapi Plugins:

+0

Ich verstehe, aber möchte Dinge laden, während wir verbunden werden und dann Dinge, die von der DB abhängen, laden. Ich möchte es verstehen – Defaceo

Verwandte Themen