Last Updated: February 25, 2016
· matthewhudson

Auto-loading express middleware, coffee-style

I like each of my middleware functions to be in separate files, and consolidated into a single directory called, you guessed it, 'middleware'.

I then simply require() my auto-loader, and all my middleware is automagically loaded:

console.log 'Exporting all custom middleware'

fs        = require 'fs'
path      = require 'path'
basename  = path.basename

exports.middleware = {}

# Auto-load middleware with getters.
fs.readdirSync("#{__dirname}/middleware").forEach (fileName) ->
  load = ->
    require "./middleware/#{moduleName}"
  return  unless /\.coffee$/.test(fileName)

  moduleName = basename(fileName, '.coffee')
  exports.middleware.__defineGetter__ moduleName, load
  exports.__defineGetter__ moduleName, load