Skip to Content

Errors

You can gracefully throw HTTP exceptions with the syntax inspired by NestJS. HttpException class accepts 3 arguments. The first one is an HTTP code that can be retrieved from HttpStatus, the second one is a message, and the third one is an optional cause that can be any object that is going to be JSON-stringified and passed down to the client.

import { HttpException, HttpStatus } from 'vovk'; // ... static async updateUser(/* ... */) { // ... throw new HttpException(HttpStatus.BAD_REQUEST, 'Something went wrong'); }

The errors are re-thrown at the client library with the same interface.

import { UserRPC } from 'vovk-client'; import { HttpException } from 'vovk'; // ... try { const updatedUser = await UserController.updateUser(/* ... */); } catch (e) { console.log(e instanceof HttpException); // true const err = e as HttpException; console.log(err.message, err.statusCode); }

Regular errors such as Error are equivalent to HttpException with code 500.

import { HttpException, HttpStatus } from 'vovk'; // ... static async updateUser(/* ... */) { // ... throw new Error('Something went wrong'); // 500 }

You can also throw custom objects that are going to be re-thrown on the client-side as is.

throw { hello: 'World' };

You can provide cause to the HttpException constructor as 3rd argument to provide more context to the error.

throw new HttpException(HttpStatus.BAD_REQUEST, 'Something went wrong', { hello: 'World' });

HttpStatus enum

There are the values of the HttpStatus enum for quick reference.

export enum HttpStatus { NULL = 0, // for client-side errors, such as client-side validation CONTINUE = 100, SWITCHING_PROTOCOLS = 101, PROCESSING = 102, EARLYHINTS = 103, OK = 200, CREATED = 201, ACCEPTED = 202, NON_AUTHORITATIVE_INFORMATION = 203, NO_CONTENT = 204, RESET_CONTENT = 205, PARTIAL_CONTENT = 206, AMBIGUOUS = 300, MOVED_PERMANENTLY = 301, FOUND = 302, SEE_OTHER = 303, NOT_MODIFIED = 304, TEMPORARY_REDIRECT = 307, PERMANENT_REDIRECT = 308, BAD_REQUEST = 400, UNAUTHORIZED = 401, PAYMENT_REQUIRED = 402, FORBIDDEN = 403, NOT_FOUND = 404, METHOD_NOT_ALLOWED = 405, NOT_ACCEPTABLE = 406, PROXY_AUTHENTICATION_REQUIRED = 407, REQUEST_TIMEOUT = 408, CONFLICT = 409, GONE = 410, LENGTH_REQUIRED = 411, PRECONDITION_FAILED = 412, PAYLOAD_TOO_LARGE = 413, URI_TOO_LONG = 414, UNSUPPORTED_MEDIA_TYPE = 415, REQUESTED_RANGE_NOT_SATISFIABLE = 416, EXPECTATION_FAILED = 417, I_AM_A_TEAPOT = 418, MISDIRECTED = 421, UNPROCESSABLE_ENTITY = 422, FAILED_DEPENDENCY = 424, PRECONDITION_REQUIRED = 428, TOO_MANY_REQUESTS = 429, INTERNAL_SERVER_ERROR = 500, NOT_IMPLEMENTED = 501, BAD_GATEWAY = 502, SERVICE_UNAVAILABLE = 503, GATEWAY_TIMEOUT = 504, HTTP_VERSION_NOT_SUPPORTED = 505, }
Last updated on