GithubHelp home page GithubHelp logo

arnauaregall / express-enrouten Goto Github PK

View Code? Open in Web Editor NEW

This project forked from krakenjs/express-enrouten

0.0 2.0 0.0 352 KB

An express route initialization and configuration module.

License: Other

JavaScript 100.00%

express-enrouten's Introduction

express-enrouten

Route configuration middleware for expressjs.

Note: express-enrouten >=1.0 is only compatible with express >=4.0. For express 3.x support, please use express-enrouten 0.3.x.

Build Status NPM version

API

app.use(enrouten(options))

var express = require('express'),
    enrouten = require('express-enrouten');

var app = express();
app.use(enrouten({ ... }));
// or app.use('/foo', enrouten({ ... }));

Configuration

express-enrouten supports routes via configuration and convention.

app.use(enrouten({ directory: 'routes' }));

directory

The directory configuration option (optional) is the path to a directory. Specify a directory to have enrouten scan all files recursively to find files that match the controller-spec API. With this API, the directory structure dictates the paths at which handlers will be mounted.

controllers
 |-user
     |-create.js
     |-list.js
// create.js
module.exports = function (router) {
    router.post('/', function (req, res) {
        res.send('ok');
    });
};
app.use(enrouten({
    directory: 'controllers'
}));

Routes are now:

/user/create
/user/list

index

The index configuration option (optional) is the path to the single file to load (which acts as the route 'index' of the application).

app.use(enrouten({
    index: 'routes/'
}));
// index.js
module.exports = function (router) {

    router.get('/', index);
    router.all(passport.protect).get('/account', account);

    // etc...
};

routes

The routes configuration option (optional) is an array of route definition objects. Each definition must have a path and handler property and can have an optional method property (method defaults to 'GET').

Note that a handler has a different function signature than a controller. While a controller takes a single argument (a router), a handler takes the typical req and res pair.

app.use(enrouten({
    routes: [
        { path: '/',    method: 'GET', handler: require('./routes/index') },
        { path: '/foo', method: 'GET', handler: require('./routes/foo') }
    ]
}));

Named Routes

For index and directory configurations there is also support for named routes. The normal express router that is passed in will always behave as such, but in addition it can be used to name a route, adding the name and path to app.locals.enrouten.routes. For example:

'use strict';

module.exports = function (router) {

    router({ path: '/user/:id', name: 'user-info' })
        .get(function (req, res) {
            res.send('ok');
        });

};

Controller Files

A 'controller' is defined as any require-able file which exports a function that accepts a single argument. Any files with an extension of .js (or .coffee if CoffeeScript is registered) will be loaded and if it exports a function that accepts a single argument then this function will be called. NOTE: Any file in the directory tree that matches the API will be invoked/initialized with the express router object.

// Good :)
// controllers/controller.js
module.exports = function (router) {
    router.get('/', function (req, res) {
        // ...
    });
};

// Bad :(
// Function does not get returned when `require`-ed, use `module.exports`
exports = function (router) {
    // ...
};

// Bad :(
// controllers/other-file-in-same-controller-directory.js
modules.exports = function (config) {
    // `config` will be an express Router
    // ...
};

// Acceptable :)
// controllers/config.json - A non-js file (ignored)
// controllers/README.txt - A non-js file (ignored)
// controllers/util.js - A js file that has a different API than the spec (ignored)
module.exports = {
    importantHelper: function () {

    }
};

Linting

$ npm run-script lint

Tests

$ npm test

Coverage

$ npm run-script cover && open coverage/lcov-report/index.html

express-enrouten's People

Contributors

alexsantos avatar jasisk avatar jeffharrell avatar lensam69 avatar pvenkatakrishnan avatar simonexmachina avatar sixlettervariables avatar tlivings avatar totherik avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.