Connecter de manière synchrone à mongodb
Je tiens à vous connecter à mongodb d'abord, puis exécutez tout le reste dans mon application.
De le faire, je dois écrire quelque chose comme:
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"); }
});
});
Cela rend mon appli pour être complètement en retrait à l'intérieur de l' .fonction de connexion... Qui semble laid et prend de la place pendant que je travaille sur mon projet.
Je pense que la meilleure solution serait d'avoir la connexion MongoDB synchrone (même parce que sans la connexion aux bases de mon application ne peut pas travailler, donc pourquoi devrais-je faire quelque chose alors que c'est la connexion?) et puis exécutez le reste de mon code.
Comment puis-je faire?
- C'est de cette façon node.js des œuvres. Tout est asynchrone et de rappel-monté. Vous ne pouvez pas changer cela, mais je me souviens avoir lu à propos de certaines libs qui contribuerait à la réduction de spaghetti-ness du code. Malheureusement, je ne me souviens pas des noms.
- "la meilleure solution serait d'avoir la connexion MongoDB synchrone" - vous pouvez utiliser ruby, par exemple.
- Oui, votre application est enveloppé à l'intérieur du
.connect()
méthode, mais de l'exportation de la logique dans un autre fichier (ce qui est une bonne idée) et je ne peux pas voir quelque chose de laid ici. - Vous pourriez vouloir regarder dans koa, ce qui rend le code beaucoup plus propre ( au détriment de l'utilisation lourde de l'ES6 générateur de fonctions ).
- Vous pouvez utiliser
mongoose
, il a de l'OMI, une grande fonctionnalité que si vous essayez d'enregistrer quelque chose, il attend jusqu'à ce que la connexion est établie et puis, derrière les coulisses, enregistre les données!
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas vous connecter à MongoDB de façon synchrone, mais vous pouvez vous débarrasser de ce vilain de rappel à partir de votre code.
La meilleure façon de le faire est d'adopter certains wrapper autour de
node-mongodb-natif
pilote.Prendre un regard sur les modules suivants.
mongojs
mongoskin
moine
Bien sûr, en interne tous d'entre eux sont en train d'établir MongoDB connexion de manière asynchrone.
monk
, mais ils sont tous super. =)À l'aide de la
async
de la bibliothèque, vous pouvez aleve certaines de ces questions.Par exemple dans mon démarrage du serveur, je ne les suivants :
Si vous utilisez le Nœud 6 et versions, vous pouvez faire quelque chose comme ceci:
Vous pouvez le faire avec thunky, thunky exécute une fonction async une fois et il la met en cache, les appels suivants sont renvoyés à partir de la mémoire cache.
*Note: j'utilise des 3 derniers.x mongodb pilote