0.2.2-unstable • Published 1 year ago

koa-ctl v0.2.2-unstable

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

koa-ctl

Class-based Controller Middleware for Koa

koa-ctl lets you organize handlers for multiple types of HTTP requests into one class, which is often conceptually and organizationally helpful when you need to handle different operations on the same type of resource.

If you're familiar with Django's class-based views then koa-ctl should feel familiar.

TypeScript Example

import Koa, {Context, Next} from "koa";
import bodyParser from "koa-bodyparser";
import Router from "koa-router";
import BaseCtl from "koa-ctl";

class FooCtl extends BaseCtl {
  constructor(ctx: Controller, next?: Next ) {
    super(ctx, next);
  }

  async get(ctx: Context, next?: Next) {
    if (ctx.request.query.foo.toLowerCase() == 'foo') {
      return "bar";
    }
    else {
      return "No bar for you";
    }
  }

  async post(ctx: Context, next?: Next) {
    // (POST request data will have been parsed by koa-bodyparser)
    if (ctx.request.body.bar.toLowerCase() == 'bar') {
      return "bat";
    }
    else {
      return "no bat for you";
    }
  }
}

const app = new Koa();
const router = new Router();
router.all('/foo', FooCtl.go());

app.use(bodyParser());
app.use(router.routes())
app.use(router.allowedMethods())
app.listen(3000);

Installation

# yarn
yarn add koa-ctl

# npm
npm install koa-ctl

TypeScript

koa-ctl is written in TypeScript from the ground up and includes its own type definitions.

Dependencies

If you do plan to use TypeScript, you'll want to include the @types/koa package as a dev dependency for your project:

# yarn
yarn add -D @types/koa
# npm
npm install --save-dev @types/koa

Development

# Clone the repository:
git clone https://github.com/mystery-house/koa-ctl.git

# Install dependencies
cd koa-ctl
yarn install

# Run tests
yarn test

# Build
yarn build

Caveat

This project has not been heavily used yet and will likely undergo multiple changes on its way to a stable release.