Trabajo con bases de datos en TypeScript: PostgreSQL y MongoDB

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con bases de datos en TypeScript: PostgreSQL y MongoDB



TypeScript es un potente lenguaje de programación que añade tipado estático a JavaScript. En el desarrollo de aplicaciones web modernas, el trabajo con bases de datos es una parte esencial. En este artículo, veremos cómo trabajar eficazmente con dos bases de datos populares — la relacional PostgreSQL y la orientada a documentos MongoDB — utilizando TypeScript.



1. Preparación del entorno y elección del ORM



Antes de comenzar, es necesario configurar el proyecto. Cree un nuevo proyecto Node.js con soporte para TypeScript:



mkdir ts-database-democd ts-database-demonpm init -ynpm install typescript @types/node ts-node --save-devnpx tsc --init


Para trabajar con bases de datos utilizaremos bibliotecas populares:

  • Prisma — un ORM moderno para PostgreSQL (y otras bases SQL)
  • Mongoose — un ODM para MongoDB con excelente soporte para TypeScript


Instale los paquetes necesarios:



npm install prisma @prisma/client mongoosenpm install @types/mongoose --save-dev


2. Trabajo con PostgreSQL a través de Prisma



Prisma es un ORM que genera automáticamente tipos de TypeScript basados en el esquema de su base de datos. Esto garantiza una seguridad de tipos completa.



2.1. Configuración de Prisma



Inicialice Prisma en el proyecto:



npx prisma init


En el archivo prisma/schema.prisma defina el modelo de datos:



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

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

model User { id Int @id @default(autoincrement()) email String @unique name String? posts Post[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt}

model Post { id Int @id @default(autoincrement()) title String content String? published Boolean @default(false) author User @relation(fields: [authorId], references: [id]) authorId Int createdAt DateTime @default(now()) updatedAt DateTime @updatedAt}


Cree un archivo .env con la cadena de conexión:



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


Ejecute la migración:



npx prisma migrate dev --name init


2.2. Operaciones CRUD con TypeScript



Ahora escribamos código tipado para trabajar con la base de datos. Cree un archivo src/postgres.ts:



import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

interface CreateUserInput { email: string; name?: string;}

interface CreatePostInput { title: string; content?: string; authorId: number;}

// Creación de usuarioasync function createUser(data: CreateUserInput) { return await prisma.user.create({ data: { email: data.email, name: data.name, }, });}

// Obtención de todos los usuarios con sus publicacionesasync function getUsersWithPosts() { return await prisma.user.findMany({ include: { posts: true, }, });}

// Creación de publicaciónasync function createPost(data: CreatePostInput) { return await prisma.post.create({ data: { title: data.title, content: data.content, authorId: data.authorId, }, });}

// Actualización de usuarioasync function updateUser(id: number, data: Partial<CreateUserInput>) { return await prisma.user.update({ where: { id }, data, });}

// Eliminación de usuarioasync function deleteUser(id: number) { return await prisma.user.delete({ where: { id }, });}

// Ejemplo de uso(async () => { try { const user = await createUser({ email: 'ivan@example.com', n

Blogs

Book Recommendations