Creando un CRUD con NestJS y Angular
Cuando hablamos de desarrollo full-stack en JavaScript, NestJS y Angular son una combinación poderosa. NestJS, un framework backend que utiliza TypeScript, ofrece una arquitectura modular basada en controladores y servicios. Por otro lado, Angular facilita la creación de interfaces dinámicas y altamente interactivas en el frontend. En este artículo, veremos cómo construir un CRUD (Create, Read, Update, Delete) básico con estos dos frameworks.
¿Qué Necesitas?
Antes de empezar, asegúrate de tener instalados:
- Node.js y npm (o Yarn)
- Nest CLI:
npm install -g @nestjs/cli - Angular CLI:
npm install -g @angular/cli
1. Configurando el Backend con NestJS
Comenzamos generando el proyecto NestJS:
nest new backend
cd backend
Creación del Módulo y Controlador
Para nuestro CRUD, necesitamos un módulo y controlador básicos para gestionar los recursos. Por ejemplo, si gestionamos "tareas":
nest g module tasks
nest g controller tasks
nest g service tasks
Implementación del Servicio
En el archivo tasks.service.ts, implementamos la lógica para manejar datos (pueden ser almacenados temporalmente en un array):
import { Injectable } from '@nestjs/common';
@Injectable()
export class TasksService {
private tasks = [];
create(task) {
this.tasks.push(task);
return task;
}
findAll() {
return this.tasks;
}
update(id, updatedTask) {
this.tasks[id] = updatedTask;
return updatedTask;
}
delete(id) {
const task = this.tasks.splice(id, 1);
return task;
}
}
Rutas en el Controlador
Define las rutas en el controlador tasks.controller.ts:
import { Controller, Get, Post, Body, Put, Delete, Param } from '@nestjs/common';
import { TasksService } from './tasks.service';
@Controller('tasks')
export class TasksController {
constructor(private readonly tasksService: TasksService) {}
@Post()
create(@Body() task) {
return this.tasksService.create(task);
}
@Get()
findAll() {
return this.tasksService.findAll();
}
@Put(':id')
update(@Param('id') id: string, @Body() task) {
return this.tasksService.update(+id, task);
}
@Delete(':id')
delete(@Param('id') id: string) {
return this.tasksService.delete(+id);
}
}
Ejecuta el servidor con npm run start y prueba las rutas con herramientas como Postman o Thunder Client.
2. Configurando el Frontend con Angular
Ahora configuraremos el frontend con Angular. Crea un nuevo proyecto:
ng new frontend
cd frontend
Servicio para el CRUD
Generamos un servicio para manejar las llamadas al backend:
ng g service services/tasks
En el archivo tasks.service.ts:
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root',
})
export class TasksService {
private apiUrl = 'http://localhost:3000/tasks';
constructor(private http: HttpClient) {}
getTasks(): Observable<any> {
return this.http.get(this.apiUrl);
}
createTask(task): Observable<any> {
return this.http.post(this.apiUrl, task);
}
updateTask(id, task): Observable<any> {
return this.http.put(`${this.apiUrl}/${id}`, task);
}
deleteTask(id): Observable<any> {
return this.http.delete(`${this.apiUrl}/${id}`);
}
}
Interfaz de Usuario
Generamos un componente para visualizar las tareas:
ng g component components/task-list
En el componente, puedes utilizar el servicio para mostrar y manipular las tareas en el frontend.
Conclusión
Con esta implementación básica, ya tienes un CRUD funcional utilizando NestJS en el backend y Angular en el frontend. Esta combinación no solo te ofrece un flujo de trabajo eficiente, sino que también asegura una alta escalabilidad para proyectos más complejos. ¡Sigue explorando y mejorando esta estructura para adaptarla a tus necesidades!