Los parametros nos sirven para trabajar el enrutado de nuestra aplicación. Volvamos el ejemplo de la app de tareas. Ya vimos que haciendo un GET en /tasks podemos recuperar todas las tareas, pero que pasa si queremos recuperar alguna solo por el ID yendo a tasks/2 para obtener la tarea con el ID 2? Para eso podemos usar los parametros.
@Get(':id')
getTask(@Param('id') id: string) {
return this.taskService.getTask(parseInt(id));
}
Tranquilo, vayamos paso por paso.
Primero creamos un nuevo parametro en nuestro controlador, ahora cuando hagamos una petición GET a la url /tasks/id nos devolverá algo. El :id es porque el mismo puede ser dinamico, por lo que cualquier numero que le agreguemos será aceptado.
Al realizarse la petición se ejecutará la función getTask que requiere que le pasemos como parametro el ID. Esta función está incluida dentro del servicio.
ATENTI
Viste que el parametro lo paso como string? Eso es porque como número no es posible ya que la url es una string. Como quiero convertirlo en número, por eso le hago el parseInt despues.
Aclarado el tema del controlador, ahora vayamos al servicio
getTask(id: number) {
return this.tasks.find((task) => task.id === id);
}
Cuando este la tarea nos aparecerá la misma, pero cuando no nos aparecerá un array vacio. Hagamos una validación para evitar que eso ocurra
getTask(id: number) {
const res = this.tasks.find((task) => task.id === id);
if (res) {
return res;
} else {
throw new Error('No se encontró la tarea');
}
}
De hecho, Nest te permite gestionar que errores queres que salga. Por ejemplo, acá tendría mas sentido que aparezca un 404 Not Found que un error interno del servidor. Hagamoslo
getTask(id: number) {
const res = this.tasks.find((task) => task.id === id);
if (res) {
return res;
} else {
return new NotFoundException('No se encuentra la tarea con el id');
}
}
Asi se ve el error
{
"response": {
"message": "No se encuentra la tarea con el id",
"error": "Not Found",
"statusCode": 404
},
"status": 404,
"options": {
},
"message": "No se encuentra la tarea con el id",
"name": "NotFoundException"
}