La integración de bases de datos en aplicaciones modernas es un componente esencial para el desarrollo de software robusto. Prisma, como ORM (Object-Relational Mapping), simplifica enormemente la comunicación entre nuestra aplicación Node.js y bases de datos como PostgreSQL, permitiéndonos trabajar de manera más eficiente y segura con nuestros datos.
¿Cómo configurar Prisma con PostgreSQL en una aplicación Node.js?
Para comenzar a utilizar Prisma con PostgreSQL en nuestra aplicación Node.js, necesitamos seguir varios pasos de instalación y configuración. Este proceso nos permitirá establecer una comunicación efectiva entre nuestra aplicación y la base de datos.
Instalación de dependencias necesarias
Lo primero que debemos hacer es instalar los paquetes requeridos para trabajar con Prisma y PostgreSQL:
Prisma CLI: Como dependencia de desarrollo para gestionar nuestro esquema y migraciones
Prisma Client: Para interactuar con la base de datos desde nuestro código
pg: El driver de PostgreSQL necesario para la conexión
Inicialización y configuración del proyecto
Una vez instaladas las dependencias, debemos inicializar Prisma en nuestro proyecto:
npx prisma init
Este comando crea:
Una carpeta prisma con un archivo schema.prisma
Un archivo .env para nuestras variables de entorno
Es recomendable instalar la extensión de Prisma para tu editor de código, lo que facilitará la lectura y edición de los archivos .prisma con resaltado de sintaxis.
Ahora debemos configurar la conexión a nuestra base de datos en el archivo .env:
Implementación de endpoints para acceder a los datos
Ahora podemos crear rutas que utilicen Prisma para interactuar con la base de datos. Por ejemplo, para obtener todos los usuarios:
app.get('/db/users',async(req, res)=>{try{const users =await prisma.user.findMany(); res.json(users);}catch(error){ res.status(500).json({error:"Error al comunicarse con la base de datos"});}});
Es importante notar que al trabajar con Prisma:
Utilizamos funciones asíncronas (async/await) para manejar las operaciones de base de datos
Implementamos manejo de errores con bloques try/catch
Prisma proporciona métodos intuitivos como findMany(), findUnique(), create(), etc.
Ventajas de utilizar Prisma como ORM
Trabajar con Prisma nos ofrece múltiples beneficios:
Tipado seguro: Especialmente útil cuando se trabaja con TypeScript
Consultas programáticas: Más legibles y menos propensas a errores que escribir SQL directamente
Migraciones automáticas: Facilita la evolución del esquema de la base de datos
Prevención de inyección SQL: Mayor seguridad en las operaciones de base de datos
Autocompletado en el editor: Mejora la experiencia de desarrollo
¿Cómo probar la conexión a la base de datos?
Una vez configurado todo, podemos probar nuestra conexión ejecutando la aplicación:
npm run dev
Y accediendo a la ruta que hemos creado, por ejemplo: http://localhost:3000/db/users
Si la conexión es exitosa pero no hay datos, veremos un array vacío ([]). Esto indica que la conexión funciona correctamente, pero aún no hemos agregado usuarios a la base de datos.
Si hubiera un problema de conexión, veríamos el mensaje de error que definimos en nuestro manejador de errores.
La integración de Prisma con PostgreSQL proporciona una base sólida para desarrollar aplicaciones con persistencia de datos de manera eficiente. En próximas etapas, podrás expandir esta configuración para implementar operaciones CRUD completas y relaciones entre modelos.
¿Has trabajado antes con ORMs? ¿Qué te parece Prisma comparado con otras alternativas? Comparte tu experiencia en los comentarios.
Error: @prisma/client did not initialize yet.Please run "prisma generate" and try to import it again.```En caso de que reciban un error al importar la dependencia '@prisma/client', como el que les comparto pueden probar tomando de referencia la documentación de Prisma e importarlo desde la carpeta './generated/prisma'.require('dotenv').config();const express = require('express');const { PrismaClient } = require('./generated/prisma');const prisma = new PrismaClient();
```js
require('dotenv').config();const express =require('express');const{PrismaClient}=require('./generated/prisma');const prisma =newPrismaClient();```Me funcionó en Windows11
También me pasó, gracias por compartir
Muchas gracias por compartir, no lograba hacerlo.
cambiar esta linea...si te sale error al intentar npm run dev
efectivamente hay que cambiar esa linea con base en el output que se tenga en el archivo prisma/schema.prisma.
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
}
La configuración por defecto de Prisma está desañada para TypeScript. Como ha dicho Heider hay que configurar el provider = "prisma-client-js" en el fichero 'prisma/schema.prisma'.
Al ejecutar el comando npx prisma generate, lo generará para JavaScript en lugar de TypeScript. Para hacerlo funcionar yo tuve que añadir lo siguiente a la configuración:
npm i @prisma/adapter-pg Instalar el adaptador de prisma para postgreSQL.
Vaya, en mi caso, prisma me generó en mi archivo .env una url con una api key, y también me retornó un array vacío. ¿Acaso se creó una base de datos en la nube gratis?
Yo no lo cambié, me pareció mucho mejor y más cómodo tener la BBDD en la nube. La UI es muy buena.
He visto que varios han tenido problemas con Prisma 7 y si, yo también estuve igual, pero después de investigar un rato logré entender como funciona:
Lo primero es que Prisma 7 trajo breaking changes, es decir, cambios importantes respecto a versiones anteriores, principalmente porque Prisma ha migrado su motor de Rust a TypeScript, lo que lo hace mucho más ligero y rápido pero un poco mas tedioso de configurar.
1. Instalación de dependencias
A diferencia de versiones anteriores, Prisma 7 recomienda el uso de Driver Adapters para una mejor integración con el ecosistema JS.
# Dependencias de desarrollonpminstall prisma --save-dev
# Dependencias del cliente y el adaptador para Postgresnpminstall @prisma/client @prisma/adapter-pg pg
npminstall @types/pg --save-dev
2. Inicialización del proyecto
Ejecuta el comando para crear la estructura base:
npx prisma init
Esto creará una carpeta prisma/ con el archivo schema.prisma y un archivo .env en la raíz.
3. Configuración del Esquema (schema.prisma)
En Prisma 7, el generador cambia ligeramente para aprovechar el nuevo motor. Edita prisma/schema.prisma:
generator client { provider ="prisma-client"// Nota: en Prisma 7 se prefiere "prisma-client"}datasource db { provider ="postgresql" url =env("DATABASE_URL")}// Ejemplo de un modelo básicomodel User{ id Int @id @default(autoincrement()) email String @unique
name String?}
4. Configuración de la base de datos (.env)
Configura tu cadena de conexión en el archivo .env:
Aplica los cambios a tu base de datos y genera el cliente:
npx prisma migrate dev --name init
npx prisma generate
6. Implementación en Express (Importación)
Dado que Prisma 7 utiliza el nuevo sistema de adaptadores, la forma recomendada de instanciarlo para evitar múltiples conexiones en desarrollo es mediante un Singleton.
Es un poco mas tedioso instalar, configurar e instanciar todo así, pero heyy, trae ventajas como reducir el peso de node modules, las consultas son mucho mas rápidas, menos consumo de RAM en el servidor, etc.
me sale este error si alguien puede ponerse en contacto conmigo para ayudarme.
el curso esta lleno de muchos "ah y por cierto debemos de", en lo personal, me parece que le falta orden y profundidad, se siente más como una práctica rápida para aquellos que ya tienen conocimiento más que un curso de aprendizaje.
Para los que tengan problemas con el cliente de prisma y el import del modulo.
En el schema.prisma debes quitar el output del generador del cliente:
Te debe quedar asi:
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
}
Vuelves a ejecutar npx prisma generate
Y en el require del PrismaClient ahora si usas '@prisma/client'.
Con respecto al video, puede que al iniciar prisma te venga con el schema de esa manera y al hace el prisma generate se genera el cliente en ese fichero y no en los node_modules. por lo tanto te toca referenciar ese fichero, pero si retiras el output, por defecto se generara en los node modules y ahora si podras usarlo con @prisma/client
Espero sea de ayuda!
hola team
a mi también me fallo como a todos con prisma version 7
mi solucion fue
npm install --save-dev prisma@6.19.2
npm install @prisma/client@6.19.2
npx prisma generate
el docker porque lo tengo con lo que mencionaron del otro curso
Hola!, asegúrense de preferencia instalar la versión 6 de prisma para no tener tantos problemas
Ojalá puedan actualizar esta clase 16. Nada de lo que está aquí funciona como se describe tanto en el video como en los recursos. El ORM de Prisma no corre con estas indicaciones.
Baja a la version 6 (es más estable) y con una fuerte discusion con gemini se arregla, así lo resolví
Para solucionar el error , de cuando se hace npm run dev al final
En app.js
const { PrismaClient } = require('./generated/prisma');const prisma = new PrismaClient();
En schema.prisma
generator client {
provider = "prisma-client-js"
output = "../generated/prisma"
}
y al final volver a generar con:
npx prisma generate
Entonces, como podria hacer para conectar mi base de datos con un frontend
Corregir la URL de la ruta en la Sección de ¿Cómo probar la conexión a la base de datos? del Resumen.