Skip to content

Latest commit

 

History

History
170 lines (125 loc) · 3.57 KB

README.md

File metadata and controls

170 lines (125 loc) · 3.57 KB

koatty

Koa2 + Typescript + IOC = koatty.

Use Typescript's decorator implement IOC and AOP.

Version npmnpm Downloads

New features

  • HTTP、HTTPS、HTTP2、gRPC、WebSocket server.✔️
  • Support loading environment configuration, parsing command line parameters (process.argv) and environment variables (process.env).✔️
  • @ExceptionHandler() Register global exception handling.✔️
  • graceful shutdown and pre-exit event.✔️
  • custom decorator based on app events.✔️
  • GraphQL supporting. 💪
  • Multi-protocol server. 💪

Documentation

koatty_doc_CN (In progress💪)

Installation CLI tools

npm i -g koatty_cli

Quick Start

1.Create Project

kt new projectName

2. Install deps

cd ./projectName

npm i

3. Start up

npm run dev

// or
npm start

Code style

default Controller:

import { Controller, Autowired, GetMapping, RequestBody, PathVariable,
 PostMapping, RequestMapping, RequestMethod, Valid, Output } from "koatty";
import { TestDTO } from "../model/dto/TestDTO";
import { TestService } from "../service/TestService";
import { App } from "../App";

@Controller()
export class IndexController {
    app: App;
    ctx: KoattyContext;

    @Autowired()
    private testService: TestService;

    /**
     * constructor
     *
     */
    constructor(ctx: KoattyContext) {
        this.ctx = ctx;
    }

    @RequestMapping("/:name", RequestMethod.ALL)
    async default(@PathVariable("name") @Valid("IsNotEmpty") name: string) {
        try {
            const info = await this.testService.sayHello(name);
            return Output.ok(this.ctx, "success", info);
        } catch (err: Error) {
            return Output.fail(this.ctx, err.message));
        }
    }

    @PostMapping("/test")
    @Validated() //need DTOClass
    test(@RequestParam() params: TestDTO) {
        return Output.ok(this.ctx, "test", params);
    }
}

How to do Unit Testing

only support jest UT framework now

import request from 'supertest';
import { ExecBootStrap } from 'koatty';
import { App } from '../src/App';

describe('UT example', () => {

  let server: any;
  beforeAll(async () => {
    jest.useFakeTimers();
    const appInstance = await ExecBootStrap()(App);
    server = await appInstance.listen();
  });

  afterAll(done => {
    server.close();
    done();
  });

  it('request', async () => {
    const rsp = await request(server).get('/');
    expect(rsp.status).toBe(200);
  });
});

How to debug

if you use vscode , edit the .vscode/launch.json , like this:

{
    "version": "0.2.0",
    "configurations": [
        {
            "type": "node",
            "request": "launch",
            "name": "TS Program",
            "args": [
                "${workspaceRoot}/src/App.ts" 
            ],
            "runtimeArgs": [
                "--nolazy",
                "-r",
                "ts-node/register"
            ],
            "sourceMaps": true,
            "cwd": "${workspaceRoot}",
            "protocol": "inspector",
            "outputCapture": "std",
            "internalConsoleOptions": "neverOpen"
        }
    ]
}

Select TS Program to debug run. Try to call http://localhost:3000/ .

Example

Check out the quick start example.