iopa-router
v1.4.2
Published
Lightweight router for the IOPA Stack for Node.js
Downloads
40
Readme
iopa-router
About
iopa-router
is lightweight router for the IOPA framework
It routes HTTP, COAP and MQTT requests, with simple uri templates and parameter/query string parsing.
Usage
Installation:
npm install iopa-router
Hello World
const Router = require('iopa-router'),
iopa = require('iopa'),
http = require('http'),
iopaConnect = require('iopa-connect')
var app = new iopa.App();
app.use(Router);
app.get('/hello', function(context, done){
context.response["iopa.Body"].end("<HTML><HEAD></HEAD><BODY>Hello World</BODY>");
return done();
});
app.get('/goodbye', function(context, done){
context.response["iopa.Body"].end("<HTML><HEAD></HEAD><BODY>Goodbye World</BODY>");
return done();
});
http.createServer(app.buildHttp()).listen(3000);
Methods
route.get
: MatchGET
requestsroute.post
: MatchPOST
requestsroute.put
: MatchPUT
requestsroute.head
: MatchHEAD
requestsroute.del
: MatchDELETE
requestsroute.options
: MatchOPTIONS
requestsroute.all
: Match all above request methods.route.debugget
: MatchGET
forscheme='debug'
requests
API
If you want to grab a part of the path you can use capture groups in the pattern:
route.get('/id/{customer}', function() {
var base = this.Params.base; // ex: if the path is /id/bar, then customer = bar
Query paramaters in the url are also added to owin.Params
:
route.get('/id/{customer}', function() {
var base = this.Params.base; // ex: if the path is /id/bar?name=dog, then customer = bar
var name = this.Params.name; // ex: if the path is /id/bar?name=dog, then name = dog
});
The capture patterns matches until the next /
or character present after the group
route.get('/{x}x{y}', function() {
// if the path was /200x200, then his.Params = {x:'200', y:'200'}
});
Optional patterns are supported by adding a ?
at the end
route.get('/{prefix}?/{top}', function() {
// matches both '/a/b' and '/b'
});
If you want to just match everything you can use a wildcard *
which works like posix wildcards
route.get('/{prefix}/*', function() {
// matches both '/a/', '/a/b', 'a/b/c' and so on.
// the value of the wildcard is available through req.params.wildcard
});
If the standard capture groups aren't expressive enough for you can specify an optional inline regex
route.get('/{digits}([0-9]+)', function() {
// matches both '/24' and '/424' but not '/abefest' and so on.
});
You can also use regular expressions and the related capture groups instead:
route.get(/^\/foo\/(\w+)/, function(req, res) {
var group = req.params[1]; // if path is /foo/bar, then group is bar
});
Error handling
By default iopa-router will simply move to next iopa middleware function if no route matched.
The router is a Promise/A compatible async function that respects error bubbling, but has no specific handling built in.
You can provide a catch-all to a given route that is called if no route was matched:
route.get(function(context) {
// called if no other get route matched
context.response.writeHead(404);
context.response.end('no GET handler found');
});
Credits
This router was ported from gett/router which was developed under MIT license by Mathias Buus Madsen and Ian Jorgensen.
It has been developed to be a core component of the IOPA ecosystem.