Maison  >  Article  >  interface Web  >  Explication détaillée de la méthode de partage des connexions aux bases de données entre les modules Node.js (tutoriel graphique)

Explication détaillée de la méthode de partage des connexions aux bases de données entre les modules Node.js (tutoriel graphique)

亚连
亚连original
2018-05-21 11:25:031831parcourir

Nous pouvons écrire un module de connexion de base de données unifié pour le partage entre modules dans l'environnement Node local. Ensuite, nous expliquerons en détail la méthode de partage des connexions de base de données entre les modules Node.js

Ce titre lui-même est un. Proposition, car par défaut, chaque module d'une application Node.js partage la même connexion à la base de données. Mais si la posture est mauvaise, elle peut paraître moche, voire mal tourner.

Vous pouvez ignorer cette partie et aller droit au but.

ContexteRécemment, je fais de la conception de cours professionnels, le titre est "Système de gestion des réservations de billets d'avion". L'exigence est relativement simple, j'ai donc essayé d'utiliser Node.js, que j'ai appris récemment, pour le faire. À l'origine, je cherchais quel framework Node.js serait le plus approprié. Après avoir examiné quelques frameworks, j'ai réalisé que c'était exagéré si je n'avais pas le temps de rechercher des documents et des informations, autant commencer à l'écrire directement. . Une fois que j'aurai fini d'écrire le code, je le mettrai sur Github. Tout le monde est invité à me critiquer et à me corriger.

En ce qui concerne la base de données, je pensais connaître et aimer JSON (admettez-le si vous n'avez pas bien appris SQL -_-#), alors j'ai choisi MongoDB. Node + Mongo est une combinaison backend de plus en plus populaire ces dernières années, et il existe de nombreuses informations sur la façon de l'utiliser ensemble sur Internet. Mais afin de gagner du temps (la conception du cours ne prend 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écifiquement utilisée pour la modélisation des données MongoDB, afin de réduire considérablement le temps nécessaire au fonctionnement. le code de la base de données.

En brefJ'ai établi deux modèles de données (Model), l'un est l'utilisateur (User) et l'autre est le vol (Flight), qui sont encapsulés dans user.js et Flight .js respectivement. Le modèle est spécifiquement responsable de l'interaction avec la base de données. Les modules utilisateur et de vol doivent se connecter à la base de données. Au début, mon code ressemblait à ceci :

// ----- user.js -----
// require mongoose.js 引用mongoose.js
var M = require('mongoose');
// connect to database 连接数据库
M.connect('mongodb://localhost/test');
// ... some other code ...

// ----- flight.js -----
// require mongoose.js 引用mongoose.js
var M = require('mongoose');
// connect to database 连接数据库
M.connect('mongodb://localhost/test');
// ... some other code ...

// ----- models.js -----
var user = require('./user'),
  flight = require('./flight');

// ----- index.js -----
var Models = require('./models');

Sans parler de cette façon d'écrire. n'est pas du tout SEC. La méthode elle-même est fausse. Lorsque j'exécute index.js, j'obtiens l'erreur suivante.

> node index.js
> Connection error: { [Error: Trying to open unclosed connection.] state: 2 }

L'erreur est la suivante : Une tentative d'ouverture d'une connexion qui n'a pas été fermée a été effectuée.

Nous devrions donc nous connecter à la base de données une fois au même endroit, puis les autres modules qui doivent se connecter à la base de données interagissent avec la base de données via ce module. C'est comme une multiprise qui crie sans hésiter : "Il n'y a qu'une seule prise au mur, ne l'attrape pas ! Laisse-moi faire ! Toi... C'est ça !"

Nous mettons l'action de connexion à la base de données dans un module et exposons la connexion à d'autres modules dans l'ensemble de l'application, puis les autres modules qui doivent se connecter à la base de données peuvent référencer cette connexion.

Il s'agit d'un moyen de partager une connexion à une base de données entre plusieurs modules d'une application Node.js. J'ai vu ça sur StackOverflow.

// ----- database.js -----
var M = require('mongoose');
M.connect('mongodb://localhost/test');
// reference to the database connection 为这个连接创建一个引用
var db = M.connection;
// expose to modules that require database.js 把这个引用暴露给引用 database 模块的其他模块
module.exports = db;

// ----- user.js ----- flight.js 类似 -----
// ... some other code ...
// 我们会在 models.js 中,把数据库连接的引用作为参数传进来
module.exports = function( db ){
  if( db ){
    // ... do things with the connection ... 如果连接了数据库,就可以执行数据库相关的操作了
  }
}

// ----- models.js -----
// require database module, retrieve the reference to database connection 引用 databse 模块,获取数据库连接的引用
var db = require('./database');
// 把数据库连接的引用传入需要连接数据库的模块,任务完成!
var user = require('./user')( db ),
  flight = require('./flight')( db );
Ce qui précède est ce que j'ai compilé pour vous. J'espère que cela vous sera utile à l'avenir.

Articles associés :

Explication détaillée de plusieurs méthodes d'emprunt en JavaScript (tutoriel image et texte)


Utiliser JavaScript pour implémenter la méthode String de correspondance de modèles


javascript

Cette explication détaillée (tutoriel graphique)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn