Parse Pipes
Parte de la sección TypeScript y NestJS del Journey de Node.js de Coddy. Lección 17 de 24.
GET /tasks/abc responde 404 «Task NaN not found», pero abc no es un identificador: es una solicitud incorrecta, 400. Las tuberías pueden convertir además de comprobar.
@Get()
findAll(@Query('year', ParseIntPipe) year: number) {
return this.reportsService.forYear(year);
}Si se pasa como segundo argumento de un decorador de parámetro, ParseIntPipe convierte el texto en un número antes de que se ejecute el método. GET /reports?year=2026 pasa el número 2026, así que, por fin, year: number es verdadero; ?year=soon responde 400 «Validation failed (numeric string is expected)» y el método nunca se ejecuta. ParseBoolPipe y ParseUUIDPipe funcionan de la misma manera.
Desafío
FácilGET /tasks/abcyDELETE /tasks/abcresponden con 400.- Los id numéricos funcionan como antes; uno desconocido sigue respondiendo con 404.
- Envía
GET /tasks/abc, despuésGET /tasks/1y, después,GET /tasks/9999.
Pruébalo tú mismo
import { Body, Controller, Delete, Get, HttpCode, Inject, Param, Post, Query } from '@nestjs/common';
import { CreateTaskDto } from './dto/create-task.dto';
import { Task, TasksService } from './tasks.service';
@Controller('tasks')
export class TasksController {
constructor(
private readonly tasksService: TasksService,
@Inject('PAGE_SIZE') private readonly pageSize: number,
) {}
@Get()
findAll(@Query('done') done?: string, @Query('page') page = '1') {
const tasks = this.tasksService.findAll(done);
const current = Number(page);
const start = (current - 1) * this.pageSize;
return {
items: tasks.slice(start, start + this.pageSize),
page: current,
total: tasks.length,
pages: Math.ceil(tasks.length / this.pageSize),
};
}
@Get(':id')
findOne(@Param('id') id: string): Task {
return this.tasksService.findOne(Number(id));
}
@Post()
create(@Body() dto: CreateTaskDto): Task {
return this.tasksService.create(dto);
}
@Delete(':id')
@HttpCode(204)
remove(@Param('id') id: string): void {
this.tasksService.remove(Number(id));
}
}
Todas las lecciones de TypeScript y NestJS
1Fundamentos de Nest
Clases y métodosHola, NestRegistro de un controlador4Guards, filtros e interceptores
GuardsPractica por tu cuenta: Playground de Express