This module contains a Routing capability that extends request processing context with request routing means.
The latter has the following properties:
fullRoute
original route.route
matching route. E.g. a tail section of original route.routeMatch
a successful match of the route(s) against the pattern(s).
The @hatsy/route-match library performs route parsing and matching.
Once Routing capability applied the request processing can be dispatched by matching route by one of the dispatchers.
import { httpListener } from '@hatsy/hatsy';
import { dispatchByName, Routing } from '@hatsy/router';
import { createServer } from 'http';
const server = createServer(
httpListener(
Routing.for(
dispatchByName({
api: apiHandler, // Handle API request under `/api` route
assets: assetsHandler, // Serve static assets under `/assets` route
}),
),
),
);
server.listen(8080);
dispatchByName()
function accepts a map of request processing handlers under route entry names the handler should
serve. The handler receives a request processing context with the rest of the route.
import { httpListener } from '@hatsy/hatsy';
import { dispatchByPattern, Routing } from '@hatsy/router';
import { createServer } from 'http';
const server = createServer(
httpListener(
Routing.for(
dispatchByPattern([
{ on: 'api/v{apiVersion}/**', to: apiHandler },
{ on: '**/*.html', to: pageHandler },
{ on: 'assets/**', to: assetsHandler },
]),
),
),
);
server.listen(8080);
dispatchByPattern()
function accepts dispatch patterns containing a route pattern and handler that serves
the matching route. The handler receives a request processing context with matching route tail.
The route format is URLRoute by default, while route patterns parsed by simpleRoutePattern().
This can be changed by configuring Routing capability.
import { httpListener } from '@hatsy/hatsy';
import { matrixRoute, matrixRoutePattern } from '@hatsy/route-match';
import { dispatchByPattern, Routing } from '@hatsy/router';
import { createServer } from 'http';
import { matrixRoute } from './matrix-route';
const server = createServer(
httpListener(
Routing.with({
buildRoute: ({ requestAddresses: { url } }) => matrixRoute(url),
routePattern: pattern => matrixRoutePattern(pattern),
}).for(
dispatchByPattern([
{ on: 'api;v/**', to: apiHandler }, // API version as matrix attribute
{ on: '**/*.html', to: pageHandler },
{ on: 'assets/**', to: assetsHandler },
]),
),
),
);
server.listen(8080);