express-builder

1.0.0 • Public • Published

express-builder

npm license Travis branch Codecov branch Greenkeeper badge

NPM

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 = require("path");
const express = require("express");
const expressBuilder = require("express-builder");
 
const app = express();
 
expressBuilder(app, path.join(__dirname, "routes"));
 
app.listen(3000, () => console.log("Example app listening on port 3000!"));

API

expressBuilder(app, path, options);
  • 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.exports = (req, res) => res.send("get /");
 
// Logs:
//   index.js => /
//   get /
// routes/users.js
 
const auth = require("../utils/auth");
 
module.exports = {
  get: (req, res) => res.send("get /users"),
  post: [
    auth.checkIfUserIsLoggedIn,
    (req, res) => res.send("post /users"),
  ],
};
 
// Logs:
//   users.js => /users
//   get /users
//   post /users
// routes/users/_userId.js
 
module.exports = {
  get: (req, res) => res.send(`get /users/${req.params.userId}`),
  put: (req, res) => res.send(`put /users/${req.params.userId}`),
  delete: (req, res) => res.send(`delete /users/${req.params.userId}`),
};
 
// Logs:
//   users/_userId.js => /users/:userId
//   get /users/:userId
//   put /users/:userId
//   delete /users/:userId
// routes/users/_userId/projects.js
 
module.exports = {
  get: async (req, res) => res.send(await Promise.resolve(`get /users/${req.params.userId}/projects`)),
  post: [
    async (req, res) => throw new Error(`post /users/${req.params.userId}/projects`),
    async (err, req, res, next) => res.send(await Promise.resolve(err.message)),
  ]
};
 
// Logs:
//   users/_userId/projects.js => /users/:userId/projects
//   get /users/:userId/projects
//   post /users/:userId/projects
// routes/users/_userId/projects/_projectId.js
 
module.exports = {
  get: (req, res) => res.send(`get /users/${req.params.userId}/projects/${req.params.projectId}`),
  put: (req, res) => res.send(`put /users/${req.params.userId}/projects/${req.params.projectId}`),
  delete: (req, res) => res.send(`delete /users/${req.params.userId}/projects/${req.params.projectId}`),
};
 
// 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!

Package Sidebar

Install

npm i express-builder

Weekly Downloads

9

Version

1.0.0

License

ISC

Unpacked Size

17.3 kB

Total Files

21

Last publish

Collaborators

  • makay