Travailler avec les bases de données en TypeScript : PostgreSQL et MongoDB
TypeScript est un langage de programmation puissant qui ajoute le typage statique à JavaScript. Lors du développement d'applications web modernes, le travail avec les bases de données est une partie essentielle. Dans cet article, nous allons voir comment travailler efficacement avec deux bases de données populaires — la relationnelle PostgreSQL et la document-oriented MongoDB — en utilisant TypeScript.
1. Préparation de l'environnement et choix de l'ORM
Avant de commencer, il est nécessaire de configurer le projet. Créez un nouveau projet Node.js avec le support de TypeScript :
mkdir ts-database-democd ts-database-demonpm init -ynpm install typescript @types/node ts-node --save-devnpx tsc --initPour travailler avec les bases de données, nous utiliserons des bibliothèques populaires :
- Prisma — un ORM moderne pour PostgreSQL (et d'autres bases SQL)
- Mongoose — un ODM pour MongoDB avec un excellent support de TypeScript
Installez les paquets nécessaires :
npm install prisma @prisma/client mongoosenpm install @types/mongoose --save-dev2. Travailler avec PostgreSQL via Prisma
Prisma est un ORM qui génère automatiquement les types TypeScript basés sur votre schéma de base de données. Cela garantit une sécurité de typage complète.
2.1. Configuration de Prisma
Initialisez Prisma dans le projet :
npx prisma initDans le fichier prisma/schema.prisma, définissez le modèle de données :
generator client { provider = "prisma-client-js"}
datasource db { provider = "postgresql" url = env("DATABASE_URL")}
model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt}
model Post { id Int @id @default(autoincrement()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt}Créez un fichier .env avec la chaîne de connexion :
DATABASE_URL="postgresql://user:password@localhost:5432/mydb"Exécutez la migration :
npx prisma migrate dev --name init2.2. Opérations CRUD avec TypeScript
Écrivons maintenant du code typé pour travailler avec la base de données. Créez un fichier src/postgres.ts :
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
interface CreateUserInput { email: string; name?: string;}
interface CreatePostInput { title: string; content?: string; authorId: number;}
// Création d'un utilisateurasync function createUser(data: CreateUserInput) { return await prisma.user.create({ data: { email: data.email, name: data.name, }, });}
// Récupération de tous les utilisateurs avec leurs postsasync function getUsersWithPosts() { return await prisma.user.findMany({ include: { posts: true, }, });}
// Création d'un postasync function createPost(data: CreatePostInput) { return await prisma.post.create({ data: { title: data.title, content: data.content, authorId: data.authorId, }, });}
// Mise à jour d'un utilisateurasync function updateUser(id: number, data: Partial<CreateUserInput>) { return await prisma.user.update({ where: { id }, data, });}
// Suppression d'un utilisateurasync function deleteUser(id: number) { return await prisma.user.delete({ where: { id }, });}
// Exemple d'utilisation(async () => { try { const user = await createUser({ email: 'ivan@example.com', n