route-node
A package to create a tree (trie) of named routes. It is similar to routington except that nodes are not added by splitting path by segment ("/"). Instead the tree is built with the supplied nodes, meaning each node is a valid route.
This module is being used for developing a router, API is subject to change without notice
Install
$ npm install route-node --save
Usage
Building your route tree:
import rootNode from 'route-node';
const usersNode = new RouteNode('users', '/users', [
new RouteNode('list', '/list'),
new RouteNode('view', '/view/:id')
]);
const ordersNode = new RouteNode('orders', '/orders', [
{name: 'pending', path: '/pending'},
{name: 'completed', path: '/completed'},
{name: 'view', path: '/view/:id'}
]);
const rootNode = new RouteNode('', '', [
ordersNode,
usersNode
]);
rootNode.add(new RouteNode('home', '/home'));
You can chain constructor with add
and addNode
functions, making the example above shorter:
const rootNode = new RouteNode()
.addNode('users', '/users'))
.addNode('users.view', '/view/:id')
.addNode('users.list', '/list')
.addNode('orders', '/orders')
.addNode('orders.pending', '/pending')
.addNode('orders.completed', '/completed')
.addNode('orders.view', '/view/:id')
And then build paths, or match your paths against your tree:
rootNode.getPath('users.view');
rootNode.buildPath('users.view', {id: 1});
rootNode.matchPath('/users/view/1');
Trailing slash can be optional:
rootNode.matchPath('/users/view/1');
rootNode.matchPath('/users/view/1/');
rootNode.matchPath('/users/view/1/', { trailingSlash: true });
Query parameters are optional, however a match will fail if the URL contains non-expected query parameters. This can be prevented by setting strictQueryParams
to false.
Related packages
Based on