Base de données
Nest est agnostique en matière de bases de données, vous permettant de vous intégrer facilement à n’importe quelle base de données SQL ou NoSQL. Vous disposez de plusieurs options en fonction de vos préférences. À un niveau général, connecter Nest à une base de données se résume simplement à charger un pilote Node.js approprié pour la base de données, tout comme vous le feriez avec Express ou Fastify.
Vous pouvez également utiliser directement n’importe quelle bibliothèque d’intégration de base de données Node.js ou ORM, comme MikroORM (voir la recette de MikroORM), Sequelize (voir l’intégration de Sequelize), Knex.js (voir le tutoriel Knex.js), TypeORM, et Prisma (voir la recette de Prisma), pour opérer à un niveau d’abstraction plus élevé.
Intégration TypeORM
Pour s’intégrer aux bases de données SQL et NoSQL, Nest fournit le paquet @nestjs/typeorm
. TypeORM est le plus mature des ORM disponibles pour TypeScript. Étant écrit en TypeScript, il s’intègre bien avec le cadre de Nest.
Pour commencer à l’utiliser, nous installons d’abord les dépendances requises. Dans ce chapitre, nous démontrerons l’utilisation du populaire système de gestion de base de données relationnelle MySQL, mais TypeORM prend en charge de nombreuses bases de données relationnelles, telles que PostgreSQL, Oracle, Microsoft SQL Server, SQLite et même des bases de données NoSQL comme MongoDB. La procédure que nous parcourons dans ce chapitre sera la même pour toute base de données prise en charge par TypeORM. Vous devrez simplement installer les bibliothèques API client associées pour votre base de données sélectionnée.
$ npm install --save @nestjs/typeorm typeorm mysql2
Une fois le processus d’installation terminé, nous pouvons importer le TypeOrmModule
dans le module racine AppModule
.
import { Module } from '@nestjs/common';import { TypeOrmModule } from '@nestjs/typeorm';
@Module({ imports: [ TypeOrmModule.forRoot({ type: 'mysql', host: 'localhost', port: 3306, username: 'root', password: 'root', database: 'test', entities: [], synchronize: true, }), ],})export class AppModule {}
Le méthode forRoot()
prend en charge toutes les propriétés de configuration exposées par le constructeur DataSource
de TypeORM. De plus, plusieurs propriétés de configuration supplémentaires sont décrites ci-dessous.
Propriété | Description |
---|---|
retryAttempts | Nombre de tentatives de connexion à la base de données (par défaut : 10 ) |
retryDelay | Délai entre les tentatives de reconnexion (ms) (par défaut : 3000 ) |
autoLoadEntities | Si true , les entités seront chargées automatiquement (par défaut : false ) |
Une fois cela fait, les objets DataSource
et EntityManager
de TypeORM seront disponibles pour injection dans l’ensemble du projet (sans avoir besoin d’importer de modules), par exemple :
import { DataSource } from 'typeorm';
@Module({ imports: [TypeOrmModule.forRoot(), UsersModule],})export class AppModule { constructor(private dataSource: DataSource) {}}