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.
$ npm install --save router-decorator
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');
});
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');
});
Class that is marked with this decorator is constructed as router middleware and its annotated methods are registered as routes.
Name | Description | Default |
---|---|---|
methods |
Allowed HTTP methods. | ['GET', 'POST', 'PUT', 'DELETE'] |
Methods marked with this decorator will register a request made with given method
HTTP method to a path that matches the given 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.
The following table provides some simple examples of valid path matcher value.
Type | Example | Description |
---|---|---|
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/)` |
Function | @route((path) => path.startWith('efg')) |
This will match paths starting with /efg . |
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.
type: function
Express-style middleware for the route.
MIT