Creating Middleware
A middleware is a piece of code that is run before or after a request is handled. It might modify theRequest or Response.
Create a middleware by conforming to the Middleware protocol. It has a single function intercept which takes a Request and next closure. It returns an EventLoopFuture<Response>.
Accessing the Request
If you’d like to do something with the Request before it is handled, you can do so before calling next. Be sure to call and return next when you’re finished!
next(req) when you are finished.
Setting Data on a Request
Sometimes you may want aMiddleware to add some data to a Request. For example, you may want to authenticate an incoming request with a Middleware and then add a User to it for handlers down the chain to access.
You can set generic data on a Request using Request.set and then access it in subsequent Middleware or handlers via Request.get.
For example, you might be doing some experiments with a homegrown ExperimentConfig type. You’d like to assign random configurations of that type on a per-request basis. You might do so with a Middleware:
Middleware and utilize the set ExperimentConfig in your handlers.
Accessing the Response
If you’d like to do something with the Response of the handled request, you can plug into the future returned by next.
Adding Middleware to Your Application
There are a few ways to have aMiddleware intercept requests.
Global Intercepting
If you’d like a middleware to intercept all requests on anApplication, you can add it via Application.useAll.
Specific Intercepting
AMiddleware can be setup to only intercept requests to specific handlers via the .use(_ middleware: Middleware) function on an Application. The Middleware will intercept all requests to the subsequently defined handlers.
.group function that takes a Middleware. The Middleware will only intercept requests handled by handlers defined in the closure.

