web:api:prisma-fastify

Ceci est une ancienne révision du document !


API REST avec Fastify + Prisma

Objectif :

  • Installer le projet
  • Configurer Fastify
  • Configurer Prisma
  • Créer un modèle
  • Exposer des routes CRUD simples

  • Node.js >= 18
  • PostgreSQL installé

mkdir fastify-prisma-api
cd fastify-prisma-api
npm init -y

Installation dépendances :

npm install fastify @prisma/client
npm install -D prisma typescript ts-node-dev @types/node

Initialiser Prisma :

npx prisma init

Créer `tsconfig.json` :

{
  "compilerOptions": {
    "target": "ES2020",
    "module": "CommonJS",
    "rootDir": "./src",
    "outDir": "./dist",
    "strict": true,
    "esModuleInterop": true
  }
}

Ajouter dans `package.json` :

"scripts": {
  "dev": "ts-node-dev --respawn src/server.ts"
}

Fichier `.env` :

DATABASE_URL="postgresql://user:password@localhost:5432/fastifydb"

Modifier `prisma/schema.prisma` :

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
 
generator client {
  provider = "prisma-client-js"
}
 
model Post {
  id        Int      @id @default(autoincrement())
  title     String
  content   String?
  createdAt DateTime @default(now())
}

Créer la base :

npx prisma migrate dev --name init

src/
 ├── server.ts
 └── prisma.ts

`src/prisma.ts`

import { PrismaClient } from "@prisma/client"
 
export const prisma = new PrismaClient()

`src/server.ts`

import Fastify from "fastify"
import { prisma } from "./prisma"
 
const app = Fastify({ logger: true })
 
app.get("/posts", async () => {
  return prisma.post.findMany()
})
 
app.post("/posts", async (request, reply) => {
  const { title, content } = request.body as any
 
  const post = await prisma.post.create({
    data: { title, content }
  })
 
  reply.code(201)
  return post
})
 
app.listen({ port: 3000 }, () => {
  console.log("Server running on http://localhost:3000")
})

  • web/api/prisma-fastify.1772585664.txt.gz
  • Dernière modification : il y a 37 heures
  • de jcheron