What is express-async-handler?
The express-async-handler package is a middleware for Express.js that simplifies error handling in asynchronous route handlers. It allows you to write asynchronous code without having to manually catch errors and pass them to the next middleware.
What are express-async-handler's main functionalities?
Simplified Async Error Handling
This feature allows you to wrap your asynchronous route handlers with the asyncHandler function. If an error occurs, it will automatically be passed to the next middleware, simplifying error handling.
const express = require('express');
const asyncHandler = require('express-async-handler');
const app = express();
app.get('/', asyncHandler(async (req, res, next) => {
const data = await someAsyncFunction();
res.send(data);
}));
app.use((err, req, res, next) => {
res.status(500).send({ error: err.message });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Integration with Existing Middleware
This feature demonstrates how express-async-handler can be integrated with existing middleware like body parsers. It ensures that any errors in the asynchronous route handlers are properly caught and handled.
const express = require('express');
const asyncHandler = require('express-async-handler');
const app = express();
app.use(express.json());
app.post('/data', asyncHandler(async (req, res, next) => {
const data = await saveData(req.body);
res.status(201).send(data);
}));
app.use((err, req, res, next) => {
res.status(500).send({ error: err.message });
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
Other packages similar to express-async-handler
async-express
async-express is another package that provides similar functionality by allowing you to use async/await in your Express route handlers. It automatically catches errors and passes them to the next middleware. Compared to express-async-handler, async-express offers a similar level of simplicity and ease of use.
express-promise-router
express-promise-router is a drop-in replacement for Express's Router that allows you to use promises (including async/await) in your route handlers. It automatically handles rejected promises and passes errors to the next middleware. This package is more comprehensive as it replaces the entire Router, whereas express-async-handler is a middleware function.
Simple middleware for handling exceptions inside of async express routes and passing them to your express error handlers.
Installation:
npm install --save express-async-handler
or
yarn add express-async-handler
Usage:
const asyncHandler = require('express-async-handler')
express.get('/', asyncHandler(async (req, res, next) => {
const bar = await foo.findAll();
res.send(bar)
}))
Without express-async-handler
express.get('/',(req, res, next) => {
foo.findAll()
.then ( bar => {
res.send(bar)
} )
.catch(next);
})
Import in Typescript:
import asyncHandler from "express-async-handler"