Node.js met Prisma

Prisma is een ORM: je beschrijft je tabellen in een schema en werkt met getypte objecten in plaats van ruwe SQL.

Installeren

bash
npm install prisma @prisma/client
npx prisma init

Schema instellen

Zet in prisma/schema.prisma de provider op mysql en een voorbeeldmodel:

prisma
datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

generator client {
  provider = "prisma-client-js"
}

model Product {
  id    Int     @id @default(autoincrement())
  naam  String
  prijs Decimal @db.Decimal(10, 2)
}

De database-URL

Prisma gebruikt één DATABASE_URL. Stel die samen uit de losse DB_* variabelen. Voeg in je app onder Cloud → Apps → tabblad Variabelen een variabele toe:

text
DATABASE_URL = mysql://DB_USER:DB_PASS@DB_HOST:DB_PORT/DB_NAME

Of bouw hem in prisma.config.ts uit de bestaande variabelen:

ts
import { defineConfig } from "prisma/config";

export default defineConfig({
  schema: "prisma/schema.prisma",
  datasource: {
    url: `mysql://${process.env.DB_USER}:${process.env.DB_PASS}@${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_NAME}`,
  },
});

Migreren en queryen

bash
npx prisma migrate dev --name init
ts
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();

// Aanmaken
await prisma.product.create({ data: { naam: "Toetsenbord", prijs: 49.99 } });

// Ophalen
const goedkoop = await prisma.product.findMany({
  where: { prijs: { lt: 100 } },
  orderBy: { prijs: "desc" },
});
MariaDB-adapter
Gebruik je de nieuwere Prisma-adapters? Installeer npm i @prisma/adapter-mariadb en geef de losse DB_* variabelen door aan new PrismaMariaDb({ host, user, password, database, port }). Dat geeft Prisma MySQL/MariaDB-ondersteuning zonder aparte connection string.
Vergeet de build-stap niet
Draai npx prisma generate (en zo nodig migrate deploy) tijdens je build. Dat kan via het post-build commando in de app-instellingen.

Meer in Node.js