Skip to content

Instantly share code, notes, and snippets.

@wenindoubt
Forked from hoangsetup/middleware.ts
Created June 30, 2021 20:11
Show Gist options
  • Select an option

  • Save wenindoubt/f940ece29a43fa5c28da67054fefc2b0 to your computer and use it in GitHub Desktop.

Select an option

Save wenindoubt/f940ece29a43fa5c28da67054fefc2b0 to your computer and use it in GitHub Desktop.

Revisions

  1. @hoangsetup hoangsetup revised this gist Apr 25, 2021. 1 changed file with 4 additions and 3 deletions.
    7 changes: 4 additions & 3 deletions middleware.ts
    Original file line number Diff line number Diff line change
    @@ -30,9 +30,10 @@ export const apiGatewayResponseMiddleware = (options: { enableErrorLogger?: bool

    if (error instanceof AppError) {
    statusCode = error.statusCode;
    if (options.enableErrorLogger) {
    console.error(error);
    }
    }

    if (options.enableErrorLogger) {
    console.error(error);
    }

    request.response = formatJSONResponse({ message: error.message }, statusCode);
  2. @hoangsetup hoangsetup created this gist Apr 25, 2021.
    45 changes: 45 additions & 0 deletions middleware.ts
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,45 @@
    import middy from '@middy/core';
    import { APIGatewayProxyEvent, APIGatewayProxyResult } from 'aws-lambda';

    import { formatJSONResponse } from './apiGateway';
    import { AppError } from './appError';
    import MiddlewareFunction = middy.MiddlewareFunction;

    export const apiGatewayResponseMiddleware = (options: { enableErrorLogger?: boolean } = {}) => {

    const after: MiddlewareFunction<APIGatewayProxyEvent, any> = async (request) => {
    if (!request.event?.httpMethod || request.response === undefined || request.response === null) {
    return;
    }

    const existingKeys = Object.keys(request.response);
    const isHttpResponse = existingKeys.includes('statusCode')
    && existingKeys.includes('headers')
    && existingKeys.includes('body');

    if (isHttpResponse) {
    return;
    }

    request.response = formatJSONResponse(request.response);
    }

    const onError: MiddlewareFunction<APIGatewayProxyEvent, APIGatewayProxyResult> = async (request) => {
    const { error } = request;
    let statusCode = 500;

    if (error instanceof AppError) {
    statusCode = error.statusCode;
    if (options.enableErrorLogger) {
    console.error(error);
    }
    }

    request.response = formatJSONResponse({ message: error.message }, statusCode);
    }

    return {
    after,
    onError,
    };
    }