Trabajo con bases de datos en TypeScript: PostgreSQL y MongoDB para principiantes
\n\nEl desarrollo web moderno rara vez prescinde de las bases de datos. TypeScript, como superconjunto estrictamente tipado de JavaScript, ofrece excelentes oportunidades para un trabajo seguro y predecible con datos. En este artículo, analizaremos cómo conectar y utilizar dos bases de datos populares — la relacional PostgreSQL y la orientada a documentos MongoDB — en proyectos con TypeScript. El material está dirigido a desarrolladores principiantes familiarizados con los fundamentos de TypeScript y Node.js.
\n\n1. Preparación del entorno e instalación de dependencias
\n\nAntes de comenzar, asegúrate de tener instalados Node.js y npm. Para trabajar con TypeScript, instala el compilador y los tipos para Node.js:
\n\nnpm install -g typescript\nnpm init -y\nnpm install typescript @types/node --save-dev\nnpx tsc --init\n\nPara trabajar con bases de datos, utilizaremos bibliotecas populares:
\n- \n
- TypeORM — ORM para PostgreSQL (y otras bases de datos SQL) \n
- Mongoose — ODM para MongoDB \n
Instálalos en tu proyecto:
\n\nnpm install typeorm reflect-metadata pg\nnpm install mongoose\n\nNo olvides agregar "experimentalDecorators": true y "emitDecoratorMetadata": true en el archivo tsconfig.json.
2. Trabajo con PostgreSQL a través de TypeORM
\n\nPostgreSQL es un potente sistema de gestión de bases de datos relacional. TypeORM permite trabajar con él mediante entidades (entities) y repositorios, lo que hace que el código sea limpio y tipado.
\n\n2.1. Creación de la conexión y la entidad
\n\nCreemos un archivo data-source.ts para configurar la conexión:
import { DataSource } from "typeorm";\n\nexport const AppDataSource = new DataSource({\n type: "postgres",\n host: "localhost",\n port: 5432,\n username: "your_user",\n password: "your_password",\n database: "your_db",\n synchronize: true,\n logging: false,\n entities: ["src/entity/**/*.ts"],\n});\n\nAhora creemos la entidad User en el archivo src/entity/User.ts:
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";\n\n@Entity()\nexport class User {\n @PrimaryGeneratedColumn()\n id: number;\n\n @Column()\n name: string;\n\n @Column({ unique: true })\n email: string;\n\n @Column()\n age: number;\n}\n\n2.2. Operaciones CRUD con TypeORM
\n\nEjemplo de creación y obtención de usuarios:
\n\nimport { AppDataSource } from "./data-source";\nimport { User } from "./entity/User";\n\nasync function main() {\n await AppDataSource.initialize();\n const userRepository = AppDataSource.getRepository(User);\n\n // Creación\n const newUser = userRepository.create({\n name: "Iván",\n email: "ivan@example.com",\n age: 25\n });\n await userRepository.save(newUser);\n console.log("Usuario creado:", newUser);\n\n // Lectura de todos\n const users = await userRepository.find();\n console.log("Todos los usuarios:", users);\n\n // Actualización\n await userRepository.update({ id: 1 }, { age: 26 });\n\n // Eliminación\n await userRepository.delete({ id: 1 });\n}\n\nmain().catch(console.error);\n\nTypeORM genera automáticamente las consultas SQL, y la tipificación de TypeScript protege contra errores en tiempo de compilación.
\n\n3. Trabajo con MongoDB a través de Mongoose
\n\nMongoDB es una base de datos NoSQL que almacena datos en un formato similar a JSON. Mongoose proporciona esquemas y validación para TypeScript.
\n\n3.1. Conexión y definición del esquema
\n\nCreemos un archivo db.ts para la conexión:
import mongoose from "mongoose";\n\nexport async function connectDB() {\n await mongoose.connect("mongodb://localhost:27017/mydb");\n console.log("Conectado a MongoDB");\n}\