1.0.26 • Published 4 years ago

rubbish.magong.io v1.0.26

Weekly downloads
-
License
MIT
Repository
github
Last release
4 years ago

npm version Build Status Coverage Status

one.io

1️⃣ A feature-rich routing middleware for koa2.

Prerequisites

  • Node.js 7+

Install

npm install one.io --save

or

yarn add one.io

Usage

router

Initialize your router in 'app.ts'

// app.ts
import * as Koa from 'koa';
import { Router } from 'one.io';

const App = new Koa();
const router = new Router({
  apiPath: './build/route/api',
  routePath: './build/route/route'
});
router.routes(App);

App.listen(4000);

api route

Build your routes under the directories.

import { validator, ResponseInfo, Token, get, post } from 'one.io';

export default class User {
  // methods: 'get' | 'post' | 'put' | 'head' | 'delete'
  @get<UserPermission>({
    // path: 'user/register',
    permission: UserPermission.none
  })
  @validator({
    name: isAlphanumeric,
    password: isAlphanumeric
  })
  static async userRegister(
    ctx: Context,
    next: Function
  ): Promise<ResponseInfo> {
    const { query } = ctx;
    const { name, password } = query;
    const result: ResponseInfo = await registerUser(name, password);

    return result;
  }
}

page route

Render data for pages.

import { validator, ResponseInfo, Token, get, post, route } from 'one.io';

export default class Index {
  @route<UserPermission>({})
  static async userLogin(ctx: Context, next: Function) {
    const { query } = ctx;
    const { name, password } = query;

    return {
      title: 'one.io'
    };
  }
}

permission

If permission support is needed, you should import class Permission and implement it.

import { Permission } from 'one.io';

export class UserPermission extends Permission {
  constructor(groups: string[]) {
    super(groups);
  }

  async getUserPermissionByName(name: string): Promise<UserPermission> {
    // get permission by user name
  }
}

// then build your permissions.
export const UserPermissions = {
  none: new UserPermission(['none']),
  guest: new UserPermission(['guest']),
  admin: new UserPermission(['admin'])
};

Options

router

  • apiPath: A directory for api routes. Optional, default is './route/api'.
  • pagePath: A directory for page routes. Optional, default is './route/page'.
  • cookies: Set the keys for user name and token. Optional, default is '{ user: 'user', token: 'token' }'

api & page

  • path: Path for the route. Optional, automatically transform from method name.

    For example, a method named 'userRegister' means the route path is '/user/register'

  • permission: Set a permission for a route. Optional, default value is 'undefined'.

Features

  • Parse http request body.
  • Verify Permission and token.
  • Validate request parameters.
  • Written in TypeScript with complete define types.

License

MIT License.