Travailler avec les bases de données en TypeScript : PostgreSQL et MongoDB pour débutants
TypeScript est une extension fortement typée de JavaScript qui apporte fiabilité et prévisibilité au code. Lors du travail avec des bases de données (BDD), TypeScript est particulièrement utile : vous pouvez définir des types pour les entités, vérifier la validité des requêtes au moment de la compilation et éviter de nombreuses erreurs d'exécution. Dans cet article, nous verrons comment se connecter aux deux bases de données les plus populaires — la relationnelle PostgreSQL et l'orientée documents MongoDB — et effectuer des opérations de base sur les données. Ce contenu est destiné aux développeurs débutants connaissant les bases de TypeScript.
Préparation de l'environnement et installation des dépendances
Avant d'écrire du code, il est nécessaire de configurer le projet. Créez un nouveau répertoire et initialisez le projet :
mkdir ts-db-examplecd ts-db-examplenpm init -ynpm install typescript @types/node ts-node --save-devnpx tsc --initInstallons maintenant les bibliothèques pour travailler avec les bases de données. Pour PostgreSQL, nous utiliserons TypeORM (un ORM populaire avec une bonne prise en charge de TypeScript), et pour MongoDB — Mongoose (une bibliothèque pour modéliser les schémas et travailler avec MongoDB).
npm install typeorm reflect-metadata pgnpm install mongooseInstallons également les types pour Node.js et les configurations pour TypeORM :
npm install @types/node --save-devDans le fichier tsconfig.json, assurez-vous d'activer les options :
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true }}La structure du projet est maintenant prête. Créez un dossier src et, à l'intérieur, les fichiers pour travailler avec chaque base de données.
Travailler avec PostgreSQL via TypeORM
Configuration de la connexion
TypeORM permet de travailler avec la base de données via des décorateurs et des entités. Créons un fichier src/postgres.ts et configurons la connexion à la base de données PostgreSQL locale ts_db :
import "reflect-metadata";import { DataSource } from "typeorm";
export const AppDataSource = new DataSource({ type: "postgres", host: "localhost", port: 5432, username: "postgres", password: "password", database: "ts_db", synchronize: true, // crée automatiquement les tables (uniquement pour le développement) logging: false, entities: ["src/entity/**/*.ts"],});Création d'une entité (Entity)
Une entité est une classe qui est mappée à une table dans la base de données. Créons un dossier src/entity et un fichier User.ts :
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column({ length: 100 }) name: string;
@Column({ unique: true }) email: string;
@Column({ default: 18 }) age: number;}Exécution des opérations CRUD
Écrivons maintenant les fonctions pour créer, lire, mettre à jour et supprimer des utilisateurs dans le fichier src/postgres-crud.ts :
import { AppDataSource } from "./postgres";import { User } from "./entity/User";
async function main() { await AppDataSource.initialize(); const userRepository = AppDataSource.getRepository(User);
// CREATE — création d'un nouvel utilisateur const newUser = userRepository.create({ name: "Ivan Petrov", email: "ivan@example.com", age: 25, }); await userRepository.save(newUser); console.log("Utilisateur créé :", newUser);
// READ — lecture de tous les utilisateurs const allUsers = await userRepository.find(); console.log("Tous les utilisateurs :", allUsers);
// UPDATE — mise à jour de l'âge de l'utilisateur avec id=1 const userToUpdate =