node-async-router
v0.0.2
Published
A patched version of pillarjs/router that adds support for ES2016/ES7 async functions.
Downloads
497
Maintainers
Readme
node-async-router
node-async-router is a patched version of pillarjs/router that adds support for ES2016/ES7 async functions.
This module is not a compiler, transpiler, shim, polyfill, or anything else that modifies your code or runtime environment, so if you want to use async functions you will still need to use something like Babel.
Quick Example (Express)
var app = require('express')(),
router = require('node-async-router')();
router.get('/users/:username', async function(req, res, next) {
var user = await UserModel.find({ username: req.params.username });
res.json(user);
});
app.use(router);
app.listen(3000);
Installation
$ npm install node-async-router
Documentation
Overview
node-async-router is a thin wrapper around the router module. Aside from monkey-patching in support for async functions as middleware, it retains 100% compatible with its preexisting API (the bulk of the work is still actually done by the wrapped router module).
Features
As was previously alluded to, node-async-router is designed to enable async functions to be used within router's existing API, and then it gets out of the way.
At present, the following router APIs are extended to support async functions:
router.use([path], ...middleware)
router[method](path, ...[middleware], handler)
router.param(name, param_middleware)
route[method](handler)
route.all(handler)
The API surface is well tested, but please do report any issues, however!
Error Handling
Error handling behaves the same as in the router module, with
the exception that if an async function is used and it resolves to a rejection (error), then that
error is automatically passed on to next()
.
Example:
var app = require('express')(),
router = require('node-async-router')();
router.get('/500-me', async function(req, res, next) {
var err = new Error();
// option 1: use next()
return next(err);
// option 2: throw it
throw err;
// option 3: await on a rejected promise (without catching it)
var user = await somePromiseThatWillBeRejected();
});
router.use(function(err, req, res, next) {
console.error('Unhandled error:', err);
res.status(500).send('My bad!');
});
app.use(router);
app.listen(3000);