An express package to load routes automatically from file system.
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.


Build Status Coverage Status npm version

An express package to mount routes automatically from file system.



After yarn add express-mount-routes or npm install express-mount-routes --save:

const path = require('path');
const express = require('express');
const routes = require('express-mount-routes');

const app = express();
routes(app, path.join(__dirname, 'controllers'), { urlPrefix: '/api/v1/' });

app.listen(3000, function() {
  console.log('Example app listening on port 3000!');


  app, // app = require('express')();
  path, // *absolute* path to the controllers dir
    // optional parameters, and the 3rd param for this function is not required
    ignore, // files you want to ignore while scanning controllers dir such as index.js, see parameter options of module glob( for more infomation. Default value: ''
    urlPrefix, // prefix for routes, such as /api/v1/. Default value: '/'
    logger, // logger to print mounted routes. Default value: console.log, use `null` to disable log,
    autoPlural // whether apply pluralized file name as part of routes automatically. Default value: true

How to write Controllers

You must export an object whose keys are last part of routes and values are objects (or array) with HTTP method and handlers. For example:

// FileName: controllers/weibo.js

module.exports = {
  // when value is a function or an array of functions, the HTTP method would be default value GET
  '/': (req, res, next) => {
    res.end('Weibos Index');
  // also you can provide one more handlers with an array of functions: these handlers except last one are called middlerwares in Express
  '/getArr': [
    (req, res, next) => {
      res.end('GET for one more handlers');
  // also you can make URL params
  '/:id': {
    // explicitly identifing an HTTP method can never be wrong
    'get': (req, res, next) => {
      res.end(`get weibo: ${}`);
    'post': (req, res, next) => {
      res.end(`post weibo: ${}`);
  // another example for usage of middlerwares
  '/temp': {
    'delete': [
      (req, res, next) => {
        res.myOwnVar = 'this is a middleware.';
      (req, res, next) => {
        res.end(`${res.myOwnVar}ordinary api`);

At last, routes would be combined with ${urlPrefix} + ${pluralized file name of controllers} + ${identified keys}. Therefore, examples above would mount these routes:

GET /api/v1/weibos/
GET /api/v1/weibos/getArr
GET /api/v1/weibos/:id
POST /api/v1/weibos/:id
DELETE /api/v1/weibos/temp

You are welcomed to review test.js and controllers dir in this project for more information of usage.