express-builder
Build express routes automatically and recursively from the file system, with async function middleware support built-in.
Last updated 2 years ago by makay .
ISC · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install express-builder 
SYNC missed versions from official npm registry.

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!

Current Tags

  • 1.0.0                                ...           latest (2 years ago)

2 Versions

  • 1.0.0                                ...           2 years ago
  • 0.1.0                                ...           2 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (1)
Dev Dependencies (9)
Dependents (0)
None

Copyright 2014 - 2017 © taobao.org |