Pourquoi Prisma ?
Prisma est une alternative moderne aux ORM (Object Relational Mapping) traditionnels comme Sequelize ou TypeORM. Il est conçu pour simplifier la gestion de la base de données en offrant une API intuitive et type-safe. Un cas d'usage concret est le développement rapide de projets où on a besoin de manipuler des données relationnelles sans se soucier du boilerplate de code SQL.
Prerequis
- Connaissances en JavaScript ou TypeScript
- Node.js v14.0.0 ou plus tard
- PostgreSQL, MySQL ou MongoDB (pour les bases de données supportées)
- Un IDE comme Visual Studio Code avec la extension Prisma Client
Pour installer Prisma, exécutez :
npm install prisma --save-dev
npx prisma init
Concepts fondamentaux
1. Schéma Prisma (prisma.schema)
Le schéma Prisma est un fichier .schema qui décrit la structure de votre base de données.
// Exemple de schema Prisma
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?
}
2. Prisma Client
Prisma Client est généré à partir du schéma et fournit une API type-safe pour interagir avec la base de données.
// Exemple d'utilisation de Prisma Client
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();
async function main() {
const user = await prisma.user.create({
data: {
email: 'alice@prisma.io',
name: 'Alice'
}
});
console.log(user);
}
main()
.catch((e) => {
throw e;
})
.finally(async () => {
await prisma.$disconnect();
});
3. Migrations
Prisma utilise des migrations pour gérer les changements de schéma.
npx prisma migrate dev --name init
Mise en pratique : projet fil rouge - Gestionnaire de Tâches
Étape 1: Initialisation du Projet
Créez un nouveau dossier et initialisez un nouveau projet Node.js :
mkdir task-manager
cd task-manager
npm init -y
npm install prisma @prisma/client express
npx prisma init
Étape 2: Configuration de la Base de Données
Modifiez le fichier prisma/schema.prisma pour définir le schéma :
// prisma/schema.prisma
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Task {
id Int @id @default(autoincrement())
title String
description String?
completed Boolean @default(false)
}
Étape 3: Création des Migrations
Créez une migration initiale :
npx prisma migrate dev --name init
Étape 4: Création de l'API avec Express
Créez un fichier server.js pour définir l'API :
// server.js
const express = require('express');
const { PrismaClient } = require('@prisma/client');
const app = express();
app.use(express.json());
const prisma = new PrismaClient();
// Endpoint pour créer une tâche
app.post('/tasks', async (req, res) => {
const task = await prisma.task.create({
data: req.body,
});
res.json(task);
});
// Endpoint pour récupérer toutes les tâches
app.get('/tasks', async (req, res) => {
const tasks = await prisma.task.findMany();
res.json(tasks);
});
// Démarrage du serveur
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Étape 5: Test de l'API
Lancez le serveur et testez les endpoints :
node server.js
Ensuite, utilisez un outil comme curl ou Postman pour tester les endpoints :
## Créer une tâche
curl -X POST http://localhost:3000/tasks -H "Content-Type: application/json" -d '{"title": "Buy groceries"}'
## Récupérer toutes les tâches
curl http://localhost:3000/tasks
Erreurs frequentes et debugging
1. PrismaClientInitializationError: Prisma schema validation error
Code incorrect :
// prisma/schema.prisma (incorrect)
model User {
id Int @id @default(autoincrement())
email String @unique
}
Code correct :
// prisma/schema.prisma (correct)
model User {
id Int @id @default(autoincrement())
email String @unique
}
2. Error: No Prisma Client instance available.
Code incorrect :
// server.js (incorrect)
const { PrismaClient } = require('@prisma/client');
app.post('/tasks', async (req, res) => {
const task = await prisma.task.create({
data: req.body,
});
res.json(task);
});
Code correct :
// server.js (correct)
const express = require('express');
const { PrismaClient } = require('@prisma/client');
const app = express();
app.use(express.json());
const prisma = new PrismaClient();
app.post('/tasks', async (req, res) => {
const task = await prisma.task.create({
data: req.body,
});
res.json(task);
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Pour aller plus loin
- Utilisation des relations entre modèles : Explorez comment définir des relations dans Prisma pour gérer les liens entre différentes tables.
- Middleware et Hooks : Utilisez middleware et hooks pour ajouter des fonctionnalités avant ou après l'exécution de requêtes Prisma.
- Prisma Client JavaScript/TypeScript : En apprenant à utiliser Prisma Client dans un environnement JavaScript ou TypeScript, vous serez capable de travailler avec une API type-safe.
Défi pratique
Développez une application simple qui permet d'ajouter, mettre à jour et supprimer des utilisateurs. Utilisez les concepts que vous avez appris pour gérer les opérations CRUD sur la base de données.