Write Express middleware and route handlers using async/await
npm install @awaitjs/expressWrite Express middleware and route handlers using async/await
``javascript
const { addAsync } = require('@awaitjs/express');
// Or, if you want to use wrap()`
const { wrap } = require('@awaitjs/express');
The addAsync() function is the preferred way to add async/await
support to your Express app. This function adds several helper functions
to your Express app.
The addAsync() function adds useAsync(), deleteAsync(), getAsync(),headAsync(), paramAsync(), patchAsync(), postAsync(), and putAsync().
`javascript
const express = require('express');
const app = addAsync(express());
// useAsync() is like app.use(), but supports async functions
app.useAsync(async function(req, res, next) {
await new Promise(resolve => setTimeout(resolve, 50));
});
// getAsync() is like app.get(), but supports async functions
app.getAsync('*', async function(req, res, next) {
throw new Error('Oops!');
});
// Because of getAsync(), this error handling middleware will run.addAsync()
// also enables async error handling middleware.
app.use(function(error, req, res, next) {
res.send(error.message);
});
const server = await app.listen(3000);
`
This module exports a Router() function that is a drop-inexpress.Router()
replacement for , except the returnedgetAsync()
router has , useAsync(), etc.
`javascript
const express = require('express');
const app = express(); // This app isn't async friendly.
const router = Router(); // But this router is.
router.getAsync('/foo', async function(req, res, next) {
throw new Error('Oops!');
});
app.use(router);
app.use(function(err, req, res, next) {
res.send(err.message);
});
const server = await app.listen(3000);
`
acquit:ignore:end
`javascript`
assert.equal(decorateApp, addAsync)
`javascript`
assert.equal(decorateRouter, addAsync)
If you need more fine-grained control than what addAsync() giveswrap()
you, you can use the function. This function wraps an async
Express middleware or route handler for better error handling.
`javascript
const express = require('express');
const app = express();
// wrap() takes an async middleware or route handler and adds a.catch()
// to handle any errors. It also prevents double-callingnext()
// .
app.get('*', wrap(async function(req, res, next) {
throw new Error('Oops!');
}));
// wrap() also supports async error handling middleware.
app.use(wrap(async function(error, req, res, next) {
throw new Error('foo');
}));
app.use(function(error, req, res, next) {
res.send(error.message); // Will send back 'foo'
});
const server = await app.listen(3000);
``