express-builder
Build express routes automatically and recursively from the file system, with async function middleware support built-in.
Why?
- Convention over configuration
- Avoid writing repetitive route definitions.
- Spend less time making decisions before you get started.
- Spend less time writing boilerplate code and more time writing your application code.
- Forces code splitting in a logical way.
- Reduces the number of merge conflicts.
- Maintain complete flexibility and full control over your routes.
- Allows you to transparently use async functions as middleware out-of-the-box to improve readability and speed up development, without ever touching express's internals.
Installation
npm install express-builder
or
yarn add express-builder
Usage
const path = ;const express = ;const expressBuilder = ; const app = ; ; app;
API
;
- app - express application (required)
- path (string) - ABSOLUTE path of the directory to be recursively read (required)
- options (object) - options object (optional)
options
- include (string|string[]) - micromatch pattern(s) of files to include. Defaults to "**/*.js".
- ignore (string|string[]) - micromatch pattern(s) of files to ignore. Defaults to ["**/__tests__/**/*.js", "**/?(*.)(spec|test).js"].
- prefix (string) - Prefix for the created routes, such as "/api". Defaults to "" (empty string).
- logger (function) - A function to call for each route created. Useful for debugging. Defaults to console.log, use null to disable the logger.
Examples
// routes/index.js module res; // Logs:// index.js => /// get /
// routes/users.js const auth = ; moduleexports = res post: authcheckIfUserIsLoggedIn res ; // Logs:// users.js => /users// get /users// post /users
// routes/users/_userId.js moduleexports = res res res; // Logs:// users/_userId.js => /users/:userId// get /users/:userId// put /users/:userId// delete /users/:userId
// routes/users/_userId/projects.js moduleexports = get: async res post: async throw `post /users//projects` async res ; // Logs:// users/_userId/projects.js => /users/:userId/projects// get /users/:userId/projects// post /users/:userId/projects
// routes/users/_userId/projects/_projectId.js moduleexports = res res res; // Logs:// users/_userId/projects/_projectId.js => /users/:userId/projects/:projectId// get /users/:userId/projects/:projectId// put /users/:userId/projects/:projectId// delete /users/:userId/projects/:projectId
Contribute!
Found an issue or want to add a new feature? Feel free to open an issue or make a pull request!