Ce titre lui-même est une proposition, car par défaut, chaque module d'une application Node.js est partagé avec la même connexion de base de données. Mais si la posture est erronée, elle peut être laide et peut même mal tourner.
Vous pouvez ignorer la partie suivante et arriver au point.
arrière-plan
Récemment, je fais une conception de cours professionnels, le titre est "Air Ticket Booking Management System". L'exigence est relativement simple, j'ai donc essayé d'utiliser le Node.js que j'apprenais récemment. J'enquêtais également sur le type de cadre Node.js plus approprié. Après avoir lu quelques frameworks, j'ai découvert que c'était un tueur. Si vous avez le temps de lire les documents et les informations de recherche, il est préférable de l'écrire directement. Enfin, après avoir écrit, je mettrai le code sur GitHub. Tout le monde est le bienvenu pour me critiquer et me corriger.
En termes de base de données, je pensais que je connaissais plus et aimais JSON (je l'admets si je n'avais pas appris bien SQL -_- #), alors j'ai choisi MongoDB. Node + Mongo est une combinaison backend de plus en plus populaire ces dernières années, et il y a beaucoup d'informations sur la façon de l'utiliser ensemble sur Internet. Mais afin de gagner du temps (la conception du cours ne fait que plus d'une semaine) et de me concentrer davantage sur le système et la logique, j'ai utilisé Mongoose, une extension Node.js spécialement utilisée pour la modélisation des données MongoDB, pour réduire considérablement le code qui exploite la base de données.
Sujet principal
J'ai établi deux modèles de données, l'un est l'utilisateur (utilisateur) et l'autre est le vol (vol), qui sont encapsulés dans les deux modules (modules) de l'utilisateur.js, vol.js. Le modèle est spécifiquement responsable de l'interaction avec la base de données. Les modules d'utilisateur et de vol doivent se connecter à la base de données. Au début, mon code était le suivant:
// ------ user.js ----- // nécessite Mongoose.js référence mongoose.jsvar m = require ('mongoose'); // connecter à la base de données se connecter à la base de données m.connect ('mongodb: // localhost / test'); // ... un autre code ... // ---- Flight.js ----- // Besoin de Mongoose.js Référence Mongoose.jsvar m = require ('mongoose'); // Connectez-vous à la base de données Connectez-vous à la base de données m.connect ('mongodb: // localhost / test'); // ... un autre code ... // ------ modèles.js ----- var user = require ('./ user'), flight = required ('./ flight'); // ----- index.js ----- var modèles = requireSans oublier que cette méthode d'écriture n'est pas du tout sèche, cette méthode elle-même est erronée. Lorsque j'exécute index.js, j'obtiens l'erreur suivante.
> nœud index.js> Erreur de connexion: {[Erreur: essayant d'ouvrir la connexion non clôturée.] État: 2}L'erreur est: essayez d'ouvrir une connexion non clos.
Nous devons donc nous connecter à la base de données une fois au même endroit, puis d'autres modules qui doivent se connecter à la base de données interagissent avec la base de données via ce module. C'était comme une planche de câblage, et il a crié sans hésitation: "Il n'y a qu'une seule prise sur le mur, ne le vole pas! Laisse-moi partir! Tu ... c'est bien!"
Plan spécifique
Nous mettons l'action de connexion à la base de données dans un module et exposons la connexion à d'autres modules de toute l'application, puis d'autres modules qui doivent se connecter à la base de données peuvent se référer à cette connexion.
// ----- database.js ----- var m = require ('mongoose'); m.connect ('mongodb: // localhost / test'); // référence à la connexion de la base de données qui nécessite une référence pour cette connexion var db = M.Connection; ----- user.js ----- flight.js similaires ----- / ... un autre code ... // nous transmettons la référence de la connexion de la base de données en tant que paramètre dans Models.js module.exports = function (db) {if (db) {// ... Do Things with the Connection ... Si vous vous connectez à la base de données, vous pouvez effectuer des opérations liées à la date Récupérer la référence à la connexion de la base de données Reportez-vous à la connexion de la base de données var db = require ('./ base de données'); // transmettez la référence à la connexion de la base de données dans le module qui doit se connecter à la base de données, et la tâche est terminée! var user = require ('./ user') (db), flight = require ('./ flight') (db);C'est une façon d'obtenir plusieurs modules d'une application Node.js pour partager les connexions de la base de données. Je l'ai vu sur StackOverflow. Si vous avez une meilleure façon, partagez-la avec vous dans les commentaires!