DEV Community

Sazzad Hossain Saju
Sazzad Hossain Saju

Posted on

Save Data to Supabase from Nuxt 3 with Prisma — The Easy Way

When I tried saving data from Nuxt 3 → Supabase (Postgres) → Prisma, I thought it would be simple. But I ran into a few roadblocks — especially around Prisma’s client setup in a serverless Nuxt environment. After quite a struggle, here's the clean version that finally works:

1. Prisma Schema (prisma/schema.prisma)
The first problem I hit: Prisma client wouldn’t generate correctly in Nuxt.
Solution → remove the output line in the generator so Nuxt uses the default ESM client.

generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") directUrl = env("DIRECT_URL") } model Car { id Int @id @default(autoincrement()) name String miles Int price Int } 
Enter fullscreen mode Exit fullscreen mode
  1. Shared Prisma Client (/server/utils/prisma.js) Challenge: Prisma was spinning up multiple instances in dev (hot reload issue). Solution: create a single shared Prisma client and reuse it.
import { PrismaClient } from '@prisma/client'; const globalForPrisma = globalThis; export const prisma = globalForPrisma.prisma ?? new PrismaClient({ log: ['query'] }); if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma; 
Enter fullscreen mode Exit fullscreen mode
  1. API Route (/server/api/car/listings/index.js) Now that Prisma is stable, we can write an API handler that creates new car records.
import { prisma } from '~/server/utils/prisma'; export default defineEventHandler(async (event) => { const body = await readBody(event); const car = await prisma.car.create({ data: { name: body.name, miles: body.miles, price: body.price, }, }); return car; }); 
Enter fullscreen mode Exit fullscreen mode
  1. Run + Test
  • Generate Prisma client

npx prisma generate

  • Run Nuxt dev server

npm run dev

  • Test the API route in Postman (or Thunder Client in VS Code).

When the request succeeds, you’ll see the record saved to Supabase Postgres

The flow is now simple:
Define schema → set up shared client → call prisma.car.create() → test.

Top comments (0)