Exceptions and Custom HTTP Statuses
You can gracefully throw HTTP exceptions with the syntax borrowed from NestJS. HttpException
class accepts 2 arguments. The first one is an HTTP code that can be retrieved from HttpStatus
, the other one is an error text.
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 { UserController } 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' };
HttpStatus Enum
There are the values of the HttpStatus
enum for quick reference.
export enum HttpStatus {
NULL = 0,
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,
}