graph LR
NestApplication["NestApplication"]
HttpAdapter["HttpAdapter"]
ExpressAdapter["ExpressAdapter"]
FastifyAdapter["FastifyAdapter"]
RoutesResolver["RoutesResolver"]
MiddlewareModule["MiddlewareModule"]
RouterExplorer["RouterExplorer"]
RouterResponseController["RouterResponseController"]
NestApplication -- "delegates server operations to" --> HttpAdapter
NestApplication -- "initializes and triggers" --> RoutesResolver
NestApplication -- "initializes and triggers" --> MiddlewareModule
HttpAdapter -- "is implemented by" --> ExpressAdapter
HttpAdapter -- "is implemented by" --> FastifyAdapter
HttpAdapter -- "receives requests from" --> NestApplication
RoutesResolver -- "registers routes with" --> HttpAdapter
RoutesResolver -- "utilizes" --> RouterExplorer
MiddlewareModule -- "binds middleware to" --> HttpAdapter
RouterExplorer -- "provides route metadata to" --> RoutesResolver
RouterResponseController -- "uses" --> HttpAdapter
The Nest.js HTTP subsystem is orchestrated by the NestApplication, which serves as the central entry point for handling incoming requests. It delegates core server operations to the HttpAdapter, an abstraction layer that allows seamless integration with various underlying HTTP frameworks like ExpressAdapter or FastifyAdapter. The RoutesResolver is responsible for discovering and registering routes, leveraging the RouterExplorer to extract route metadata from controllers. Concurrently, the MiddlewareModule manages the application of global and route-specific middleware. Finally, the RouterResponseController handles the outgoing responses, ensuring proper formatting and delivery to the client. This modular design promotes flexibility and maintainability, allowing developers to choose their preferred HTTP framework while maintaining a consistent application structure.
Orchestrates the entire HTTP layer, manages the application's lifecycle, integrates core modules, applies global configurations, and delegates server operations to the HttpAdapter. It acts as the main entry point for the Nest.js application's HTTP handling.
Related Classes/Methods:
Defines the contract for interacting with underlying HTTP frameworks (e.g., Express, Fastify). It provides an abstraction layer, allowing NestApplication and other components to interact with the HTTP server without knowing the specific framework implementation details.
Related Classes/Methods:
A concrete implementation of HttpAdapter for the Express.js framework. It handles low-level routing, middleware application, and request/response manipulation specific to Express.js, translating Nest.js's abstract operations into Express.js specific calls.
Related Classes/Methods:
A concrete implementation of HttpAdapter for the Fastify framework. Similar to ExpressAdapter, it manages low-level routing, middleware, and request/response handling tailored for the Fastify framework, providing high performance.
Related Classes/Methods:
Discovers and registers routes from controllers with the HttpAdapter. It is responsible for mapping incoming HTTP requests to the appropriate controller methods and setting up global error and not-found handlers.
Related Classes/Methods:
Manages the registration and application of global, module-specific, and route-specific middleware. It ensures that middleware functions are executed in the correct order during the request-response cycle.
Related Classes/Methods:
Scans controllers to extract route metadata (paths, HTTP methods, decorators). This metadata is then used by RoutesResolver to correctly register routes with the underlying HttpAdapter.
Related Classes/Methods:
Handles the final stage of the HTTP request lifecycle, sending responses back to the client. This includes setting HTTP status codes, headers, and rendering views or sending JSON data.
Related Classes/Methods: