@keleran/routing

4.0.0 • Public • Published

@keleran/routing

Utilities to simplify request routing in Node.js projects.
Use ESM, require Node.js 16+.

GitHub Workflow Status

Installation

$ npm i @keleran/routing
import {discover, mount} from '@keleran/routing';

discover

Returns a flat list of route handlers found in the specified directory. If you don't need to work with the list before mounting, use mount directly - it returns the same data.

// [{route: String, method: String, source: Object, pipeline: Array}, ...]
const handlers = await discover({dir: 'routes'});

mount

Reads a file tree and mounts request handlers to the specified Express app.

Request handler is a file named as "HTTP_METHOD.js" (get.js, post.js, etc.) that exports an object with the following properties:

  1. "rateLimit" (optional) - a string or an object that defines rate limiting options for the rate-limiter-flexible library.
    The string is parsed with the ms library, "1s" means "allow 1 request per second from this IP".
    The object is passed to rate-limiter-flexible as is. HTTP 429 will be thrown upon exceeding the limit.
  2. "authorize" (optional) - an authorization function that MUST return true for request to be processed. Otherwise it throws HTTP 403 using the http-errors library. Supplied with the "req" and "res" arguments. Can be async.
  3. "middleware" (optional) - a function or an array of functions that are regular middleware with the "req", "res", and "next" arguments supplied.
  4. "handle" - the main function that handles the request. Supplied with the "req" and "res" arguments. Can be async.

The order of execution matches the order listed above.

Example

The following tree:

routes
├── =
│   └── get.js
└── route
    ├── get.js
    └── =param-name
        └── get.js

With the call:

await mount({dir: 'routes', app, route: '/test'});

Will be mounted like this (notice the order and param/wildcard substitution):

app.get('/test/route', /* handler defined in routes/route/get.js */);
app.get('/test/route/:paramName', /* handler defined in routes/route/=param-name/get.js */);
app.get('/test/*', /* handler defined in routes/=/get.js */);

Readme

Keywords

none

Package Sidebar

Install

npm i @keleran/routing

Weekly Downloads

23

Version

4.0.0

License

MIT

Unpacked Size

10.3 kB

Total Files

4

Last publish

Collaborators

  • keleran