Koa2 + Typescript + IOC = koatty.
Use Typescript's decorator implement IOC and AOP.
- 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. 💪
koatty_doc_CN (In progress💪)
npm i -g koatty_cli
kt new projectName
cd ./projectName
npm i
npm run dev
// or
npm start
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);
}
}
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);
});
});
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/
.
Check out the quick start example.