Nobody Pays (for) Magazines

    express-automatic-routes
    TypeScript icon, indicating that this package has built-in type declarations

    1.1.0 • Public • Published

    express-automatic-routes

    Logo

    JavaScript   TypeScript

    NPM version NPM downloads Known Vulnerabilities GitHub license

    CI Coverage Status

    Thanks to everyone who has starred the project, it means a lot!

    Plugin to handle routes in express automatically based on directory structure.

    📰 Full Documentation

    express-automatic-routes

    🚀 Install

    npm install --save express-automatic-routes

    📘 Usage

    Autoload routes

    import express from 'express'
    import autoroutes from 'express-automatic-routes'
    
    const app = express()
    
    autoroutes(app, {
      dir: './<autoroutes-directory>' // relative to your cwd
    })

    Create file in autoroutes directory

    //file: `<autoroutes-directory>/some/route.js`
    //url:  `http://your-host/some/route`
    
    export default (expressApp) => ({
      get: (request, response) {
        response.status(200).send('Hello, Route').end()
      }
    })

    Using typescript support for module

    //file: `<autoroutes-directory>/some/route.ts`
    //url:  `http://your-host/some/route`
    
    import { Application, Request, Response } from 'express'
    import { Resource } from 'express-automatic-routes'
    
    export default (express: Application) => <Resource> {
      get: (request: Request, response: Response) {
        response.status(200).send('Hello, Route!').end()
      }
    }

    Accepts params in autoroutes

    ℹ️ file/directory name must follow syntax :paramName or {paramName}

    //file: `<autoroutes-directory>/users/{userId}/photos.js`
    //mapped to: `<your host>/users/:userId/photos`
    
    export default (expressApp) => ({
      get: (request, response) => {
          response.end(`photos of user ${request.params.userId}`)
      }
    })

    ▶️ Module definition

    each file must export a function that accept express as parameter, and return an object with the following properties:

    export default (expressApp) => ({
      middleware: [ /* your middlewares */ ]
      delete: { /* your handler logic */},
      get: { /* your handler logic */  },
      head: { /* your handler logic */  },
      patch: { /* your handler logic */  },
      post: { /* your handler logic */  },
      put: { /* your handler logic */  },
      options: { /* your handler logic */  },
    })

    ▶️ Middleware module definition

    the middleware parameter can be one of the following:

    • undefined (just omit it)
    • Middleware function (a function complain to express middleware definition)
    • An Array of Middleware functions

    example:

    ℹ️ simple middleware

    export default (expressApp) => ({
      middleware: (req, res, next) => next()
      /* ... */
    })

    ℹ️ array of middleware

    const m1 = (req, res, next) => next()
    const m2 = (req, res, next) => next()
    
    export default (expressApp) => ({
      middleware: [m1, m2]
      /* ... */
    })

    ▶️ Route definition

    A route can be a function (likes middleware but without next parameter) or an object who has the following properties:

    • middleware // same as module middleware
    • handler // the handler of the function

    examples:

    ℹ️ simple route method

    export default (expressApp) => ({
      get: (req, res) => res.send('Hello There!')
    })

    ℹ️ route method with middleware(s)

    export default (expressApp) => ({
      get: {
        middleware: (req, res, next) => next()
        handler: (req, res) => res.send('Hello There!')
      }
    })

    ▶️ Skipping files

    to skip file in routes directory, prepend the . or _ charater to filename

    examples:

    routes
    ├── .ignored-directory
    ├── _ignored-directory
    ├── .ignored-js-file.js
    ├── _ignored-js-file.js
    ├── .ignored-ts-file.ts
    ├── _ignored-ts-file.ts
    ├── ignored-js-test.test.js
    └── ignored-ts-test.test.ts
    

    ⚠️ also any *.test.js and *.test.ts are skipped!

    this is useful if you want to have a lib file containts functions that don't have to be a route, so just create the file with _ prepending character

    📄 License

    Licensed under MIT

    Contributors

    Thanks goes to these wonderful people (emoji key):


    Giovanni Cardamone

    💻 📖 💡 🚧

    This project follows the all-contributors specification.

    Contributions of any kind welcome!

    Install

    npm i express-automatic-routes

    DownloadsWeekly Downloads

    95

    Version

    1.1.0

    License

    MIT

    Unpacked Size

    22.9 kB

    Total Files

    7

    Last publish

    Collaborators

    • giovanni_cardamone
    • giovannicardamone