Trabajo con bases de datos en TypeScript: PostgreSQL y MongoDB para principiantes
TypeScript es una extensión fuertemente tipada de JavaScript que añade fiabilidad y previsibilidad al código. Al trabajar con bases de datos (BD), TypeScript es especialmente útil: puedes definir tipos para entidades, verificar la corrección de las consultas en la etapa de compilación y evitar muchos errores en tiempo de ejecución. En este artículo, veremos cómo conectarnos a las dos bases de datos más populares — la relacional PostgreSQL y la orientada a documentos MongoDB — y realizar operaciones básicas con datos. El material está orientado a desarrolladores principiantes familiarizados con los fundamentos de TypeScript.
Preparación del entorno e instalación de dependencias
Antes de escribir código, es necesario configurar el proyecto. Cree un nuevo directorio e inicialice el proyecto:
mkdir ts-db-examplecd ts-db-examplenpm init -ynpm install typescript @types/node ts-node --save-devnpx tsc --initAhora instalaremos las bibliotecas para trabajar con bases de datos. Para PostgreSQL usaremos TypeORM (un ORM popular con buen soporte para TypeScript), y para MongoDB — Mongoose (una biblioteca para modelar esquemas y trabajar con MongoDB).
npm install typeorm reflect-metadata pgnpm install mongooseTambién instalaremos los tipos para Node.js y la configuración para TypeORM:
npm install @types/node --save-devEn el archivo tsconfig.json asegúrese de incluir las opciones:
{ "compilerOptions": { "target": "ES2020", "module": "commonjs", "outDir": "./dist", "rootDir": "./src", "strict": true, "esModuleInterop": true, "experimentalDecorators": true, "emitDecoratorMetadata": true }}Ahora la estructura del proyecto está lista. Cree la carpeta src y dentro de ella los archivos para trabajar con cada BD.
Trabajo con PostgreSQL a través de TypeORM
Configuración de la conexión
TypeORM permite trabajar con BD mediante decoradores y entidades. Crearemos el archivo src/postgres.ts y configuraremos la conexión a la base de datos local PostgreSQL ts_db:
import "reflect-metadata";import { DataSource } from "typeorm";
export const AppDataSource = new DataSource({ type: "postgres", host: "localhost", port: 5432, username: "postgres", password: "password", database: "ts_db", synchronize: true, // crea tablas automáticamente (solo para desarrollo) logging: false, entities: ["src/entity/**/*.ts"],});Creación de una entidad (Entity)
Una entidad es una clase que se asigna a una tabla en la BD. Crearemos la carpeta src/entity y el archivo User.ts:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
@Entity()export class User { @PrimaryGeneratedColumn() id: number;
@Column({ length: 100 }) name: string;
@Column({ unique: true }) email: string;
@Column({ default: 18 }) age: number;}Realización de operaciones CRUD
Ahora escribiremos funciones para crear, leer, actualizar y eliminar usuarios en el archivo src/postgres-crud.ts:
import { AppDataSource } from "./postgres";import { User } from "./entity/User";
async function main() { await AppDataSource.initialize(); const userRepository = AppDataSource.getRepository(User);
// CREATE — creación de un nuevo usuario const newUser = userRepository.create({ name: "Iván Petrov", email: "ivan@example.com", age: 25, }); await userRepository.save(newUser); console.log("Usuario creado:", newUser);
// READ — lectura de todos los usuarios const allUsers = await userRepository.find(); console.log("Todos los usuarios:", allUsers);
// UPDATE — actualización de la edad del usuario con id=1 const userToUpdate =