Volver al inicio

API en Next.js · Paso 8 de 9

Generar y reutilizar el cliente de Prisma

Cliente tipado, una sola instancia en desarrollo y los comandos generate y Studio.

Tras prisma migrate dev o prisma generate, Prisma expone un cliente en @prisma/client: métodos como prisma.producto.findMany() con autocompletado y tipos alineados con schema.prisma.

Una sola instancia en desarrollo

En Next.js, el servidor de desarrollo recarga módulos a menudo. Si haces new PrismaClient() en cada import, acabas con demasiadas conexiones a SQLite. El patrón habitual es reutilizar una instancia global en memoria (solo en desarrollo):

import { PrismaClient } from "@prisma/client"

const globalForPrisma = globalThis as unknown as {
  prisma: PrismaClient | undefined
}

export const prisma = globalForPrisma.prisma ?? new PrismaClient()

if (process.env.NODE_ENV !== "production") {
  globalForPrisma.prisma = prisma
}

Guarda esto como lib/prisma.ts (o lib/db.ts, si prefieres ese nombre: lo importante es un solo sitio desde el que exportas prisma).

Qué resuelve cada pieza

  • PrismaClient — clase generada a partir de tus modelos.
  • globalThis — en el navegador no aplica; en el runtime de Node del servidor de Next, evita duplicar el cliente entre recargas.
  • Comprobar NODE_ENV — en producción suele bastar una instancia por proceso; el patrón anterior no suele hacer daño y mantien el mismo archivo en todos los entornos.

Comandos que volverás a usar

  • npx prisma generate — regenera el cliente cuando cambias schema.prisma (a veces ya lo hace migrate dev).
  • npx prisma studio — interfaz web para ver y editar filas; útil para comprobar que el CRUD escribe bien.

Con prisma importable desde @/lib/prisma, ya puedes llamar a la base desde una ruta de API. La siguiente lección hace el primer CRUD sobre Producto: listar y crear sin salir de app/api.

Cuando hayas leído el texto, marca la lección para seguir el progreso.