# Middleware - Crow

Skip to content

# Middleware

Any middleware requires following 3 members:

## struct context

Storing data for the middleware; can be read from another middleware or handlers

## before_handle

Called before handling the request.
If `res.end()` is called, the operation is halted. (`after_handle` will still be called)
2 signatures:
`void before_handle(request& req, response& res, context& ctx)` if you only need to access this middleware's context.

    template <typename AllContext>
    void before_handle(request& req, response& res, context& ctx, AllContext& all_ctx)

You can access other middlewares' context by calling `all_ctx.template get<MW>()`
`ctx == all_ctx.template get<CurrentMiddleware>()`

## after_handle

Called after handling the request.

`void after_handle(request& req, response& res, context& ctx)`

    template <typename AllContext>
    void after_handle(request& req, response& res, context& ctx, AllContext& all_ctx)

This was pulled from `cookie_parser.h`. Further Editing required, possibly use parts of @ipkn's wiki page.