Notoriously Psychedelic Modules

    lime-router

    0.2.7 • Public • Published

    limerun lime-router

    Build Status NPM NPM NPM

    NPM

    About

    This is a simple router for the limerun Project.

    It routes HTTP and COAP requests, with simple uri templates and parameter/query string parsing.

    NPM Package

    This repository contains a Node Package Manager (NPM) package with a single factory constructor for the routing engine. It is intended for use in Node applications that either run on an web server that conforms to the OWIN-JS specification or run using the OWIN-JS/owin-js HTTP or COAP bridges for use with node http or node-coap respectively.

    Usage

    Installation:

    npm install lime-router
    

    Hello World (using RazorView):

    // Dependencies
    const lime = require('limerun')
        , router = require('limerouter')
        , http = require('http');
     
    // Create Factories
    var app = new lime.app(); 
    var route = router();
     
    // App
    app.use(route);
    route.get('/', function(){
              console.log("GET: " +this.request.path);
              return  razor.renderViewAsync('index.js.html', this);
              });
    http.createServer(app.buildHttp()).listen(8000);

    Methods

    • route.get: Match GET requests
    • route.post: Match POST requests
    • route.put: Match PUT requests
    • route.head: Match HEAD requests
    • route.del: Match DELETE requests
    • route.options: Match OPTIONS requests
    • route.all: Match all above request methods.
    • route.debugget: Match GET for scheme='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 lime-router will simply move to next lime 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() {
    // called if no other get route matched
    this.response.writeHead(404);
    this.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 limerun OWIN-JS ecosystem.

    Install

    npm i lime-router

    DownloadsWeekly Downloads

    0

    Version

    0.2.7

    License

    none

    Last publish

    Collaborators

    • limerun