UNPKG

@leanstacks/serverless-common

Version:

LeanStacks organization common serverless components.

152 lines (103 loc) 4.71 kB
:house: [Home](/README.md) | :books: [Docs](../DOCS.md) # Errors This document describes how to use the family of `Error` classes within the `@leanstacks/serverless-common` package. ## How it works The `@leanstacks/serverless-common` package provides a family of error classes which may be utilized within AWS Lambda functions to ensure that a consistent response is returned when exception scenarios occur. ## Using the errors There are two base error classes: `ServiceError` and `HttpError`. Both extend `Error` and, therefore, both have `name` and `message` properties. Additional properties are included to provide more information. ### `ServiceError` A `ServiceError` may be used in any type of AWS Lambda function. The error has the following properties: - `name` -- The string "ServiceError". - `message` -- A string message describing the error. - `statusCode` -- Optional. A numeric [HTTP response status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) - `code` -- Optional. A numeric value to convey further meaning to the API client regarding the cause of the error A `ServiceError` may be constructed with either a string or an Error as the first parameter. The optional second parameter is the numeric `code`. And, the optional third parameter is the `statusCode`. _Example: Throw a `ServiceError` with a message._ ```ts new ServiceError('Object not found in S3 bucket'); ``` _Example: Throw a `ServiceError` with an error and code._ ```ts try { ... } catch (err) { throw new ServiceError(err, 1001); } ``` ### `HttpError` A `HttpError` and, more often, it's sub-classes are used in API Gateway Lambda functions. The error has the following properties: - `name` -- The string "HttpError". - `message` -- A string message describing the error. - `statusCode` -- A numeric [HTTP response status code](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) A `HttpError` may be constructed with either a string or an Error as the first parameter and a status code as the second parameter. _Example: Throw a `HttpError` with a message and status code._ ```ts new HttpError('Not found', 404); ``` _Example: Throw a `HttpError` with an error and status code._ ```ts try { ... } catch (err) { throw new HttpError(err, 500); } ``` However, it is more common to use one of the `HttpError` sub-classes: - `BadRequestError` - `ForbiddenError` - `NotFoundError` ### `BadRequestError` A `BadRequestError` extends `HttpError`. The error `name` is "BadRequestError" and the `statusCode` is 400. The `BadRequestError` constructor accepts an optional string `message` parameter. When provided, this value is set to the error `message` property, otherwise, the default HTTP status message for HTTP 400 is used. _Example: Throw a `BadRequestError` with the default message._ ```ts new BadRequestError(); ``` _Example: Throw a `BadRequestError` with a custom message._ ```ts try { ... } catch (err) { throw new BadRequestError(err.message); } ``` ### `ForbiddenError` A `ForbiddenError` extends `HttpError`. The error `name` is "ForbiddenError" and the `statusCode` is 403. The `ForbiddenError` constructor accepts an optional string `message` parameter. When provided, this value is set to the error `message` property, otherwise, the default HTTP status message for HTTP 403 is used. _Example: Throw a `ForbiddenError` with the default message._ ```ts new ForbiddenError(); ``` _Example: Throw a `ForbiddenError` with a custom message._ ```ts try { ... } catch (err) { throw new ForbiddenError(err.message); } ``` ### `NotFoundError` A `NotFoundError` extends `HttpError`. The error `name` is "NotFoundError" and the `statusCode` is 404. The `NotFoundError` constructor accepts an optional string `message` parameter. When provided, this value is set to the error `message` property, otherwise, the default HTTP status message for HTTP 404 is used. _Example: Throw a `NotFoundError` with the default message._ ```ts new NotFoundError(); ``` _Example: Throw a `NotFoundError` with a custom message._ ```ts try { ... } catch (err) { throw new NotFoundError(err.message); } ``` ## Example API client response When any of the error family of classes is thrown from an API Gateway Lambda function, the `http-error-handler` middleware intercepts the error and, using the information within the error, creates an informative response for the API client. The response body payload is similar to the example below. ```json { "name": "NotFoundError", "message": "The requested resource could not be found but may be available in the future. Subsequent requests by the client are permissible.", "code": 404, "statusCode": 404 } ```