koa-sailor

koa-sailor is a simple and lightweight package for writing koa controllers faster.


Keywords
koa, decorators, http decorators, koa-controllers, koa-decorators, koa-router-decorators, koa-router, @koa/router, express-decorators, javascript, nodejs, typescript
License
MIT
Install
npm install koa-sailor@1.1.0

Documentation

Koa sailor

koa-sailor is a simple and lightweight package for writing koa controllers faster.


If you encounter any errors or any inconsistencies in the docs please create an issue for them. They will be repaired ASAP 🐶

Installation

with npm:

npm i koa koa-sailor

Usage

Example app using koa-sailor.

import { Context } from 'koa';
import { createApp, Controller, Get, Delete } from 'koa-sailor';

@Controller({
  path: '/users'
})
class UsersController {
  @Get({
    path: '/:id'
  })
  async getUser(ctx: Context) {
    // ...
  }

  @Delete({
    path: '/:id',
    middlewares: [requireAuth]
  })
  async deleteUser(ctx: Context) {
    // ...
  }
}

const app = createApp({
  controllers: [new UsersController()]
});

app.listen(5000, () => {
  console.log('app listening on port 5000');
});

Functionality

createApp

  • controllers - your controllers ([] by default)
  • middlewares - app middlewares ([] by default)
  • other options available in pure Koa

createApp is wrapper function for Koa app. It allows you to inject your controllers and middlewares into it (you can also set middlewares using koa's .use() if you prefer).

Example usage:

import { createApp } from 'koa-sailor';
import logger from 'koa-logger';
import UserController from './controllers/user';

const app = createApp({
  controllers: [new UserController()],
  middlewares: [logger]
});

app.use((ctx, next) => {
  console.log('I am doing nothing! 🍾');
  next();
});

app.listen();

@Controller

  • path - controller path ('/' by default)
  • middlewares - controller middlewares ([] by default)

Controller decorator allows to create a controller from existing class.

Example usage:

import { Controller } from 'koa-sailor';

@Controller({
  path: '/your/path',
  midlewares: [requireAuth]
})
class YourAmazingController {}

@All, @Get, @Post, @Put, @Patch, and @Delete

Route decorators allows you to handle incoming requests

  • path - controller path ('/' by default)
  • middlewares - controller middlewares ([] by default)

Example usage:

import { Context } from 'koa';
import { Controller, Get } from 'koa-sailor';

@Controller({
  path: '/orders'
})
class YourController {
  @Get({
    // path is '/' by default!
    middlewares: [requireAuth]
  })
  async listOrders(ctx: Context) {
    // ...
  }
}

Thanks for reading!