Utilizing Middleware, Handling Requests and Responses in Express.js

HaeChan Jung
3 min readFeb 13, 2024

1. Introduction to Express.js

  • Express.js is introduced as a lightweight framework that sits on top of Node.js, simplifying the development process by handling server-side logistics like routing, request parsing, and session management. It’s designed to make building web applications and APIs more intuitive by providing a layer of fundamental web application features without obscuring Node.js features.

2. Utilizing Middleware in Express.js

  • Middleware Concept: Middleware functions are at the heart of Express.js. They are functions that have access to the request object (req), the response object (res), and the next middleware function in the application’s request-response cycle. These functions can execute any code, make changes to the request and response objects, end the request-response cycle, and call the next middleware function. This architecture allows for a flexible and decoupled design where different tasks are handled by specific middleware.
  • Application and Router Level Middleware: Express.js distinguishes between application-level middleware (app.use) and router-level middleware (router.use). Application-level middleware binds to the app object and can affect the entire application's routing. In contrast, router-level middleware is bound to an instance of express.Router(), allowing for more modular and mountable route handlers.

3. Handling Requests and Responses

  • Simplified Response Methods: Express enhances the Node.js response (res) object with methods like res.send() and res.sendFile() to streamline various types of responses. res.send() can automatically handle different content types and converts objects to JSON, simplifying the API's responses. res.sendFile() provides an easy way to send files as a response, setting appropriate headers without manual intervention.

4. Static Files Handling

  • Serving Static Assets: Express.js simplifies the serving of static files (CSS, JavaScript, images, etc.) with the express.static middleware. This middleware takes the name of a directory that Express will serve files from directly, allowing public access to these files without manual routing for each asset, significantly simplifying asset management.

5. Routing and Path Management

  • Advanced Routing: Express.js provides a powerful routing system that supports URL parameters, query string parameters, and HTTP method-based routing (GET, POST, etc.) through methods like app.get() and app.post(). This system allows developers to respond differently based on the route accessed and the type of request made, facilitating RESTful API development and page rendering in web applications.
  • Path Construction with path Module: The path module is used to construct file paths in a platform-independent manner. This is crucial for ensuring that Express.js applications are portable and can run on any operating system without path resolution issues, especially when serving files or accessing filesystem paths.

6. Organizing Code with Express Router

  • Modular Routing with express.Router(): The router allows for a more modular and separable way to organize route logic. By creating multiple routers for different parts of an application (e.g., user management, product management), developers can keep their codebase cleaner and more maintainable.

7. Serving HTML Files and Public Static Content

  • HTML and Static Content: The ability to serve HTML files and public static content is crucial for full-stack web application development. Express.js facilitates this with the res.sendFile() method for HTML content and the express.static middleware for assets like CSS and JavaScript, enabling the creation of rich, interactive web applications.

8. Error Handling and 404 Responses

  • 404 and Error Handling: Express.js applications can define middleware for handling 404 Not Found errors and general error handling by placing a catch-all route at the end of all routes. This allows developers to provide a consistent user experience even when users request non-existent routes.

Summary and Further Exploration

These steps underscore Express.js’s role in enhancing Node.js application development by providing a structured framework for routing, middleware, and static content serving. This sets the foundation for exploring more advanced topics like templating engines for dynamic content, database integration for persistent storage, and security practices for protecting web applications.



HaeChan Jung

Thank you for visiting! Currently, Senior Computer Science student so far . Educated in machine learning and blockchain at university. Using C, C++, and Python.