method-routes
v0.1.0
Published
A simple route and method matcher for nodejs
Downloads
5
Maintainers
Readme
Method Routes
A simple way to match route pattern and HTTP method with an action.
Installation
npm install method-routes
Usage
Simply import and create routes;
let Routes = require('method-routes');
let routes = new Routes();
Add Routes
Add route patterns for a particular HTTP method by using a string representing a url to match and an action that will return if matched.
The url string (route pattern) should follow the minimatch documentation for matching.
Method is a standard HTTP method. One of POST, GET, PUT, PATCH, DELETE
. For ease of use there are static variables available:
Routes.POST
Routes.GET
Routes.PUT
Routes.PATCH
Routes.DELETE
Route patterns use a string like ['/url/route/*/to/match', action]
Action is a function callback. This function will be returned on a successful match.
let main_controller = require('./controllers/main');
// route, action
routes.addRoute('GET:/index.html', main_controller.index);
// OR
routes.addMethodRoute(Routes.GET, '/index.html', main_controller.index);
// [method, route,action], [method, route,action]
routes.addRoutes([
['POST', '/blog/articles/*', main_controller.articles],
[Routes.PUT, '**', main_controller.default]
]);
routes.hasRoute('GET:/index.html'); // true
// OR
routes.hasMethodRoute(Routes.GET, '/index.html') // also true
// returns main_controller.articles, undefined if not found
let action = routes.getAction('GET:/blog/articles/cheese');
// OR
let action = routes.getMethodAction(Routes.GET, '/blog/articles/cheese');
NOTE:
The order in which route patterns are added is important. In the example above you see the route **
which would match ANY AND ALL routes. However since it is added last the first two routes will be checked first for a match.
Duplicate route patterns will log a warning and be ignored (since they would never be reached anyway)
QUERY STRINGS:
Query strings are ignored when adding a route (addRoute(...)
) and calling hasRoute(...)
, getAction(...)
, and removeRoute(...)
. Only the path will be considered in the match.
View Routes
You can get an array of all the route patterns currently in the routes:
routes.routes();
You can get an array of all the actions currently in the routes:
routes.actions();
Get the action if the passed route string matches a route pattern for a particular method. Undefined if not found:
routes.getAction('DELETE:/...');
// OR
routes.getMethodAction(Routes.DELETE, '/...');
Get the route pattern that the passed route string matches for a particular method. Undefined if not found:
routes.getRouteMatch('PUT:/...');
// OR
routes.getMethodRouteMatch(Routes.PUT, '/...');
View a neater layout of the current route patterns in the router. If the function passed is a named function statement the function name will show. Otherwise the function will print.
routes.toString();
// METHOD ROUTE ACTION
// GET /index.html index
// POST /blog/article/* articles
// PUT ** default …
Named function statements (as opposed to a function literal) will help with this table. If using a function constructor then using a named function will be helpful:
Controller = new function() {
this.index = function index() {
...
};
this.create = function() {
};
};
let main_controller = new Controller();
main_controller.index.name; // index
main_controller.create.name; // ''
Remove Routes
You can remove an individual route pattern:
routes.removeRoute('POST:/blog/articles/*');
// OR
routes.removeMethodRoutes(Routes.POST, '/blog/articles/*');
You can remove all routes:
routes.clearAll();
Extending Routes
You can extend the routes using the class extend syntax available in node >6.11
const MethodRoutes = require('method-routes');
class MyRoutes extends MethodRoutes {
// override functions as you wish
...
};
Errors
The following are functions and conditions that will throw errors:
addRoute(route, action)
action
is undefined/null or is not a function.
addMethodRoute(method, route, action)
- Sam as
addRoute()
function
- Sam as
addRoutes(list)
list
is undefined/null or is not an array.
Anytime
method
is not a string or part ofPOST, GET, PUT, PATCH, DELETE
route
is undefined/null, is not a type string or does not have a valid method at the beginning with followed by a colon and the route.