Passer au contenu

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.

Fenêtre de terminal
$ npm install --save @nestjs/typeorm typeorm mysql2

Une fois le processus d’installation terminé, nous pouvons importer le TypeOrmModule dans le module racine AppModule.

app.module.ts
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
retryAttemptsNombre de tentatives de connexion à la base de données (par défaut : 10)
retryDelayDélai entre les tentatives de reconnexion (ms) (par défaut : 3000)
autoLoadEntitiesSi 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 :

app.module.ts
import { DataSource } from 'typeorm';
@Module({
imports: [TypeOrmModule.forRoot(), UsersModule],
})
export class AppModule {
constructor(private dataSource: DataSource) {}
}