2018-07-28 09:08:17 +00:00
<!DOCTYPE HTML>
< html lang = "" >
< head >
< meta charset = "UTF-8" >
< meta content = "text/html; charset=utf-8" http-equiv = "Content-Type" >
< title > Middleware Registry · GitBook< / title >
< meta http-equiv = "X-UA-Compatible" content = "IE=edge" / >
< meta name = "description" content = "" >
< meta name = "generator" content = "GitBook 3.2.3" >
< link rel = "stylesheet" href = "../gitbook/style.css" >
2018-09-03 15:58:24 +00:00
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-hints/plugin-hints.css" >
2018-07-28 09:08:17 +00:00
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-highlight/website.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-search/search.css" >
< link rel = "stylesheet" href = "../gitbook/gitbook-plugin-fontsettings/website.css" >
< meta name = "HandheldFriendly" content = "true" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1, user-scalable=no" >
< meta name = "apple-mobile-web-app-capable" content = "yes" >
< meta name = "apple-mobile-web-app-status-bar-style" content = "black" >
< link rel = "apple-touch-icon-precomposed" sizes = "152x152" href = "../gitbook/images/apple-touch-icon-precomposed-152.png" >
< link rel = "shortcut icon" href = "../gitbook/images/favicon.ico" type = "image/x-icon" >
2018-08-03 07:10:16 +00:00
< link rel = "next" href = "default_middleware.html" / >
2018-07-28 09:08:17 +00:00
2018-08-22 19:52:52 +00:00
< link rel = "prev" href = "transforming_middleware_chain.html" / >
2018-07-28 09:08:17 +00:00
< / head >
< body >
< div class = "book" >
< div class = "book-summary" >
< div id = "book-search-input" role = "search" >
< input type = "text" placeholder = "Type to search" / >
< / div >
< nav role = "navigation" >
< ul class = "summary" >
2018-09-03 15:58:24 +00:00
< li class = "header" > Introduction< / li >
2018-07-28 09:08:17 +00:00
< li class = "chapter " data-level = "1.1" data-path = "../" >
< a href = "../" >
Introduction
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "header" > Basics< / li >
< li class = "chapter " data-level = "2.1" data-path = "../basics/route_syntax.html" >
2018-07-28 09:08:17 +00:00
< a href = "../basics/route_syntax.html" >
Route Syntax
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "2.2" data-path = "../basics/router.html" >
2018-07-28 09:08:17 +00:00
< a href = "../basics/router.html" >
Router
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "2.3" data-path = "../basics/path_based_routing.html" >
2018-07-28 09:08:17 +00:00
< a href = "../basics/path_based_routing.html" >
Path-based Routing
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "2.4" data-path = "../basics/name_based_routing.html" >
2018-07-28 09:08:17 +00:00
< a href = "../basics/name_based_routing.html" >
Name-based Routing
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "2.5" data-path = "../basics/route_data.html" >
2018-07-28 09:08:17 +00:00
< a href = "../basics/route_data.html" >
Route Data
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "2.6" data-path = "../basics/route_data_validation.html" >
2018-07-28 09:08:17 +00:00
< a href = "../basics/route_data_validation.html" >
Route Data Validation
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "2.7" data-path = "../basics/route_conflicts.html" >
2018-07-28 09:08:17 +00:00
< a href = "../basics/route_conflicts.html" >
Route Conflicts
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "header" > Coercion< / li >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "3.1" data-path = "../coercion/coercion.html" >
2018-07-28 09:08:17 +00:00
< a href = "../coercion/coercion.html" >
Coercion Explained
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "3.2" data-path = "../coercion/schema_coercion.html" >
2018-07-28 09:08:17 +00:00
< a href = "../coercion/schema_coercion.html" >
Plumatic Schema
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "3.3" data-path = "../coercion/clojure_spec_coercion.html" >
2018-07-28 09:08:17 +00:00
< a href = "../coercion/clojure_spec_coercion.html" >
Clojure.spec
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "3.4" data-path = "../coercion/data_spec_coercion.html" >
2018-07-28 09:08:17 +00:00
< a href = "../coercion/data_spec_coercion.html" >
Data-specs
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "header" > Ring< / li >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "4.1" data-path = "ring.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "ring.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Ring-router
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "4.2" data-path = "reverse_routing.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "reverse_routing.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Reverse-routing
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "4.3" data-path = "default_handler.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "default_handler.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Default handler
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.4" data-path = "slash_handler.html" >
< a href = "slash_handler.html" >
Slash handler
< / a >
< / li >
< li class = "chapter " data-level = "4.5" data-path = "static.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "static.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Static Resources
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.6" data-path = "dynamic_extensions.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "dynamic_extensions.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Dynamic Extensions
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.7" data-path = "data_driven_middleware.html" >
2018-08-25 12:49:36 +00:00
< a href = "data_driven_middleware.html" >
Data-driven Middleware
< / a >
2018-07-28 09:08:17 +00:00
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.8" data-path = "transforming_middleware_chain.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "transforming_middleware_chain.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Transforming Middleware Chain
2018-07-28 09:08:17 +00:00
< / a >
2018-08-25 12:49:36 +00:00
< / li >
2018-07-28 09:08:17 +00:00
2018-10-30 17:54:38 +00:00
< li class = "chapter active" data-level = "4.9" data-path = "middleware_registry.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "middleware_registry.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Middleware Registry
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.10" data-path = "default_middleware.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "default_middleware.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Default Middleware
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.11" data-path = "coercion.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "coercion.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Pluggable Coercion
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.12" data-path = "route_data_validation.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "route_data_validation.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Route Data Validation
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.13" data-path = "compiling_middleware.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "compiling_middleware.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Compiling Middleware
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-10-30 17:54:38 +00:00
< li class = "chapter " data-level = "4.14" data-path = "swagger.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
< a href = "swagger.html" >
2018-07-28 09:08:17 +00:00
2018-08-25 12:49:36 +00:00
Swagger Support
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-08-25 12:49:36 +00:00
2018-09-03 15:58:24 +00:00
2018-09-08 07:54:15 +00:00
< li class = "header" > HTTP< / li >
2018-09-03 15:58:24 +00:00
2018-08-22 18:52:18 +00:00
2018-09-08 07:54:15 +00:00
< li class = "chapter " data-level = "5.1" data-path = "../http/interceptors.html" >
2018-07-28 09:08:17 +00:00
2018-09-08 07:54:15 +00:00
< a href = "../http/interceptors.html" >
2018-07-28 09:08:17 +00:00
2018-09-08 07:54:15 +00:00
Interceptors
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-08 07:54:15 +00:00
< li class = "chapter " data-level = "5.2" data-path = "../http/pedestal.html" >
2018-08-03 07:10:16 +00:00
2018-09-08 07:54:15 +00:00
< a href = "../http/pedestal.html" >
2018-08-03 07:10:16 +00:00
2018-09-08 07:54:15 +00:00
Pedestal
2018-08-03 07:10:16 +00:00
< / a >
< / li >
2018-09-08 07:54:15 +00:00
< li class = "chapter " data-level = "5.3" data-path = "../http/sieppari.html" >
2018-07-28 09:08:17 +00:00
2018-09-08 07:54:15 +00:00
< a href = "../http/sieppari.html" >
Sieppari
< / a >
< / li >
< li class = "chapter " data-level = "5.4" data-path = "../http/default_interceptors.html" >
< a href = "../http/default_interceptors.html" >
2018-07-28 09:08:17 +00:00
2018-09-08 07:54:15 +00:00
Default Interceptors
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-03 15:58:24 +00:00
2018-09-08 07:54:15 +00:00
< li class = "header" > Frontend< / li >
2018-09-03 15:58:24 +00:00
2018-09-08 07:54:15 +00:00
< li class = "chapter " data-level = "6.1" data-path = "../frontend/basics.html" >
2018-07-28 09:08:17 +00:00
2018-09-08 07:54:15 +00:00
< a href = "../frontend/basics.html" >
2018-07-28 09:08:17 +00:00
2018-09-08 07:54:15 +00:00
Basics
< / a >
< / li >
< li class = "chapter " data-level = "6.2" data-path = "../frontend/browser.html" >
< a href = "../frontend/browser.html" >
Browser integration
< / a >
< / li >
< li class = "chapter " data-level = "6.3" data-path = "../frontend/controllers.html" >
< a href = "../frontend/controllers.html" >
Controllers
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-08-25 12:49:36 +00:00
2018-09-03 15:58:24 +00:00
< li class = "header" > Advanced< / li >
< li class = "chapter " data-level = "7.1" data-path = "../advanced/configuring_routers.html" >
2018-08-25 12:49:36 +00:00
2018-09-03 15:58:24 +00:00
< a href = "../advanced/configuring_routers.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
Configuring Routers
2018-08-25 12:49:36 +00:00
< / a >
2018-09-03 15:58:24 +00:00
< / li >
2018-08-25 12:49:36 +00:00
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "7.2" data-path = "../advanced/composing_routers.html" >
2018-08-25 12:49:36 +00:00
2018-09-03 15:58:24 +00:00
< a href = "../advanced/composing_routers.html" >
2018-08-25 12:49:36 +00:00
2018-09-03 15:58:24 +00:00
Composing Routers
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "7.3" data-path = "../advanced/different_routers.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
< a href = "../advanced/different_routers.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
Different Routers
2018-07-28 09:08:17 +00:00
< / a >
2018-09-03 15:58:24 +00:00
< / li >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "7.4" data-path = "../advanced/route_validation.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
< a href = "../advanced/route_validation.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
Route Validation
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "7.5" data-path = "../advanced/dev_workflow.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
< a href = "../advanced/dev_workflow.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
Dev Workflow
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "7.6" data-path = "../advanced/shared_routes.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
< a href = "../advanced/shared_routes.html" >
2018-07-28 09:08:17 +00:00
2018-09-03 15:58:24 +00:00
Shared Routes
2018-07-28 09:08:17 +00:00
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "header" > Misc< / li >
< li class = "chapter " data-level = "8.1" data-path = "../performance.html" >
2018-07-28 09:08:17 +00:00
< a href = "../performance.html" >
Performance
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "8.2" data-path = "../development.html" >
2018-07-28 09:08:17 +00:00
< a href = "../development.html" >
Development Instructions
< / a >
< / li >
2018-09-03 15:58:24 +00:00
< li class = "chapter " data-level = "8.3" data-path = "../faq.html" >
2018-07-28 09:08:17 +00:00
< a href = "../faq.html" >
FAQ
< / a >
< / li >
< li class = "divider" > < / li >
< li >
< a href = "https://www.gitbook.com" target = "blank" class = "gitbook-link" >
Published with GitBook
< / a >
< / li >
< / ul >
< / nav >
< / div >
< div class = "book-body" >
< div class = "body-inner" >
< div class = "book-header" role = "navigation" >
<!-- Title -->
< h1 >
< i class = "fa fa-circle-o-notch fa-spin" > < / i >
< a href = ".." > Middleware Registry< / a >
< / h1 >
< / div >
< div class = "page-wrapper" tabindex = "-1" role = "main" >
< div class = "page-inner" >
< div id = "book-search-results" >
< div class = "search-noresults" >
< section class = "normal markdown-section" >
< h1 id = "middleware-registry" > Middleware Registry< / h1 >
< p > The < code > :middleware< / code > syntax in < code > reitit-ring< / code > supports also Keywords. Keywords are looked from Middleware Registry, which is a map of < code > keyword => IntoMiddleware< / code > . Middleware registry should be stored under key < code > :reitit.middleware/registry< / code > in the router options. If a middleware keyword isn' t found in the registry, router creation fails fast with descriptive error message.< / p >
< h2 id = "examples" > Examples< / h2 >
< p > Application using middleware defined in the Middleware Registry:< / p >
< pre > < code class = "lang-clj" > (< span class = "hljs-name" > require< / span > ' [reitit.ring < span class = "hljs-symbol" > :as< / span > ring])
(< span class = "hljs-name" > require< / span > ' [reitit.middleware < span class = "hljs-symbol" > :as< / span > middleware])
(< span class = "hljs-name" > < span class = "hljs-builtin-name" > defn< / span > < / span > wrap-bonus [handler value]
(< span class = "hljs-name" > < span class = "hljs-builtin-name" > fn< / span > < / span > [request]
(< span class = "hljs-name" > handler< / span > (< span class = "hljs-name" > update< / span > request < span class = "hljs-symbol" > :bonus< / span > (< span class = "hljs-name" > fnil< / span > + < span class = "hljs-number" > 0< / span > ) value))))
(< span class = "hljs-name" > < span class = "hljs-builtin-name" > def< / span > < / span > app
(< span class = "hljs-name" > ring/ring-handler< / span >
(< span class = "hljs-name" > ring/router< / span >
[< span class = "hljs-string" > " /api" < / span > {< span class = "hljs-symbol" > :middleware< / span > [[< span class = "hljs-symbol" > :bonus< / span > < span class = "hljs-number" > 20< / span > ]]}
[< span class = "hljs-string" > " /bonus" < / span > {< span class = "hljs-symbol" > :middleware< / span > [< span class = "hljs-symbol" > :bonus10< / span > ]
< span class = "hljs-symbol" > :get< / span > (< span class = "hljs-name" > < span class = "hljs-builtin-name" > fn< / span > < / span > [{< span class = "hljs-symbol" > :keys< / span > [bonus]}]
{< span class = "hljs-symbol" > :status< / span > < span class = "hljs-number" > 200< / span > , < span class = "hljs-symbol" > :body< / span > {< span class = "hljs-symbol" > :bonus< / span > bonus}})}]]
{< span class = "hljs-symbol" > ::middleware/registry< / span > {< span class = "hljs-symbol" > :bonus< / span > wrap-bonus
< span class = "hljs-symbol" > :bonus10< / span > [< span class = "hljs-symbol" > :bonus< / span > < span class = "hljs-number" > 10< / span > ]}})))
< / code > < / pre >
< p > Works as expected:< / p >
< pre > < code class = "lang-clj" > (< span class = "hljs-name" > app< / span > {< span class = "hljs-symbol" > :request-method< / span > < span class = "hljs-symbol" > :get< / span > , < span class = "hljs-symbol" > :uri< / span > < span class = "hljs-string" > " /api/bonus" < / span > })
< span class = "hljs-comment" > ; {:status 200, :body {:bonus 30}}< / span >
< / code > < / pre >
< p > Router creation fails fast if registry doesn' t contain the Middleware:< / p >
< pre > < code class = "lang-clj" > (< span class = "hljs-name" > < span class = "hljs-builtin-name" > def< / span > < / span > app
(< span class = "hljs-name" > ring/ring-handler< / span >
(< span class = "hljs-name" > ring/router< / span >
[< span class = "hljs-string" > " /api" < / span > {< span class = "hljs-symbol" > :middleware< / span > [[< span class = "hljs-symbol" > :bonus< / span > < span class = "hljs-number" > 20< / span > ]]}
[< span class = "hljs-string" > " /bonus" < / span > {< span class = "hljs-symbol" > :middleware< / span > [< span class = "hljs-symbol" > :bonus10< / span > ]
< span class = "hljs-symbol" > :get< / span > (< span class = "hljs-name" > < span class = "hljs-builtin-name" > fn< / span > < / span > [{< span class = "hljs-symbol" > :keys< / span > [bonus]}]
{< span class = "hljs-symbol" > :status< / span > < span class = "hljs-number" > 200< / span > , < span class = "hljs-symbol" > :body< / span > {< span class = "hljs-symbol" > :bonus< / span > bonus}})}]]
{< span class = "hljs-symbol" > ::middleware/registry< / span > {< span class = "hljs-symbol" > :bonus< / span > wrap-bonus}})))
< span class = "hljs-comment" > ;CompilerException clojure.lang.ExceptionInfo: Middleware :bonus10 not found in registry.< / span >
< span class = "hljs-comment" > ;< / span >
< span class = "hljs-comment" > ;Available middleware in registry:< / span >
< span class = "hljs-comment" > ;< / span >
< span class = "hljs-comment" > ;| :id | :description |< / span >
< span class = "hljs-comment" > ;|--------+--------------------------------------|< / span >
< span class = "hljs-comment" > ;| :bonus | reitit.ring_test$wrap_bonus@59fddabb |< / span >
< / code > < / pre >
< h2 id = "when-to-use-the-registry" > When to use the registry?< / h2 >
< p > Middleware as Keywords helps to keep the routes (all but handlers) as literal data (e.g. data that evaluates to itself) enabling the routes to be persisted in external formats like EDN-files and databases. Duct is a good example where the < a href = "https://github.com/duct-framework/duct/wiki/Configuration" target = "_blank" > middleware can be referenced from EDN-files< / a > . It should be easy to make Duct configuration a Middleware Registry in < code > reitit-ring< / code > .< / p >
< p > The bad thing it' s an extra indirection, making things more complex and removed the default IDE-support of " goto definition" or " look source" .< / p >
< h2 id = "todo" > TODO< / h2 >
< ul >
< li > a prefilled registry of common middleware in the < code > reitit-middleware< / code > < / li >
< / ul >
< / section >
< / div >
< div class = "search-results" >
< div class = "has-results" >
< h1 class = "search-results-title" > < span class = 'search-results-count' > < / span > results matching "< span class = 'search-query' > < / span > "< / h1 >
< ul class = "search-results-list" > < / ul >
< / div >
< div class = "no-results" >
< h1 class = "search-results-title" > No results matching "< span class = 'search-query' > < / span > "< / h1 >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
2018-08-22 19:52:52 +00:00
< a href = "transforming_middleware_chain.html" class = "navigation navigation-prev " aria-label = "Previous page: Transforming Middleware Chain" >
2018-07-28 09:08:17 +00:00
< i class = "fa fa-angle-left" > < / i >
< / a >
2018-08-03 07:10:16 +00:00
< a href = "default_middleware.html" class = "navigation navigation-next " aria-label = "Next page: Default Middleware" >
2018-07-28 09:08:17 +00:00
< i class = "fa fa-angle-right" > < / i >
< / a >
< / div >
< script >
var gitbook = gitbook || [];
gitbook.push(function() {
2018-12-27 14:54:35 +00:00
gitbook.page.hasChanged({"page":{"title":"Middleware Registry","level":"4.9","depth":1,"next":{"title":"Default Middleware","level":"4.10","depth":1,"path":"ring/default_middleware.md","ref":"ring/default_middleware.md","articles":[]},"previous":{"title":"Transforming Middleware Chain","level":"4.8","depth":1,"path":"ring/transforming_middleware_chain.md","ref":"ring/transforming_middleware_chain.md","articles":[]},"dir":"ltr"},"config":{"plugins":["hints","editlink","github","highlight"],"root":"doc","styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"pluginsConfig":{"github":{"url":"https://github.com/metosin/reitit"},"editlink":{"label":"Edit This Page","multilingual":false,"base":"https://github.com/metosin/reitit/tree/master/doc"},"search":{},"hints":{"danger":"fa fa-exclamation-circle","info":"fa fa-info-circle","tip":"fa fa-mortar-board","working":"fa fa-wrench"},"lunr":{"maxIndexSize":1000000,"ignoreSpecialCharacters":false},"fontsettings":{"theme":"white","family":"sans","size":2},"highlight":{},"sharing":{"facebook":true,"twitter":true,"google":false,"weibo":false,"instapaper":false,"vk":false,"all":["facebook","google","twitter","weibo","instapaper"]},"theme-default":{"styles":{"website":"styles/website.css","pdf":"styles/pdf.css","epub":"styles/epub.css","mobi":"styles/mobi.css","ebook":"styles/ebook.css","print":"styles/print.css"},"showLevel":false}},"theme":"default","pdf":{"pageNumbers":true,"fontSize":12,"fontFamily":"Arial","paperSize":"a4","chapterMark":"pagebreak","pageBreaksBefore":"/","margin":{"right":62,"left":62,"top":56,"bottom":56}},"structure":{"langs":"LANGS.md","readme":"README.md","glossary":"GLOSSARY.md","summary":"SUMMARY.md"},"variables":{},"gitbook":"*"},"file":{"path":"ring/middleware_registry.md","mtime":"2018-12-27T14:54:09.606Z","type":"markdown"},"gitbook":{"version":"3.2.3","time":"2018-12-27T14:54:31.557Z"},"basePath":"..","book":{"language":""}});
2018-07-28 09:08:17 +00:00
});
< / script >
< / div >
< script src = "../gitbook/gitbook.js" > < / script >
< script src = "../gitbook/theme.js" > < / script >
< script src = "../gitbook/gitbook-plugin-editlink/plugin.js" > < / script >
< script src = "../gitbook/gitbook-plugin-github/plugin.js" > < / script >
< script src = "../gitbook/gitbook-plugin-search/search-engine.js" > < / script >
< script src = "../gitbook/gitbook-plugin-search/search.js" > < / script >
< script src = "../gitbook/gitbook-plugin-lunr/lunr.min.js" > < / script >
< script src = "../gitbook/gitbook-plugin-lunr/search-lunr.js" > < / script >
< script src = "../gitbook/gitbook-plugin-sharing/buttons.js" > < / script >
< script src = "../gitbook/gitbook-plugin-fontsettings/fontsettings.js" > < / script >
< / body >
< / html >