Siga este tutorial para conocer algunas tecnologías complementarias interesantes que puede usar para su próximo proyecto.

Al igual que otros marcos de trabajo de Node.js, Nest.js proporciona un conjunto de herramientas completo para crear servicios de back-end robustos y escalables. No obstante, es importante comprender cómo implementar las funciones de creación, lectura, actualización y eliminación. (CRUD) en Nest.js de manera eficiente: estas son las operaciones más fundamentales en el desarrollo de API.

Aprenda a crear una API REST CRUD de Nest.js con TypeORM y una base de datos PostgreSQL.

Primeros pasos con Nest.js

Para comenzar, instale la herramienta de línea de comandos Nest.js:

npm i -g @nestjs/cli

A continuación, cree un nuevo proyecto ejecutando:

anidar nueva aplicación crud

La herramienta CLI le pedirá que elija un administrador de paquetes, elija la opción que considere más preferible. usaremos npm, el administrador de paquetes de Node.

La CLI creará un andamiaje en un proyecto Nest.js básico con todos los archivos de configuración necesarios y las dependencias iniciales necesarias para ejecutar la aplicación.

instagram viewer

Finalmente, navegue al directorio del proyecto e inicie el servidor de desarrollo.

aplicación cd crud
npm inicio de ejecución

Puedes encontrar el código de este proyecto en su GitHub repositorio.

Crear una base de datos PostgreSQL

Este tutorial utiliza una instancia de PostgreSQL en la nube, pero puede configurar una base de datos de PostgreSQL local en su lugar. Puede instalar PostgreSQL en Windows, en mac OSo en Linux.

Para configurar una instancia de PostgreSQL en la nube:

  1. Dirigirse a ElefanteSQL, regístrese e inicie sesión en la página de información general de su cuenta.
  2. Haga clic en el Crear nueva instancia en la sección superior izquierda de la página para crear una nueva instancia para su aplicación.
  3. Complete el nombre de su instancia, elija el plan gratuito y finalmente seleccione la región para completar el proceso de configuración.
  4. Después de crear la instancia de la base de datos, vaya a la ajustes página y copie el URL de la base de datos.

Configurar la conexión de la base de datos

En el directorio raíz de su proyecto, cree un .env archivo y pegue la URL de conexión de la base de datos de la siguiente manera:

DATABASE_URL=""

Ahora instale estos paquetes:

npm instalar pg typeorm @nestjs/typeorm @nestjs/config

A continuación, continúe y cree un módulo de base de datos utilizando la herramienta CLI.

base de datos del módulo nest g

Abre el base de datos/base de datos.módulo.ts y agregue el siguiente código de configuración de la base de datos:

importar { Módulo } de'@nestjs/común';
importar { Módulo de configuración, Servicio de configuración } de'@nestjs/config';
importar { TipoMóduloOrm } de'@nestjs/typeorm';
importar { Usuario } de'../usuarios/modelos/usuario.entidad';

@Módulo({
importaciones: [
TypeOrmModule.forRootAsync({
importaciones: [ConfigModule],
inyectar: ​​[ConfigService],

fábrica de uso: asíncrono (configService: ConfigService) => ({
tipo: 'postgres',
url: configService.get('DATABASE_URL'),
entidades: [Usuario],
sincronizar: verdadero
}),
}),
],
})

exportarclase Módulo de base de datos {}

Este módulo de base de datos maneja la conexión configurando el módulo TypeORM con el parámetro de conexión requerido, la URL de la base de datos.

Además, define la entidad Usuario como parte de la configuración que especifica la estructura y las propiedades de los datos almacenados en la tabla de la base de datos de PostgreSQL.

En esta etapa, su código probablemente generará un error porque aún no ha creado la entidad de usuarios. Lo hará en los siguientes pasos.

Actualice el archivo app.module.ts

Por último, actualice el módulo de la aplicación principal para incluir la configuración del módulo de la base de datos.

importar { Módulo } de'@nestjs/común';
importar { Módulo de configuración } de'@nestjs/config';
importar { Controlador de aplicaciones } de'./aplicación.controlador';
importar { Servicio de aplicaciones } de'./aplicación.servicio';
importar { Módulo de base de datos } de'./base de datos/base de datos.módulo';

@Módulo({
importaciones: [
ConfigModule.forRoot({
envFilePath: '.env',
}),
Módulo de base de datos,
],

controladores: [AppController],
proveedores: [servicio de aplicaciones],
})

exportarclase Módulo de aplicación {}

Definir un módulo de usuarios

El módulo de usuarios sirve como un componente centralizado, responsable de encapsular y administrar la lógica requerida para implementar la funcionalidad CRUD de la API.

Ejecute este comando de terminal para crear el módulo de usuarios de la API.

usuarios del módulo nest g

La herramienta CLI actualiza automáticamente la aplicación.módulo.ts archivo para reflejar los cambios realizados, además de crear el módulo de usuario. Esto garantiza que el módulo recién creado, los usuarios, se integren correctamente en la configuración del módulo de la aplicación.

Crear una entidad de usuario

TypeORM es una biblioteca de mapeo relacional de objetos (ORM) que simplifica las interacciones de la base de datos en aplicaciones que usan TypeScript al mapear objetos de JavaScript a las tablas de la base de datos.

Al crear una entidad de usuario con TypeORM, define la estructura y las propiedades de los datos del usuario en la base de datos de PostgreSQL.

En el directorio de usuarios, cree un nuevo modelos/usuario.entidad.ts y agregue el siguiente código.

importar { Entidad, ColumnaGeneradaPrimaria, Columna, } de"tipoforma";

@Entidad()
exportarclase Usuario {
@PrimaryGeneratedColumn()
identificación: número;

@Columna()
nombre: cadena;

@Columna()
correo electrónico: cadena;
}

El Usuario entidad define la estructura de los datos de usuario almacenados en la base de datos. En este caso, ese es el identificación como la columna de clave principal, y la nombre y correo electrónico columnas y sus propiedades correspondientes.

Crear el servicio API CRUD

Ahora, cree el servicio API que administrará la lógica de las operaciones CRUD ejecutando el siguiente comando:

usuarios del servicio nest g

Abre el usuario-auth.service.ts archivo y agregue este código:

importar { Inyectable } de'@nestjs/común';
importar { InyectarRepositorio } de'@nestjs/typeorm';
importar { Repositorio } de'tipoforma';
importar {Usuario} de'./modelos/usuario.entidad';

@Inyectable()
exportarclase Servicio de usuarios {
constructor(
@InyectarRepositorio(Usuario)
privado userRepository: Repositorio,
) {}

asíncrono encuentra todos(): Promesa {
devolvereste.userRepository.find();
}

asíncrono encontrarUno (id: número): Promesa {
devolvereste.userRepository.findOne({ donde: { id } });
}

asíncrono crear (usuario: Parcial): Promesa {
constante nuevousuario = este.userRepository.create (usuario);
devolvereste.userRepository.save (nuevo usuario);
}

asíncrono actualizar (id: número, usuario: Parcial): Promesa {
esperareste.userRepository.update (id, usuario);
devolvereste.userRepository.findOne({ donde: { id } });
}

asíncronoborrar(identificación: número): Promesa<vacío> {
esperareste.userRepository.delete (id);
}
}

Esta clase UsersService define varios métodos API dedicados a manejar operaciones CRUD. Estos métodos incluyen obtener todos los datos de los usuarios, encontrar un usuario específico usando su número de identificación, crear un nuevo usuario, actualizar un usuario existente y un método para eliminar los datos de un usuario específico en la base de datos.

Definir un controlador para la API

Cree un controlador que administrará los puntos finales de la API para las operaciones relacionadas con el usuario.

usuarios del controlador nest g

A continuación, agregue el siguiente código a la usuarios.controlador.ts archivo.

importar { Controlador, Obtener, Publicar, Cuerpo, Colocar, Param, Eliminar, NotFoundException, HttpCode } de'@nestjs/común';
importar { Servicio de usuarios } de'./usuarios.servicio';
importar { Usuario } de'./modelos/usuario.entidad';

@Controlador('api/usuarios')
exportarclase Controlador de usuarios {
constructor(privado servicio de usuarios de solo lectura: servicio de usuarios) {}

@Conseguir()
asíncrono encuentra todos(): Promesa {
devolvereste.usersService.findAll();
}

@Correo()
@HttpCode(201)
asíncrono crear(@Cuerpo() usuario: Usuario): Promesa {
constante usuariocreado = esperareste.usersService.create (usuario);
devolver usuariocreado;
}

@Poner(':identificación')
asíncrono actualizar (@Param('identificación') identificación: número, @Cuerpo() usuario: Usuario): Promesa<cualquier> {
esperareste.usersService.update (id, usuario);
devolver { mensaje: 'Usuario actualizado correctamente' };
}

@Borrar(':identificación')
asíncronoborrar(@Param('identificación') identificación: número): Promesa<cualquier> {
constante usuario = esperareste.usersService.findOne (id);

si (!usuario) {
tirarnuevo Excepción no encontrada ('¡El usuario no existe!');
}

esperareste.usersService.eliminar (id);
devolver { mensaje: 'Usuario eliminado con éxito' };
}
}

El controlador administra los puntos finales de la API para las operaciones de los usuarios. Maneja solicitudes GET para recuperar todos los usuarios, solicitudes POST para crear nuevos usuarios, solicitudes PUT para actualizar usuarios existentes y solicitudes DELETE para eliminar usuarios.

Al utilizar el Servicio de usuarios e interactuando con el Usuario entidad, este controlador proporciona una API completa para administrar las operaciones relacionadas con el usuario en los datos almacenados en la base de datos.

Actualice el archivo users.module.ts

Por último, actualice la usuarios.módulo.ts como se muestra a continuación para asegurarse de incorporar el Entidad de usuario y el módulo TypeORM, que establece la conexión con la base de datos.

importar { Módulo } de'@nestjs/común';
importar { Controlador de usuarios } de'./usuarios.controlador';
importar { Servicio de usuarios } de'./usuarios.servicio';
importar { TipoMóduloOrm } de'@nestjs/typeorm';
importar { Usuario } de'./modelos/usuario.entidad';

@Módulo({
importaciones: [TypeOrmModule.forFeature([User])],
controladores: [UsersController],
proveedores: [ServicioUsuarios]
})

exportarclase Módulo de usuarios {}

Finalmente, continúe y ponga en marcha el servidor de desarrollo para probar las operaciones CRUD usando Postman.

npm inicio de ejecución

El servidor se iniciará en el puerto 3000 y puede enviarle solicitudes de API en http://localhost: 3000/api/usuarios.

Creación de aplicaciones back-end con Nest.js

Ya sea que esté desarrollando una API REST simple o una aplicación web compleja, Nest.js ofrece un conjunto integral de funciones y capacidades para construir un sistema de back-end confiable y sólido.

Nest.js ofrece un enfoque más estructurado para el desarrollo de proyectos que Express.js. Esto garantiza que pueda crear, escalar y mantener aplicaciones complejas con confianza, gracias a su patrón de diseño organizado y modular.