• 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
  • 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
  • Python
  • Pandas
  • NumPy
  • Matlab
  • Julia
  • JavaScript
  • Excel

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

¿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.

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.

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

Publicidad


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

Publicidad


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?

Publicaciones relacionadas

  • Requerir autenticación mediante JWT (7ª parte de creación de una API REST con Express y TypeScript)
    Requerir autenticación mediante JWT (7ª parte de creación de…
  • Incluir el número de versión con Webpack
    Incluir el número de versión con Webpack
  • Creación de rutas para consultar y agregar los registros (4ª parte de creación de una API REST con Express y TypeScript)
    Creación de rutas para consultar y agregar los registros (4ª…
  • Agregando logs al API con Winston (6ª parte de creación de una API REST con Express y TypeScript)
    Agregando logs al API con Winston (6ª parte de creación de…
  • Creación de un proyecto TypeScript en Node (2º parte - Creación de una librería TypeScript)
    Creación de un proyecto TypeScript en Node (2º parte -…
  • Creación de imagen Docker para Node y Express
    Creación de imagen Docker para Node y Express

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.

Publicidad




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
  • Facebook
  • GitHub
  • Instagram
  • Pinterest
  • RSS
  • Twitter
  • Tumblr
  • YouTube

Publicidad

Entradas recientes

El método de Hare-Niemeyer y su implementación en Python

septiembre 29, 2023 Por Daniel Rodríguez

Redimensionar una partición de disco LVM con espacio no asignado en Linux

septiembre 27, 2023 Por Daniel Rodríguez

¿Cómo saber la versión de Pandas o cualquier otra librería en Python?

septiembre 25, 2023 Por Daniel Rodríguez

Publicidad

Es tendencia

  • Unir y combinar dataframes con pandas en Python publicado el septiembre 10, 2018 | en Python
  • ¿Cómo cambiar el nombre de las columnas en Pandas? publicado el mayo 6, 2019 | en Python
  • Ecuaciones multilínea en Markdown publicado el septiembre 14, 2022 | en Herramientas
  • Numpy básico: valores mínimos y máximos en arrays Numpy publicado el octubre 23, 2019 | en Python
  • pandas Pandas: Cambiar los tipos de datos en los DataFrames publicado el julio 15, 2021 | en Python

Publicidad

Lo mejor valorado

4.9 (22)

Seleccionar filas y columnas en Pandas con iloc y loc

4.7 (12)

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

4.6 (15)

Archivos JSON con Python: lectura y escritura

4.5 (10)

Diferencias entre var y let en JavaScript

4.3 (12)

Ordenación de diccionarios en Python mediante clave o valor

Publicidad

Comentarios recientes

  • Daniel Rodríguez en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • Miguel en ¿Cómo eliminar columnas y filas en un dataframe pandas?
  • alberto en Resolver problema de credenciales en Bitbucket
  • Pablo en Aplicar el método D’Hondt en Excel
  • Agapito en Creación de un EXE desde un archivo Python en Windows

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-2023 Analytics Lane ·Términos y condiciones ·Política de Cookies ·Política de Privacidad ·Herramientas de privacidad ·Contacto