Verbinde synchron mit Mongodb
Ich würde gerne eine Verbindung zu mongodb zuerst, dann führen Sie alles andere in meiner Anwendung.
Es zu tun, ich habe das schreiben so etwas wie:
MongoClient.connect("mongodb://localhost/test", function(err, connection) {
if (err) { console.error(err); }
db = connection;
var app = express();
//Include API V1
require("./apiv1.js")(app, db);
app.listen(3000, function(err) {
if (err) { console.error(err); } else { console.log("Started on *:3000"); }
});
});
Das macht meine app komplett eingerückt innerhalb der .connect-Funktion... Die sieht hässlich und nimmt Platz, während ich an meinem Projekt arbeiten.
Ich denke, die beste Lösung wäre die MongoDB-Verbindung synchron (auch, weil ohne die DB-Verbindung, die app kann nicht arbeiten, also warum sollte ich etwas tun, während es eine Verbindung?) und dann den rest von meinem code.
Wie kann ich tun?
Kommentar zu dem Problem
Dies ist, wie node.js funktioniert. Ist alles async und callback-geritten. Sie kann das nicht ändern, aber ich erinnere mich, Lesen über einige libs, die helfen würden mit der Verringerung der spaghetti-ness der code. Leider kann ich mich nicht erinnern die Namen.
"die beste Lösung wäre die MongoDB-Verbindung synchron" - Sie verwenden könnte, ruby, zum Beispiel.
Ja, die app ist verpackt in der
.connect()
- Methode, aber Sie exportieren, um die Logik in eine andere Datei (das ist eine gute Idee), und ich kann nicht sehen, nichts hässlich hier. Möchten Sie vielleicht einen Blick in die koa, der code macht sehen viel sauberer ( auf Kosten der starken Nutzung von ES6-generator-Funktionen ).
Sie können mit
Mungo
, hat es IMO ein tolles feature, dass, wenn Sie versuchen, etwas retten, wartet er, bis die Verbindung hergestellt ist und dann, hinter den kulissen, speichert die Daten! InformationsquelleAutor der Frage Fez Vrasta | 2014-09-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie keine Verbindung zu MongoDB synchron, aber Sie können loszuwerden, diese hässlichen Rückruf aus dem code.
Der beste Weg, es zu tun ist, zu erlassen, um einige wrapper
- Knoten-mongodb-native
- Treiber.Werfen Sie einen Blick auf die folgenden Module.
mongojs
mongoskin
Mönch
Natürlich intern alle von Ihnen sind über MongoDB-Verbindung asynchron.
InformationsquelleAutor der Antwort Leonid Beschastny
Mithilfe der
async
Bibliothek können Sie aleve einige dieser Fragen.Zum Beispiel in meinem server Start ich Folgendes tun :
InformationsquelleAutor der Antwort f0x
Können Sie es mit thunky, thunky führt eine async-Funktion einmal und speichert Sie, die nachfolgenden Anrufe werden aus dem cache zurückgegeben.
*Anmerkung: ich bin unter Verwendung der neuesten 3.x mongodb-Treiber
InformationsquelleAutor der Antwort lee shin
Wenn Sie mithilfe von Knoten 6 und Versionen, die Sie tun können, so etwas wie dieses:
InformationsquelleAutor der Antwort Proteo5