Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

498
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda