hurt
Version:
HTTP and SPA routing using RFC 6570 URI templates
80 lines (59 loc) • 2.29 kB
Markdown
# hurt
> **H**TTP routing with **UR**I **t**emplates
After all of two minutes browsing [npmjs.org][npm-search] I could not find what
I was looking for, so I built it myself. How hard can it be, right?
## Motivation
Not very. [RFC 6570][] specifies URI templates, of which there are
[a bunch][6570libs] of very nice implementations. However, at the time of
writing, full featured URI template routers for [express][], [connect][] or
[restify][] were hard to come by.
So what's so great about URI templates then? For one, they have a syntax to
properly describe recursive paths and arguments. This makes them great for
describing APIs. Actually, you might have seen them, for example in GitHubs API
documentation. Also, when you're writing a RESTful API you'll often write URLs
into your service's responses. Instead of hard-coding the URLs or using some
other way to generate them, you can just use the router to give you a route,
because if any part of your software knows which URLs are reachable, it's your
router.
## Usage
So what does `hurt` look like? _Glad you asked!_
Let's start this of with an example:
```js
import hurt from 'hurt';
import { Users } from './app/model';
const router = hurt();
router.get('/users/{name}', function (req, res, next) {
const { name } = req.params;
const user = Users.get({ name });
res.send(200, user);
});
router.get('/users{?q,page}', function (req, res, next) {
const { q, page = 0 } = req.params;
const length = 10;
const start = page * length;
const users = Users.find({ q }).slice(start, length);
res.send(200, users);
});
```
Just like so many other routers, except with RFC 6570 URI templates. There are
some nice bonuses though. Check out the docs.
## Installation
### npm
```console
npm install hurt
```
### bower
```console
bower install hurt
```
### html
```console
curl -o hurt.min.js https://github.com/jpommerening/hurt/releases/download/v0.1.0/hurt.min.js
echo '<script src="hurt.min.js"></script>' >> index.html
```
[npm-search]: https://www.npmjs.com/search?q=6570+router
[RFC 6570]: https://tools.ietf.org/html/rfc6570
[6570libs]: https://github.com/medialize/URI.js#uri-template
[express]: https://expressjs.com
[connect]: https://senchalabs.github.io/connect
[restify]: https://restify.com