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

Introducción al trabajo con bases de datos en TypeScript

TypeScript es una extensión de JavaScript fuertemente tipada que añade tipado estático y características modernas del lenguaje. Al desarrollar aplicaciones backend en TypeScript, a menudo surge la necesidad de interactuar con bases de datos. Dos de las soluciones más populares son el sistema de gestión de bases de datos relacional PostgreSQL y MongoDB, orientada a documentos. En este artículo, veremos cómo trabajar eficazmente con ambas bases de datos en TypeScript, utilizando bibliotecas probadas y mejores prácticas.



Configuración del entorno e instalación de dependencias

Antes de comenzar, asegúrate de tener instalados Node.js y npm. Crea un nuevo proyecto e instala los paquetes necesarios:

mkdir typescript-db-examplecd typescript-db-examplenpm init -ynpm install typescript ts-node @types/node --save-devnpx tsc --init

Para trabajar con PostgreSQL usaremos TypeORM, un potente ORM con soporte para TypeScript. Para MongoDB, usaremos Mongoose.

npm install typeorm reflect-metadata pgnpm install mongoose


Trabajo con PostgreSQL a través de TypeORM

Configuración de la conexión a PostgreSQL

TypeORM soporta decoradores y active record. Creemos un archivo data-source.ts para la configuración:

import { DataSource } from "typeorm";

export const AppDataSource = new DataSource({ type: "postgres", host: "localhost", port: 5432, username: "your_username", password: "your_password", database: "test_db", synchronize: true, logging: false, entities: ["src/entity/**/*.ts"], migrations: [], subscribers: [],});


Creación de una entidad (Entity)

Definamos un modelo de usuario usando decoradores:

import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";

@Entity()export class User { @PrimaryGeneratedColumn() id: number;

@Column() firstName: string;

@Column() lastName: string;

@Column({ unique: true }) email: string;

@Column({ default: true }) isActive: boolean;}


Operaciones CRUD con PostgreSQL

Realicemos las operaciones básicas con la base de datos:

import { AppDataSource } from "./data-source";import { User } from "./entity/User";

async function main() { await AppDataSource.initialize(); const userRepository = AppDataSource.getRepository(User);

// CREATE const newUser = userRepository.create({ firstName: "Iván", lastName: "Petrov", email: "ivan@example.com" }); await userRepository.save(newUser);

// READ const users = await userRepository.find(); console.log("Todos los usuarios:", users);

// UPDATE const userToUpdate = await userRepository.findOneBy({ id: 1 }); if (userToUpdate) { userToUpdate.isActive = false; await userRepository.save(userToUpdate); }

// DELETE await userRepository.delete({ id: 1 });}

main().catch(console.error);


Trabajo con MongoDB a través de Mongoose

Conexión a MongoDB

Mongoose proporciona un esquema y validación convenientes para MongoDB. Configuremos la conexión:

import mongoose, { Schema, Document, Model } from "mongoose";

const MONGO_URI = "mongodb://localhost:27017/test";

mongoose.connect(MONGO_URI) .then(() => console.log("Conectado a MongoDB")) .catch(err => console.error("Error de conexión:", err));


Definición del esquema y modelo

Creemos una interfaz para TypeScript y un esquema de Mongoose:

// Interfaz para TypeScriptinterface IUser extends Document {    firstName: string;    lastName: string;    email: string;    createdAt: Date;}

// Esquema de Mongooseconst userSchema = new Schema({ firstName: { type: String, required: true }, lastName: { type: String, required: true }, email: { type: String, required: true, unique: true }, createdAt: { type: Date, default: Date.now }});

// Modeloexport const UserModel: Model = mongoose.model("User", userSchema);

Blogs

Book Recommendations