0.1.0 • Published 8 years ago

router-decorator v0.1.0

Weekly downloads
2
License
MIT
Repository
github
Last release
8 years ago

node-router-decorator

Simple router ES7 decorators for Node.js.

This library implemented on top of the ES7 decorators proposal. Which can only be used with transpilers such as Babel.

Installation

npm install --save router-decorator

Usage

Use in Node.js

import http from 'http';
import {router, route} from 'router-decorator';

function setHeaders(req, res, next) {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  next();
}

@router
class MyApp {
  @route('/', setHeaders)
  index(req, res) {
    res.end('Hello World\n');
  }

  @route('/users/:userId', setHeaders)
  user(req, res) {
    res.end(`Hello ${req.params.userId}\n`);
  }

  @route(/^\/posts\/(\d+)/, setHeaders)
  post(req, res) {
    res.end(`Hello ${req.params[1]}\n`);
  }
}

http.createServer(new MyApp()).listen(3000, () => {
  console.log('Example app listening on port 3000');
});

Use with Express

import express from 'express';
import {router, route} from 'router-decorator';

const app = express();

@router
class MyApp {
  @route('/')
  index(req, res) {
    res.send('Hello World\n');
  }

  @route('/users/:userId')
  user(req, res) {
    res.send(`Hello ${req.params.userId}\n`);
  }

  @route(/^\/posts\/(\d+)/)
  post(req, res) {
    res.send(`Hello ${req.params[1]}\n`);
  }
}

app.use(new MyApp('hello'));

app.listen(3000, () => {
  console.log('Example app listening on port 3000');
});

API

@router(options = {})

Class that is marked with this decorator is constructed as router middleware and its annotated methods are registered as routes.

options

NameDescriptionDefault
methodsAllowed HTTP methods.['GET', 'POST', 'PUT', 'DELETE']

@route(matcher, method = 'GET', ...middleware)

Methods marked with this decorator will register a request made with given method HTTP method to a path that matches the given matcher.

matcher

type: string|RegExp|function

Path matcher for the route; can be any of:

  • A string representing a path.
  • A path with named parameter.
  • A regular expression pattern to match paths.
  • A function that returns an array or null taking an argument of path.
Path matcher examples

The following table provides some simple examples of valid path matcher value.

TypeExampleDescription
Path@route('/abcd')This will match paths starting with /abcd.
Named parameter@route('/abcd/:id')This will match paths starting with /abcd, and set a value of the path segment located at the :id to req.params.
Regular expression@route(/\/abc|\/xyz/)This will match paths starting with /abc and /xyz.
Function@route((path) => path.startWith('efg'))This will match paths starting with /efg.

method

type: string

HTTP method for the route. If the asterisk is specified, applies to the all methods that are allowed by the router methods option.

middleware

type: function

Express-style middleware for the route.

License

MIT