evoke
v1.3.0
Published
HTTP Router
Downloads
3
Readme
evoke
hapijs/call for browsers. Supports all modern browsers, tested on IE 9+, Chrome 16+, FireFox 5+, Safari 6+, Opera 12+.
Path matching order
The router iterates through the routing table and executes the first (and only the first) matching route. Route matching is done based on the combination of the request path and the HTTP verb (e.g. 'GET, 'POST'). The query is excluded from the routing logic. Requests are matched in a deterministic order where the order in which routes are added does not matter.
Routes are matched based on the specificity of the route which is evaluated at
each segment of the path. Each path is split into its segment (the parts
separated by '/'
). The segments are compared to the routing table one at a
time and are matched against the most specific path until a match is found. If
no match is found, the next match is tried.
When matching routes, string literals (no path parameter) have the highest
priority, followed by mixed parameters ('/a{p}b'
), parameters ('/{p}'
), and
then wildcard (/{p*}
).
Note that mixed parameters are slower to compare as they cannot be hashed and require an array iteration over all the regular expressions representing the various mixed parameter at each routing table node.
Catch all route
If the application needs to override the default Not Found (404) error
response, it can add a catch-all route {method: '*', path: '/{p*}'}
for a
specific method or all methods. Only one catch-all route can be defined per
router.
License
evoke is released under the terms of the BSD-3-Clause license.
Thanks
Thanks to Eran Hammer and @hapijs community for the quality engineering behind hapi.
Thanks to BrowserStack for providing the infrastructure that allows us to run our build in real browsers.