Comment utiliser un orm dans Node.js

logo nœud.js

dans ce blog Je parlerai d’un peu de choses sur les ormes, de leurs avantages et de leurs limitations (inconvénients), qui sont séquelisent et comment l’utiliser.

Mappage d’objet-relationnel

est un Technique pour convertir les données entre le système de types de langues de programmation et de la base de données. Comme son nom l’indique, cela n’est abordé qu’à la base de données relationnelle (SQL). Cela crée un effet « Objet de base de données virtuelle » sur la base de données relationnelle, cet effet nous permet de manipuler la base de données via le code.

objet – référence à / l’objet (s) que nous pouvons utiliser dans Notre langue.

relationnel – fait référence à notre système de gestionnaire de base de données (MySQL, MSSQL, PostgreSQL).

Mappage – référence est référencé à la connexion entre les objets et les tables.

TL; DR ORM est une technique qui nous permet de faire des questions et de manipuler des données de la base de données à partir d’une langue de programmation.

Avantages

  • Résumé: Conception d’une structure ou d’un modèle isolé de la base de données.
  • portable: vous permet de transporter la structure de votre orme de SGMS.
  • Nardage de données: Au cas où une table a une ou plusieurs relations avec d’autres.

contre

  • lent: Si vous comparez le temps de réponse entre une requête crue et une requête faite par Objets, la requête crue est beaucoup plus rapide car il n’y a pas de couche (mappage).
  • Complexité: Nous devrons parfois faire des requêtes complexes, heureusement Sequelize vous permet d’exécuter des requêtes brutes.

qui est séquilibre?

Sequelize est un orM basé sur des promesses pour node.js. Prend en charge PostgreSQL, MySQL, SQLITE et MSSQL, et fournit des caractéristiques solides des transactions, des relations entre les tableaux, les mécanismes de migration et le chargement de données, et plus encore.

Parce que j’ai décidé d’utiliser la séquelle?

Sequelize gère vos objets comme des promesses, quelque chose qui va de pair avec la boucle d’événement de nœud.js.

Je vais maintenant vous montrer comment créer et migrer des tables, le téléchargement données et comment consulter ces données. Si vous souhaitez vérifier le code, vous pouvez le cloner à partir d’ici.

Exigences

  • nœud.js 8.0 +
  • mysql 5.7 +

Nous allons d’abord installer le module SEQULIZE-CLI:

 NPM I -G SEQULIZE-CLI 

ALORS Nous allons créer un dossier dans lequel il contient notre application, nous créerons un fichier JS et nous allons installer SEQULIZe et sa dialecte (dans ce cas MySQL):

 MKDIR HOWTO -Equiliber & 
&
CD HOWTO-SEQUELIZETOUCH INDEX.JSNPM Init -YNPM I -S SEQUELISE MYSQL2

NOUS Demandez au projet avec SEQULIZE-CLI:

 SEQULISE INIT 

SEQULIZE-CLI a créé une structure de base à la racine de notre projet:

Si nous examinons le fichier ./config/config.json, nous voyons que nous avons 3 options de connexion à une base de données, Modifions l’option « Développement »:

 "Développement": {"Nom d'utilisateur": "root", "mot de passe": "tucontraseña", "base de données": "howto-séquéris", "hosto": "127.0.0.1", "dialecte": "mysql" "Opérateurs": faux, "DialecteOptions": {"Charset": "UTF8MB4"}, "Logging": true, "Benchmark": true}  pré> 

examinez maintenant le fichier ./models/index. Js Ce fichier a une fonction pour créer une nouvelle instance séquélise chaque fois qu'on appelle une variable d'environnement par défaut au "développement", qui utilisera la base de données, l'hôte, l'utilisateur, le mot de passe et les options que nous venons d'ajouter.

Nous croyons à notre base de données avec la commande suivante:

 SEQULISE DB: Créez 

Très bien! Maintenant, commençons à créer notre Modèles:

 SEQUELISE MODÈLE: Générer - Nom Utilisateur --Tributes Nom: String, Nom: String, ALAVERDOM: String, Email: String SEQUELISE MODEL: - Nom LanguageP --Tributes Nom: String Squiize Modèle: générer --Name user_lenguajep --tributesueroid: entier, langue: Integer  pré> 

Après avoir créé nos modèles, vous devez faire la relation entre les utilisateurs et les langues.

./ Modèles / utilisateur.js.js

 'Utilisez strict "; module.exports = (suite SEQULISE, DaTatypes) =  {vareur var = sec lize.define ("utilisateur", {nom: DatatyTypes.string, nom de famille: DaTatypes.string, ALAVERDOM: DaTatypes.string, Email: DaTatypes.string}, {}); Utilisateur.associate = fonction (modèles) {// associations peut être définie ici user.belongsoman (modèles.Langue, {à travers: 'user_lenguajep', comme suit: "LanguesProgrammation", ForeignGey: 'UserID',}); Utilisateur de retour;}; 

analyser cela, nous voyons que notre modèle utilisateur exécute une fonction d'appartenance qui pointe vers le modèle de langue, dans quelques mots, nous indiquons qu'un utilisateur peut appartenir à plusieurs langues. Dans les options, par l'intermédiaire indique la table pour laquelle vous devez traverser ces relations, c'est-à-dire facultatif, c'est le nom de la propriété ou de la clé qui nous donnera ces relations, une marque de fourrure à l'étranger, car la colonne que nous voulons chercher ces Relations.

./ Modèles / LanguageP.js

 'Utilisez strict'; module.exports = (SEQUELIZE, DaTatypes) =  {var emmanglingp = sequelize.define ("LanguageP ', {nom: DaTatypes.string}, {}); LanguageP.Associate = Fonction (Modèles) {// Les associations peuvent être définies ici LanguageP.Belongstomany (modèles. Renvoyer le langageP;};  pré> 

Nous faisons la même chose avec les langues (languette), mais désignant maintenant le modèle utilisateur.

Rappelons un peu ce que nous parlons, orm Travaille sur une couche qu'il s'agit de la cartographie (mappage), ces relations ne seront effectuées que dans le projet, nous devons créer une migration qui affecte la base de données. Il existe des ormes qu'ils examinent si vous avez apporté des modifications à vos modèles et créez de nouvelles migrations basées sur ces changements (Django ORM, PEEWEE), dans notre cas de séquilibre ne le prévoit pas, nous allons donc créer nos migrations:

 SEQUELISE MIGRATION: générer --Name relation-beaucoup-à-plusieurs  pré> 

Ceci a généré un nouveau fichier avec un squelette dans nos migrations, nous devons maintenant la modifier :

 'utiliser strict "; module.exports = {UP: (QueryInterface, Sequelize) =  {return, {Type: "Type:" Clé étrangère ", Nom: 'fk_usuariolegajep_usuaro_1', Référence: {Table:" Utilisateur " , Field: 'ID',}, Ondelete: «Aucune action», ONUPDATE: «Aucune action»,}), QueryInterface.AddConstraint ('user_lenguajep' ,, {Type: 'Clé étrangère », Nom:' fk_usuariolegegajap_lenguep_1 ', références : {Table: 'LanguageP', champ: 'ID',}, Ondelete: "Aucune action", ONUPDate: "Aucune action",}),]}, Down: (QueryInterface, séquilibez) =  {return}};  pré> 

Ce fichier exporte un objet avec 2 propriétés, de haut en bas. La propriété up est chargée de livrer une promesse qui modifie les données (créez des tableaux, des relations, des champs, des types de modification, etc.), et la propriété en bas le cas autrement, rétablissez les modifications apportées à la hausse.

Très bien, touche maintenant ma partie préférée, vous devez exécuter les scripts de migration avec la commande suivante:

 SEQULISE DB: Migrer 

BOOM! Mais que s'est-il passé?!?! Si nous lisons soigneusement l'erreur de la console indique qu'il ne trouve pas la table User_LenguaJet dans la base de données, passez en revue les tables. Il y a quelque chose de curieux, tout finit par un "s", c'est parce que SEQULIZE-CLI gère les planches de pluriel par défaut, même lorsque dans nos options, nous avons FreeBezetablEame: c'est vrai, ce cas peut être vu ici.

Ensuite, nous devons simplement modifier le nom des tables un pluriel par rapport - beaucoup-à-plusieurs (user_lenguajeps, utilisateurs, language).

nous annulons les migrations, reculons et voilà :
 SEQUELISE DB: migrer: Annuler: AllezLiser dB: migrer 

Les migrations ont réussi! Nous devons maintenant remplir ces tables, SEQULIZE-CLI utilise les graines (graines). Nous allons créer 3 fichiers de graines:

 SEQUELISE SEMENDE: Générez --Name utilisateurLize Semences: Générer --Name LanguagePeLize Semences: générer -Name user_lenguajap  pré> 

Ces graines sont situées dans le dossier ./seederers, vous devez mettre les données qui nous voulons charger dans la base de données.

semi Tout utilisateur:

 'Utilisez strict'; module.exports = {UP: (QueryInterface, Sequelize) =  {Retour QueryInterface.bulkinsert ("Utilisateurs ', {}); }, Down: (QueryInterface, séquelon) =  {Retour QueryInterface.bulkdelete ("Utilisateurs ', null, {}); }};  pré> 

graine de lameP:

 "Utiliser strict"; module.exports = {UP: (QueryInterface, séquelon) =  {Retour QueryInterface.bulkinsert ("Languageps ', {}); }, Down: (QueryInterface, Sequelize) =  {Retour QueryInterface.bulkdelete ("Language", Null, {}); }};  pré> 

graine user_lenguajep:

 "Utiliser strict"; module.exports = {UP: (QueryInterface, Sequelize) =  {Retour QueryInterface.bulkinsert ('user_lenguajeps' ,, {}); }, Down: (QueryInterface, Sequelize) =  {Return QueryInterface.Bulkdelete ('user_lenguajeps, null, {}); }};  pré> 

Vous devez maintenant charger ces données dans la base de données avec la commande suivante:

 SEQUELISE DB: GRAIN: Tout 

très bien! Nous avons déjà constaté comment initialiser un projet avec séquelon, créer des modèles, attribuer des relations, créer des migrations, exécuter et annuler des migrations, créer des graines et les télécharger dans la base de données, nous n'avons besoin que de faire des requêtes. Nous allons à notre index.js à la racine et écrivez la fonction suivante:

 const dB = nécessite ("./ modèles '); Const main = async () =  {ESSAY {Essayez les utilisateurs = attendre db.suario.findall ({Inclure:}, via: {attributs:},}],}); Console.log (json.stringify (utilisateurs)); Processus.exit (); } attraper (erreur) {console.log (erreur); }}; Principal ();  pré> 

Nous le sauveons et exécutons le programme (par console ou avec l'outil de débogage de code Visual Studio et nous devrions recevoir un JSON avec une liste d'utilisateurs (dans cet exemple, il n'y en a qu'un) avec vos données et langues:

}]  pré> 

Nous avons appris Sequelize-cli et les bases de la séquelle, nous pouvons maintenant créer une API qui exécute Actions CRUD afin que nos clients le consomment!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *