https://github.com/magicdawn/express-modern
use async function or generator function with express
https://github.com/magicdawn/express-modern
Last synced: about 1 year ago
JSON representation
use async function or generator function with express
- Host: GitHub
- URL: https://github.com/magicdawn/express-modern
- Owner: magicdawn
- License: mit
- Created: 2016-03-21T15:01:24.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2022-11-04T09:52:58.000Z (over 3 years ago)
- Last Synced: 2025-03-31T12:58:03.336Z (over 1 year ago)
- Language: JavaScript
- Homepage:
- Size: 42 KB
- Stars: 9
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# express-modern
use async function or generator function with express
[](https://travis-ci.org/magicdawn/express-modern)
[](https://coveralls.io/github/magicdawn/express-modern?branch=master)
[](https://www.npmjs.com/package/express-modern)
[](https://www.npmjs.com/package/express-modern)
[](http://magicdawn.mit-license.org)
## Install
```js
npm i express-modern --save
```
## supported case
- normal handler `app.get('/', modern((req, res, next) => { ... }))`
- error handler `app.get('/', modern((err, req, res, next) => { ... }))`
- param handler `app.param('user', modern((req, res, next, user) => { ... }))`
## API
```js
const modern = require('express-modern')
```
### generator function
```js
const app = express();
app.get('/', modern(function * (req, res, next) {
yield new Promise(r => setTimeout(r, 10));
res.send('generator function');
}));
const res = yield request(app)
.get('/')
.endAsync();
res.text.should.match(/generator/);
```
the generator function will be wrap via `co.wrap`. and the `modern` function
will take care of the arity of the handler. see http://expressjs.com/en/guide/error-handling.html
### async function
```js
const app = express();
app.get('/', modern(async function(req, res, next) {
await new Promise(r => setTimeout(r, 10));
res.send('async function');
}));
const res = yield request(app)
.get('/')
.endAsync();
res.text.should.match(/async/);
```
the async function will be called & the rejected value will be passed to `next` automatically
### normal function
```js
const app = express();
app.get('/', modern((req, res, next) => {
res.send('normal function');
}));
const res = yield request(app)
.get('/')
.endAsync();
res.text.should.match(/normal/);
```
the `modern` function does nothing on normal function.
## Changelog
[CHANGELOG.md](CHANGELOG.md)
## License
the MIT License http://magicdawn.mit-license.org