Skip to content

Instantly share code, notes, and snippets.

@azu
Created January 25, 2021 04:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azu/34c45967c915f3e636ea7045ec2685d1 to your computer and use it in GitHub Desktop.
Save azu/34c45967c915f3e636ea7045ec2685d1 to your computer and use it in GitHub Desktop.
express router lazy loading
import express from 'express';
/**
* lazy load express router
* @param resolver
* @example
* ```js
* import { lazyLoad } from "./lazyLoad"
* router.use(
* '/path_to_router',
* lazyLoad(() => import('./path_to_router')),
* );
* ```
*/
export function lazyLoad(resolver: () => Promise<{ default: express.Router } | express.Router>) {
const lazyRouter = express.Router();
let alreadyLoaded = false;
lazyRouter.use((req, res, next) => {
if (alreadyLoaded) {
return next();
} else {
// initial startup
resolver()
.then(router => {
alreadyLoaded = true;
if ('default' in router) {
lazyRouter.use(router.default);
} else {
lazyRouter.use(router);
}
next();
})
.catch(error => {
next(error);
});
}
});
return lazyRouter;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment