Allows you to use async functions or return Promises in your route handlers.
This library wraps the express.Router and allows you to use its complete API.
- Native promises
- Express standard API
- extend-ible class
- Lightweiget (0.7KB)
$ npm install --save express-native-promise-router
or even better with yarn:
$ yarn add express-native-promise-router
const express = require('express');
const PromiseRouter = require('express-native-promise-router');
const app = express();
const router = new PromiseRouter();
app.use(router);
router.get('/', (req, res) => {
return Promise.resolve('demo');
});
app.use((req, res) => {
res.end(res.locals.resolved);
});
Resolved state is being passed through res.locals.resolved
because in most cases you'd like to wrap state and errors in your app's responses.
const express = require('express');
const PromiseRouter = require('express-native-promise-router');
const app = express();
const router = new PromiseRouter();
app.use(router);
router.get('/', async (req, res) => {
return await Promise.resolve('demo');
});
app.use((req, res) => {
res.end(res.locals.resolved);
});
By returning a promise rejections are automatically passed to next().
const router = new PromiseRouter();
app.use(router);
router.get('/users', (req, res) => {
return db.collection('users').find({}).toArray();
});
app.use((error, req, res, next) => {
res.status(500).json({ error });
});
app.use((req, res) => {
res.json({ data: res.locals.resolved });
});
app.get('/users', (req, res, next) => co(function* () {
res.locals.resolved = yield db.collection('users').find({}).toArray();
}).catch(next));
app.use((error, req, res, next) => {
res.status(500).json({ error });
});
app.use((req, res) => {
res.json({ data: res.locals.resolved });
});