havana-router
Version:
A simple router for routed response handlers
105 lines (80 loc) • 2.8 kB
Markdown
[](http://badge.fury.io/js/havana-router)
[](https://travis-ci.org/colinmeinke/havana-router)
[](https://david-dm.org/colinmeinke/havana-router.svg)
A simple router for routed response handlers.
Havana router subscribes to the `route.find` event published
by a routed response handler. When it receives a `route.find`
event it will iterate through the array of routes it was
instantiated with, attempting to match on the `url` and
`method`. If it matches a route Havana router will publish a
`route.found` event for the routed response handler to
consume. If it fails to match a route Havana router will
publish a `route.error` event.
```
npm install havana-router
```
```javascript
import Event from 'havana-event';
import Router from 'havana-router';
import Server from 'havana-server';
const event = new Event();
const reporting = {
'level': 2,
'reporter': console.log,
};
const server = new Server({
'event': event,
'reporting': reporting,
});
new Router({
'event': event,
'reporting': reporting,
'routes': [
{
'url': '/',
'method': 'GET',
'content': 'Home page',
},
{
'url': '/about',
'method': 'GET',
'content': 'About page',
},
],
});
// Add a routed response handler here
server.listen( 3000 );
```
Events take the form of
[](https://github.com/colinmeinke/havana-event)
or a library with an interchangeable API.
- `route.found`: Signifies that Havana router has matched a
route, publishing the route data for consumption by a
routed response handler.
- `route.error`: Signifies that Havana router was unable to
match a route.
- `route.find`: Allows a routed response handler to notify
Havana router that it wishes to receive route data that
matches the published `url` and `method`.
Havana router is written using ES2015+ syntax.
However, by default this module will use an ES5
compatible file that has been compiled using
[](https://babeljs.io).
In the `dist` directory there are four files, the default
is `router.server.js`. The default when using a client-side
bundler that supports the
[](https://gist.github.com/defunctzombie/4339901)
spec is `router.browser.js`.
Havana router currently requires the
[](https://babeljs.io/docs/usage/polyfill).
You are expected to supply this yourself. However, as a
courtesy you will also find `router.server.with-polyfill.js`
and `router.browser.with-polyfill.js` in the `dist`
directory.