Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

499
Views
¿Es una buena manera de arrojar un error del servicio en nestjs como este?
const movie = await this.movieService.getOne(movie_id); if(!movie){ throw new Error( JSON.stringify({ message:'some message', status:'http status' }) ); } const rating = await this.ratingRepository.find({where:{movie}); return rating;

Y después, intente atrapar en el controlador y lanzar HttpExeption.

 async getAllByMovie(@Param('movie_id') movie_id:string):Promise<Rating[]>{ try{ const ratings = await this.ratingService.getAllRatingsByMovie(Number(movie_id)); return ratings; }catch(err){ const {message,status} = JSON.parse(err.message); throw new HttpExeption(message,status); } }

¿Es bueno o no?

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

En general, es una buena idea arrojar errores comerciales desde sus servicios y manejar estos errores en la capa del controlador. Pero hay espacio para mejorar mirando su código:

A mí me parece un poco extraño encadenar el message y el status para pasarlo a Error . Puede crear un error personalizado que contenga estas propiedades:

 class MyBusinessError extends Error { status: number; constructor(message: string, status: number) { super(message); this.status = status; } }

Pero sugiero decidir en el nivel del controlador qué estado debe devolverse desde la API porque esto es específico de http y no debe ser parte de su lógica comercial.

También hay filtros de excepción que vienen con NestJS que puede usar para capturar excepciones y transformarlas en excepciones http. Con eso, no necesita intentar atrapar en cada método de controlador. Puede verificar el tipo de error específico usando la instanceof de:

 try { // ... } catch(err) { if(err instanceof MyBusinessError) { // handle business error } throw err; }
about 4 years ago · Juan Pablo Isaza Report

0

Es una buena pregunta,

Me enfrento a un problema algo similar,

Prefiero tener sentencias try/catch en cada función de servicio, así puedo enviar fácilmente una respuesta a un cliente.

Sin embargo, parece que NestJs tiene esos filtros de excepción, pero todavía no estoy completamente convencido, parece que es algo "genial", pero en realidad es posible que no quiera verificar qué instancia del error es, o ir mucho más allá y crear clases y otras cosas para cada módulo/servicio.

De hecho, preferiría tener try/catch en la función de servicio, si en algún lugar falla, simplemente envío una respuesta a un usuario en un bloque catch diciendo que algo salió mal al intentar ejecutar esa misma función.


Hay algunos problemas que me vienen a la mente cuando trato de pensar en los filtros de excepción.

Digamos que tenemos una función de servicio, y tiene una parte decente de lógica, y en algún momento falla.

¿Cómo puedo registrar un mensaje de error personalizado cuando sucedió? No estoy seguro de poder hacerlo si uso filtros de excepción, el error puede ser algo aleatorio y será detectado por un interceptor general con un mensaje genérico.

Pero si tengo la función de prueba/captura en el servicio, puedo tener la lógica que quiera en la función y, si falla en algún momento, tengo un controlador de errores específico para esa función.

Esta última me parece mejor opción.


Con respecto al código que publicaste, se siente raro cuando throw new HttpException , ¿verdad? es como si fuera una declaración de captura y en la captura tenemos que lanzar una excepción nuevamente.

es extraño, me encantan los nestJ, pero su intento de abstraer las excepciones no es tan limpio como podría ser.

Estoy bastante seguro de que hay una manera de hacer que funcione con sus filtros de excepción y todo, pero simplemente no me convence la idea de que su forma es mejor que simplemente probar/atrapar.

about 4 years ago · Juan Pablo Isaza Report

0

En NestJs tenemos todos los filtros de excepción para que no necesitemos manejar errores en todos los lugares

puede consultar https://docs.nestjs.com/exception-filters

todas las excepciones.filter.ts

 import { ExceptionFilter, Catch, ArgumentsHost, HttpException, HttpStatus, } from '@nestjs/common'; import { object } from 'underscore'; @Catch() export class AllExceptionsFilter implements ExceptionFilter { catch(exception: any, host: ArgumentsHost) { const ctx = host.switchToHttp(); const response = ctx.getResponse(); const request = ctx.getRequest<CustomRequest>(); let internalStatus; let status = exception instanceof HttpException ? exception.getStatus() : HttpStatus.INTERNAL_SERVER_ERROR; let message = exception.sqlMessage || exception.response || exception; let error = exception.sqlState === 45000 ? 'Bad Request' : 'Bad Request'; request.log.timeTookToServe = Date.now() - request.log.timestamp; request.log.message = message; request.log.status = `${status}`; if (exception instanceof TypeError) { status = 400; error = 'Bad Request'; message = exception.message .substring(exception.message.indexOf('\n\n\n') + 1) .trim(); } if (status === 500) { console.log(exception.sqlMessage, exception.sqlState, exception); } else { console.log(exception.sqlMessage, exception.sqlState, exception); } const errMessage = errJson[request.log['module']]; response.status(status).json({ status: exception.status || status, error: error, message: [ status === 403 ? "Either you don't have the privilege or been logged out." : message, ], }); } }

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!