Middleware acts as a layer between the client and server. It processes requests before they reach the controller and modifies the response when it is sent back to the client.
Middleware Lifecycle
-
Request Phase: Middlewares can intercept, modify, or reject the HTTP method before it reaches the rails routes and controllers.
Examples:- Authenticate checks
- Logging request details
- Rate Limiting
- Data Transformation
-
Response Phase: Middleware can also intercept or modify the response before it is returned to the client.
Examples:- Adding security headers
- compressing the response
- caching the response
Create the custom middleware class
We can create the custom middlewares inside the lib
directory of our rails controller, if it doesn't exist, create the lib
directory.
# lib/custom_middleware.rb
class CustomMiddleware
def initialize(app)
@app = app
end
def call(env)
# Logic before the request reaches the controller
puts "Incoming request path: #{env['REQUEST_PATH']}"
# Call the next middleware
status, header, response = @app.call(env)
# Logic before response reaches client
headers['X-Custom-Header'] = 'Hello from middleware'
# Return the modified response
[status, header, response]
end
end
Rails does not automatically load files in the lib
directory, so we need to ensure it is loaded in config/application.rb
config.autoload_paths << Rails.root.join('lib')
We need to register the middleware in the middleware stack
config.middleware.use CustomMiddleware
We can verify that our middleware is loaded by running:
rails middleware
Whenever we add or modify the rails middleware, we need to restart the rails server for the changes to take effect.
rails s
Conclusion:
Middleware in Rails is a set of components that process HTTP requests and responses. It provides a modular way to handle task like authentication, logging, and session management.
Top comments (0)