https://grpc.github.io/grpc/core/md_doc_statuscodes.html
https://grpc.io/docs/guides/status-codes/
Code | Number |
---|---|
OK | 0 |
CANCELLED | 1 |
UNKNOWN | 2 |
INVALID_ARGUMENT | 3 |
DEADLINE_EXCEEDED | 4 |
NOT_FOUND | 5 |
ALREADY_EXISTS | 6 |
PERMISSION_DENIED | 7 |
RESOURCE_EXHAUSTED | 8 |
FAILED_PRECONDITION | 9 |
ABORTED | 10 |
OUT_OF_RANGE | 11 |
UNIMPLEMENTED | 12 |
INTERNAL | 13 |
UNAVAILABLE | 14 |
DATA_LOSS | 15 |
UNAUTHENTICATED | 16 |
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());
}
}