Nest: TypeORM

Aprende a integrar TypeORM con NestJS en 2024. Configuración, entidades y repositorios para gestionar bases de datos de manera eficiente.

Integrar TypeORM en un proyecto NestJS es una tarea fundamental para gestionar bases de datos de manera eficiente. En esta guía, te mostraremos cómo configurar y utilizar TypeORM con NestJS, siguiendo las mejores prácticas y recomendaciones actualizadas para 2024.

Instalación y configuración

Para comenzar, necesitas instalar los paquetes necesarios. Ejecuta el siguiente comando en tu terminal:

npm install @nestjs/typeorm typeorm pg

En este ejemplo, utilizamos pg para PostgreSQL, pero puedes sustituirlo por otro paquete de base de datos como mysql o sqlite.

A continuación, configura TypeORM en el archivo app.module.ts:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'test',
      password: 'test',
      database: 'test',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

Creación de entidades

Las entidades son clases que representan las tablas de la base de datos. Vamos a crear una entidad llamada User:

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

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

  @Column()
  name: string;

  @Column()
  email: string;
}

Guarda esta entidad en un archivo llamado user.entity.ts dentro de una carpeta entities.

Repositorios y servicios

Para interactuar con la base de datos, utilizamos repositorios. Crea un módulo y servicio para gestionar los usuarios:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from './entities/user.entity';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UsersService],
  controllers: [UsersController],
})
export class UsersModule {}

En el archivo users.service.ts, implementa el servicio:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { User } from './entities/user.entity';

@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User)
    private usersRepository: Repository<User>,
  ) {}

  findAll(): Promise<User[]> {
    return this.usersRepository.find();
  }

  findOne(id: number): Promise<User> {
    return this.usersRepository.findOneBy({ id });
  }

  create(user: User): Promise<User> {
    return this.usersRepository.save(user);
  }

  async remove(id: number): Promise<void> {
    await this.usersRepository.delete(id);
  }
}

Controladores

Finalmente, crea el controlador para gestionar las rutas HTTP en users.controller.ts:

import { Controller, Get, Post, Body, Param, Delete } from '@nestjs/common';
import { UsersService } from './users.service';
import { User } from './entities/user.entity';

@Controller('users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {}

  @Get()
  findAll(): Promise<User[]> {
    return this.usersService.findAll();
  }

  @Get(':id')
  findOne(@Param('id') id: string): Promise<User> {
    return this.usersService.findOne(+id);
  }

  @Post()
  create(@Body() user: User): Promise<User> {
    return this.usersService.create(user);
  }

  @Delete(':id')
  remove(@Param('id') id: string): Promise<void> {
    return this.usersService.remove(+id);
  }
}
Certifícate en Nest con CertiDevs PLUS

Lecciones de este módulo de Nest

Lecciones de programación del módulo TypeORM del curso de Nest.

Ejercicios de programación en este módulo de Nest

Evalúa tus conocimientos en TypeORM con ejercicios de programación TypeORM de tipo Test, Puzzle, Código y Proyecto con VSCode.