NestJS - gRPC exception

오픈소스·2024년 3월 9일
0

https://grpc.github.io/grpc/core/md_doc_statuscodes.html
https://grpc.io/docs/guides/status-codes/

CodeNumber
OK0
CANCELLED1
UNKNOWN2
INVALID_ARGUMENT3
DEADLINE_EXCEEDED4
NOT_FOUND5
ALREADY_EXISTS6
PERMISSION_DENIED7
RESOURCE_EXHAUSTED8
FAILED_PRECONDITION9
ABORTED10
OUT_OF_RANGE11
UNIMPLEMENTED12
INTERNAL13
UNAVAILABLE14
DATA_LOSS15
UNAUTHENTICATED16

https://www.npmjs.com/package/nestjs-grpc-exceptions
https://github.com/mohsenbostan/nestjs-grpc-exceptions/blob/main/lib/utils/http-codes-map.ts

export const HTTP_CODE_FROM_GRPC: Record<number, number> = {
  [Status.OK]: HttpStatus.OK,
  [Status.CANCELLED]: HttpStatus.METHOD_NOT_ALLOWED,
  [Status.UNKNOWN]: HttpStatus.BAD_GATEWAY,
  [Status.INVALID_ARGUMENT]: HttpStatus.UNPROCESSABLE_ENTITY,
  [Status.DEADLINE_EXCEEDED]: HttpStatus.REQUEST_TIMEOUT,
  [Status.NOT_FOUND]: HttpStatus.NOT_FOUND,
  [Status.ALREADY_EXISTS]: HttpStatus.CONFLICT,
  [Status.PERMISSION_DENIED]: HttpStatus.FORBIDDEN,
  [Status.RESOURCE_EXHAUSTED]: HttpStatus.TOO_MANY_REQUESTS,
  [Status.FAILED_PRECONDITION]: HttpStatus.PRECONDITION_REQUIRED,
  [Status.ABORTED]: HttpStatus.METHOD_NOT_ALLOWED,
  [Status.OUT_OF_RANGE]: HttpStatus.PAYLOAD_TOO_LARGE,
  [Status.UNIMPLEMENTED]: HttpStatus.NOT_IMPLEMENTED,
  [Status.INTERNAL]: HttpStatus.INTERNAL_SERVER_ERROR,
  [Status.UNAVAILABLE]: HttpStatus.NOT_FOUND,
  [Status.DATA_LOSS]: HttpStatus.INTERNAL_SERVER_ERROR,
  [Status.UNAUTHENTICATED]: HttpStatus.UNAUTHORIZED,
};
import { Catch, RpcExceptionFilter, ArgumentsHost } from '@nestjs/common';
import { Observable, throwError } from 'rxjs';
import { RpcException } from '@nestjs/microservices';

@Catch(RpcException)
export class ExceptionFilter implements RpcExceptionFilter<RpcException> {
  catch(exception: RpcException, host: ArgumentsHost): Observable<any> {
    return throwError(() => exception.getError());
  }
}

0개의 댓글