koa-file-router

1.0.0 • Public • Published

koa-file-router

Generates a koa-router instance from a directory of files, allowing the path to determine the resulting url.

npm version npm dependencies npm dev dependencies build status

Usage

I took a lot of concepts from a similar project I worked on previously.

NOTE: version 1.x is written for koa@2+. If you need support for koa@1 or below, then use v0.x.

Server

var koa = require('koa');
var resources = require('koa-file-router');
var app = koa();
 
var router = resources('./routes');
app.use(router.routes());

Resources Directory

Each module inside the given resource directory generally will map to a route:

File URL
index.js /
users/index.js /users
users/new.js /users/new
users/:user.js /users/:user
_params/user.js (param)

Some things to note:

  • Files named index.js will have the trailing index stripped
  • Files under _params/ will be added as param handlers instead of routes
  • Files with a : prefix will be mounted after static routes. (to keep /users/:user from pre-empting /users/new)

Resource Module

Each resource module can export a function for any valid HTTP method. (the property name should be lowercase)

exports.get = function* () {
  // GET handler...
};
 
exports.post = function* () {
  // POST handler...
};

Param Module

All modules matching _params/*.js will be used as params. These modules should export a single middleware function.

module.exports = function* (next) {
  // param handler...
  yield* next;
};

NOTE: do not nest params in sub-directories within _params, only the base name of the file is considered when naming the param.

API

resources(dir, [options])

This method synchronously traverses the given dir, and returns a koa-router instance.

Available options include:

  • prefix: will be passed to koa-router and used to prefix all URLs

Readme

Keywords

Package Sidebar

Install

npm i koa-file-router

Weekly Downloads

2

Version

1.0.0

License

MIT

Unpacked Size

12.9 kB

Total Files

21

Last publish

Collaborators

  • dominicbarnes