middleware.ts


Overview

The [middleware.ts](/projects/291/69100) file provides a collection of middleware functions designed for use within an Express.js server application. These middleware functions primarily focus on:

This file acts as a centralized hub for reusable middleware components that improve API robustness, observability, and standardization across the application.


Classes, Functions, and Methods

errorHandler

errorHandler(err: Error, req: Request, res: Response, next: NextFunction): Response | void

Description

Handles errors thrown in the request pipeline and sends appropriate HTTP responses based on the error type.

Parameters

Behavior

Usage Example

app.use(errorHandler);

notFoundHandler

notFoundHandler(_req: Request, res: Response): void

Description

Handles requests for routes that do not exist, responding with a 404 status and a "Not Found" message.

Parameters

Behavior

Sends a **404 Not Found** response with a JSON payload:

{
  "message": "Not Found"
}

Usage Example

app.use(notFoundHandler);

requestLogger

const requestLogger: morgan.Morgan = morgan('short', {
  skip: (req, res) => !req.url?.startsWith('/api/v1') || res.statusCode === 404,
});

Description

A logging middleware using `morgan` that logs HTTP requests in a concise 'short' format.

Behavior

Usage Example

app.use(requestLogger);

metrics

metrics(prometheus: Prometheus): (req: Request, res: Response, next: NextFunction) => void

Description

Creates middleware for collecting HTTP request duration and count metrics via a Prometheus client.

Parameters

Returns

Behavior

Usage Example

app.use(metrics(prometheusInstance));

common

common(prometheus?: Prometheus): Array<import('express').RequestHandler>

Description

Generates a common array of middleware for typical API needs including compression, JSON and URL-encoded parsing, CORS, logging, and optionally metrics.

Parameters

Returns

Behavior

Usage Example

const middlewares = common(prometheusInstance);
app.use(middlewares);

Implementation Details and Algorithms


Interaction with Other System Components

This file acts as middleware glue, enhancing express routes with cross-cutting concerns like error handling, logging, and observability.


Diagram: Middleware Function Structure and Relationships

classDiagram
    class errorHandler {
        +errorHandler(err: Error, req: Request, res: Response, next: NextFunction): Response | void
    }

    class notFoundHandler {
        +notFoundHandler(_req: Request, res: Response): void
    }

    class requestLogger {
        <<morgan middleware>>
    }

    class metrics {
        +metrics(prometheus: Prometheus): MiddlewareFunction
    }

    class common {
        +common(prometheus?: Prometheus): MiddlewareFunction[]
    }

    errorHandler ..> ValidateError : uses
    errorHandler ..> ApiError : uses
    errorHandler ..> SyntaxError : uses

    metrics ..> Prometheus : uses

    common ..> compression : includes
    common ..> json : includes
    common ..> urlencoded : includes
    common ..> cors : includes
    common ..> requestLogger : includes
    common ..> metrics : optionally includes

Summary

The [middleware.ts](/projects/291/69100) file centralizes critical middleware for API error handling, request logging, and metrics collection with Express.js. Its modular functions can be composed flexibly to create a robust, observable, and developer-friendly API server environment. The file’s integration with Prometheus monitoring and TSOA validation makes it suitable for production-grade TypeScript REST APIs.