1.8.0 • Published 3 months ago

koa-object-router v1.8.0

Weekly downloads
-
License
MIT
Repository
-
Last release
3 months ago

koa-object-router

A router for koa that can optionally be loaded from the filesystem.

Setup

npm i koa-object-router

Usage

const Koa = require("koa");
const { router } = require("koa-object-router");

const app = new Koa();
app.use(
  router({
    /* config */
  })
);

Config

At least routesDirectory or routers should be specified.

interface RouterConfig {
  // Absolute path to a directory where route files are located
  routesDirectory?: string;
  // Object containting routers and routes
  routers?: Record<string, { options?: RouterOptions; routes: RouterRoutes }>;
  // If no route is specified, pass control to the next piece of koa middleware (default false)
  passThrough?: boolean;
  // Prefixes all routes with the specified string
  prefix?: string;
  // Exclude router files that match the specified regex
  excludeRegexString?: string;
  // Specifies which router is used as the index (defaults to "index")
  index?: string;
  // A function to be called any time a non 4xx HTTP error is thrown from a route
  errorHandler?: (error: unknown) => void;
}

Router Options

These options can be associated with a router and applied to all routes within the router.

interface RouterOptions {
  // Middleware to be run before each route in the router
  middleware?: MiddlewareHandler[];
  // Prefixes all routes within the router with the specified string
  prefix?: string;
  // A number dictating the priority of this router if it has conflicting routes with another router. Lower routers have higher priority.
  priority?: number;
}

Examples

Load routes from an object.

server.js

const Koa = require("koa");
const { resolve } = require("path");
const { router } = require("koa-object-router");

const app = new Koa();
app.use(bodyParser());
app.use(
  router({
    routers: {
      index: {
        routes: { "GET /": () => "results from your index route" },
      },
      users: {
        routes: {
          "GET /": async () => {
            return [
              // users
            ];
          },
          "POST /": async (ctx) => {
            const user = await User.create(ctx.body);
            return user;
          },
        },
      },
    },
  })
);
app.listen(3000);

Load routes from the filesystem.

In this example the filesystem should look something like the tree below.

.
└── src/
    ├── server.js
    └── routes/
        ├── index.js
        └── users.js

server.js

const Koa = require("koa");
const { resolve } = require("path");
const { router } = require("koa-object-router");

const app = new Koa();
app.use(bodyParser());
app.use(
  router({
    routesDirectory: resolve(__dirname, "routes"),
  })
);
app.listen(3000);

routes/index.js

exports.routes = {
  "GET /": () => "results from your index route",
};

Options

1.8.0

3 months ago

1.7.0

3 months ago

1.6.0

3 months ago

1.5.0

3 months ago

1.4.3

7 months ago

1.4.2

7 months ago

1.3.2

1 year ago

1.3.1

1 year ago

1.3.0

1 year ago

1.2.4

1 year ago

1.2.3

1 year ago

1.2.2

1 year ago

1.2.1

1 year ago

1.2.0

1 year ago

1.1.0

1 year ago

1.0.3

1 year ago

1.0.2

1 year ago

1.0.1

1 year ago

1.0.0

1 year ago