A middleware for Express.js applications that captures potential typos in your route paths and redirects (or suggests) the correct path to the user using the Levenshtein string similarity algorithm.
In the following example, the user will be redirected to /about
if they visit
/abotu
or /abuot
. It will also respect URL parameters, so /prodcts/1/ifo
will redirect to /products/1/info
.
import routeCorrector from 'route-corrector';
app.use(routeCorrector(app));
app.get('/about', (req, res) => res.send('About Page'));
app.get('/products/:productId/info', (req, res) => res.send(`Product ${req.params.productId}`));
app.listen(3000);
If you're aware of commonly mistyped paths or have restructured your application and want to manually specify typo redirects, use custom redirects:
import routeCorrector from 'route-corrector';
app.use(routeCorrector(app, {
customRedirects: {
'/me': '/dashboard'
}
}));
For granular control over which routes should be processed by the middleware, use the whitelist (to exclusively include paths) and blacklist (to exclude paths):
import routeCorrector from 'route-corrector';
app.use(routeCorrector(app, {
whitelist: ['/about', '/contact'],
blacklist: ['/admin']
}));
In suggest mode, the middleware doesn't redirect. Instead, it sets the suggested
route in res.locals.suggestedRoute
.
import routeCorrector from 'route-corrector';
app.use(typoRedirectMiddleware(app, {
suggestOnly: true
}));
app.use((req, res, next) => {
if (res.locals.suggestedRoute) {
res.send(`Did you mean ${res.locals.suggestedRoute}?`);
} else {
next();
}
});
Creates and returns the middleware.
Type: Express.Application
Type: object
Type: number
Define the distance threshold below which a typo suggestion/redirect occurs. For
Levenshtein, a common value is around 2
or 3
, depending on the average
length of your routes.
Default:
- Levenshtein:
2
Type: Record<string, string>
A map of mistyped paths to their correct paths.
Type: string[]
List of paths that should only be processed by the middleware.
Type: string[]
List of paths that should be skipped by the middleware.
Type: boolean
When set to true, the middleware won't redirect but instead set the suggested
path in res.locals.suggestedRoute
.