Skip to content

HttpMiddleware

This middleware normalizes all HTTP requests, handles, and formats success and error responses, and should be used for all HTTP endpoints.

Usage

import middy from '@middy/core';
import { APIGatewayProxyEvent } from 'aws-lambda';
import { httpMiddleware } from 'lesgo/middlewares';
import appConfig from '../../config/app';

interface MiddyAPIGatewayProxyEvent extends APIGatewayProxyEvent {
  pathParameters: {
    'path-key-1': string,
    'path-key-2': string,
  },
  queryStringParameters: {
    stringValue: string;
    numberValue: number,
    booleanValue: boolean,
  },
  body: {
    user: {
      name: string;
      age: number;
    }
  };
}

const pingHandler = (event: MiddyAPIGatewayProxyEvent) => {
  const { pathParamters, queryStringParameters, body } = event;

  return {
    pathParamters,
    queryStringParameters, 
    body, 
  }
};

export const handler = middy()
  .use(httpMiddleware({ debugMode: appConfig.debug }))
  .handler(pingHandler);

export default handler;

Success Response

The successful response will be formatted in this way

{
    "status": "success",
    "data": {
        "pathParameters": {
            "path-key-1": "pathValue1",
            "path-key-2": "pathValue2",
        },
        "queryStringParameters": {
            "stringValue": "some-string",
            "numberValue": 999,
            "booleanValue": true,
        },
        "body": {
            "user": {
                "name": "John Doe",
                "age": 24
            }
        }
    },
    "_meta": {}
}

Error Response

The error response will be formatted in this way

{
    "status": "error",
    "data": null,
    "error": {
        "code": "handlers.auth.login::USER_NOT_EXIST",
        "message": "User does not exist",
        "details": {
            "name": "UserException",
            "message": "User not found",
            "statusCode": 404,
            "code": "models.User.loginUser::USER_NOT_EXIST",
            "extra": {}
        }
    },
    "_meta": {}
}

Nested Middlewares