• Saltar al contenido principal
  • Skip to secondary menu
  • Saltar a la barra lateral principal
  • Saltar al pie de página
  • Inicio
  • Secciones
    • Ciencia de datos
    • Criptografía
    • Herramientas
    • Machine Learning
    • Noticias
    • Opinión
    • Productividad
    • Programación
      • JavaScript
      • Julia
      • Matlab
      • Python
      • R
  • Programación
    • JavaScript
    • Julia
    • Matlab
    • Python
    • R
  • Laboratorio
    • Encuestas: Tamaño de Muestra
    • Lotería: Probabilidad de Ganar
    • Reparto de Escaños (D’Hondt)
    • Tres en Raya con IA
  • Noticias
  • Boletín
  • Contacto
  • Tienda
    • Libros
    • Equipamiento de oficina
    • Equipamiento en movilidad
    • Tiendas afiliadas
      • AliExpress
      • Amazon
      • Banggood
      • GeekBuying
      • Lenovo

Analytics Lane

Ciencia e ingeniería de datos aplicada

  • Ciencia de datos
  • Machine Learning
  • IA Generativa
  • Python
  • Pandas
  • NumPy
  • Excel
  • Matlab

Configurar TypeORM para acceder a la base de datos (3ª parte de creación de una API REST con Express y TypeScript)

octubre 26, 2022 Por Daniel Rodríguez Deja un comentario
Tiempo de lectura: 5 minutos

En la publicación anterior de esta serie se ha visto una propuesta para organizar el código del proyecto. Una vez organizado el código es el momento de configurar una base de datos para persistir los datos. Para lo que se usará TypeORM. Un ORM (Object–relational mapping) para TypeScript mediante el cual se puede emplear una gran cantidad de motores de base de datos relacionales como MySQL, SQLite, PostgreSQL, Microsoft SQL Server u Oracle. Veamos cómo se puede configurar TypeORM en el proyecto.

Esta entrada forma parte de la serie “Creación de una API REST con Express y TypeScript” de la cual forman los siguientes entregas:

  1. Creación de una API REST con Express y TypeScript
  2. Organizar el código del proyecto
  3. Configurar TypeORM para acceder a la base de datos
  4. Creación de rutas para consultar y agregar los registros
  5. Creación de rutas para modificar y borrar los registros
  6. Agregando logs al API con Winston
  7. Requerir autenticación mediante JWT
  8. Registro de usuarios
  9. Incluir un certificado en Express para servir el API mediante HTTPS
  10. Ejecutar la aplicación en producción con PM2

Tabla de contenidos

  • 1 ¿Por qué usar un ORM?
  • 2 Instalación de TypeORM
  • 3 Configuración de TypeORM
  • 4 Creación de una entidad con TypeORM
  • 5 Conexión con la base de datos y creación de un registro
    • 5.1 Comprobación de los cambios en la base de datos
  • 6 Conclusiones

¿Por qué usar un ORM?

Aunque en Node se puede acceder a la mayoría de las bases de datos sin la necesidad de un ORM. El uso de estas herramientas puede simplificar considerablemente el desarrollo de las aplicaciones. Especialmente si la base de datos puede cambiar durante el desarrollo del proyecto.

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
En Analytics Lane
Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

Un ORM no es más que una librería con la que se pueden mapear las estructuras de las bases de datos sobre estructuras lógicas de entidades, gracias a las cuales se puede simplificar el desarrollo de las aplicaciones. Así ya no sea necesario pensar en términos de tablas y sus relaciones, sino que en términos de objetos.

Publicidad


Instalación de TypeORM

La instalación de TypeORM se realiza como cualquier otro paquete de Node mediante el comando npm. En este caso también se debe instalar el controlador del motor de base de datos que se desee usar junto al ORM. A modo de ejemplo, para evitar la necesidad de configurar un motor de base de datos, vamos a usar SQLite en este proyecto. Así, el comando que se debe ejecutar en este caso es el siguiente

npm install typeorm sqlite3

Mediante el cual se instalará TypeORM y el controlador de SQLite 3.

Además de esto, debido a que TypeORM usa decoradores, es necesario modificar tres propiedades en el archivo tsconfig.json. En concreto se tiene que configurar las propiedades experimentalDecorators y emitDecoratorMetadata a verdadero, para se puedan usar decoradores, y strictPropertyInitialization a falso, para que al compilar las entidades no de un error de compilación porque los valores de las propiedades no están inicializados.

Configuración de TypeORM

Ahora que se ha instalado TypeORM junto al controlador de la base de datos podemos proceder a la configuración de este. Para ello se debe crear un archivo datsource.ts con el siguiente código.

import * as path from 'path';
import { DataSource } from 'typeorm';

let entities = ['dist/entities/**/*.js'];
if (path.extname(__filename) === '.ts') {
  entities = ['src/entities/**/*.ts'];
}

const datasource = new DataSource({
  type: 'sqlite',
  database: 'database.db',
  entities,
  synchronize: true,
});

export default datasource;

En este se crea una conexión a la base de datos con la clase DataSource, pasándole para ello un objeto con las opciones necesarias. Para el caso de SQLite solamente hay que indicar el tipo de driver type, el archivo en el que se encuentra la base de datos database, la carpeta donde se encuentra la definición de las entidades entities y una opción para que los cambios en las definiciones de las entidades se sincronicen de forma automática.

Nótese que al comienzo del archivo se define las entidades en función que la extensión del archivo se ts, esto es, cuando se está ejecutando el programa con ts-node. Algo que se hace para que el mismo código pueda funcionar tanto si el programa se ejecuta con ts-node en desarrollo como si se hace ya compilado con node.

Publicidad


Creación de una entidad con TypeORM

Ahora, una vez instalado y configurado TypeORM, se debe crear una entidad en la que almacenar datos. Posiblemente una de las más sencillas sea crear un usuario, para lo que se puede escribir en /src/entities el siguiente archivo como user.ts.

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

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

  @Column()
  firstName: string;

  @Column()
  lastName: string;
}

Nótese que la forma de crear la entidad es sencilla extremadamente sencilla. Simplemente se crea una clase y se usan los embellecedores de TypeORM para indicar que esta es una entidad (@Entity()) y cada uno de los tipos de datos que representan las propiedades (@PrimaryGeneratedColumn() o @Column()). En este ejemplo se crea una entidad llamada User con un id numérico autogenerado y dos columnas de texto firstName y lastName. Aunque se puede configurar, en la mayoría de los casos no es necesario prestar atención al tipo de dato necesario en la base de datos.

Conexión con la base de datos y creación de un registro

Ahora, para conectar con la base de datos solamente hay que importar e iniciar datasource. En el caso de que la conexión se inicie de forma correcta ya se podrá acceder a las entidades sin mayor problema. Para crear un nuevo registro solamente hay que crear un objeto y guardar éste en la fuente de datos. Esto es lo que se muestra en el siguiente ejemplo.

import datasource from './datasource';
import { User } from './entities/user';

// Conexión a la base de datos
datasource
  .initialize()
  .then(async () => {
    const user = new User();
    user.firstName = 'Nombre';
    user.lastName = 'Apellido';

    const result = await datasource.getRepository(User).save(user);
    console.log(result);
  })
  .catch((err) => {
    console.error('Error during Data Source initialization:', err);
  });

En este ejemplo se inicia la fuente de datos mediante la propiedad initialize(). En el caso de que se pueda realizar la conexión con la base de datos, se crea un nuevo registro y se guarda en la base de datos. El resultado de esto es un objeto que se puede ver por pantalla.

Por otro lado, si la conexión con la base de datos produjese un error, este se indicará por pantalla.

Publicidad


Comprobación de los cambios en la base de datos

Si se ejecuta el código anterior se creará un archivo database.db en la raíz del proyecto con una base de datos SQLlite. Al abrir este archivo con un programa se podrá ver el esquema de la base de datos y que el registro se ha agregado a la tabla.

Registro creado en la base de datos SQLite con TypeORM
Registro creado en la base de datos SQLite con TypeORM

En concreto, en el ejemplo la tabla user se ha creado con un campo id de tipo entorno no nulo y que es clave principal. Además de esto, se han creado dos campos de tipo varchar que tampoco pueden ser nulos.

Conclusiones

En esta tercera publicación de la serie se han visto los pasos necesarios para agregar y configurar TypeORM en el proyecto. La semana que viene se verá cómo crear nuestra primera API para agregar y eliminar usuarios.

El código creado en toda la serie de publicaciones se puede encontrar en la cuenta de GitHub de Analytics Lane.

Imagen de Tayeb MEZAHDIA en Pixabay

¿Te ha parecido de utilidad el contenido?

¡Puntúalo entre una y cinco estrellas!

Puntuación promedio 0 / 5. Votos emitidos: 0

Ya que has encontrado útil este contenido...

¡Síguenos en redes sociales!

¡Siento que este contenido no te haya sido útil!

¡Déjame mejorar este contenido!

Dime, ¿cómo puedo mejorar este contenido?

Publicidad


Publicaciones relacionadas

  • Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo
  • ¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia
  • Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia
  • Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)
  • La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento
  • Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows
  • Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte
  • Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)
  • Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

Publicado en: JavaScript Etiquetado como: Express, Node, TypeORM, TypeScript

Interacciones con los lectores

Deja una respuesta Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

I accept the Terms and Conditions and the Privacy Policy

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Barra lateral principal

Suscríbete a nuestro boletín

Suscríbete al boletín semanal para estar al día de todas las publicaciones.

Política de Privacidad

Analytics Lane en redes sociales

  • Amazon
  • Bluesky
  • Facebook
  • GitHub
  • Instagram
  • Mastodon
  • Pinterest
  • RSS
  • Telegram
  • Tumblr
  • Twitter
  • YouTube

Publicidad

Entradas recientes

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

octubre 23, 2025 Por Daniel Rodríguez

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

octubre 21, 2025 Por Daniel Rodríguez

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

octubre 16, 2025 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Aprovecha un 40% de descuento en Coursera Plus para impulsar tus habilidades en Ciencia de Datos e Inteligencia Artificial publicado el noviembre 9, 2024 | en Noticias, Reseñas
  • Entendiendo la validación cruzada: Selección de la profundidad óptima en un árbol de decisión publicado el septiembre 13, 2024 | en Ciencia de datos
  • Diferencias entre CPU, GPU, TPU y NPU publicado el abril 19, 2023 | en Herramientas
  • El método de Muller e implementación en Python publicado el marzo 24, 2023 | en Ciencia de datos
  • Listado de contraseñas de aplicación creadas Resolver problema de credenciales en Bitbucket publicado el marzo 16, 2022 | en Herramientas

Publicidad

Lo mejor valorado

4.9 (24)

Seleccionar filas y columnas en Pandas con iloc y loc

4.6 (16)

Archivos JSON con Python: lectura y escritura

4.4 (14)

Ordenación de diccionarios en Python mediante clave o valor

4.7 (13)

Operaciones de filtrado de DataFrame con Pandas en base a los valores de las columnas

4.5 (10)

Diferencias entre var y let en JavaScript

Publicidad

Comentarios recientes

  • Daniel Rodríguez en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • Pepe en Probabilidad básica: cómo entender el azar en nuestra vida diaria
  • CARLOS ARETURO BELLO CACERES en Justicio: La herramienta gratuita de IA para consultas legales
  • Piera en Ecuaciones multilínea en Markdown
  • Daniel Rodríguez en Tutorial de Mypy para Principiantes

Publicidad


Footer

Analytics Lane

  • Acerca de Analytics Lane
  • Boletín de noticias
  • Contacto
  • Libros
  • Lo más popular
  • Noticias
  • Tienda
  • Tiendas afiliadas

Secciones

  • Ciencia de datos
  • Criptografía
  • Herramientas
  • Machine Learning
  • Opinión
  • Productividad
  • Programación
  • Reseñas

Sobre de Analytics Lane

En Analytics Lane tratamos de explicar los principales conceptos de la ciencia e ingeniería de datos con un enfoque práctico. Los principales temas tratados son ciencia de datos, ingeniería de datos, inteligencia artificial, machine learning, deep learning y criptografía. Además, también se habla de los principales lenguajes de programación y herramientas utilizadas por los científicos e ingenieros de datos.

Copyright © 2018-2025 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto