routing-controllers -like library for the Oak
framework (jsr:@oak/oak
) 🚗 🐿️ 🦕
@Controller("/api/v1/pokemon")
class MyPokedex {
@Get("/:id")
viewEntry(ctx) {
if (ctx.params.id === "0025") return "Pikachu";
}
}
If you're familiar with the npm library routing-controllers, you'll find yourself very much at home.
However, please note that this libray is not meant to be a drop-in replacement for routing-controllers, as it attempts to conform to TC39 Decorators proposal which doesn't support Method Parameter Decorator yet. There's currently no plan to support TypeScript "experimental" decorators, but if you feel strongly for it, please feel free to fork this repo!
Prerequisite: Deno
deno add @dklab/oak-routing-ctrl
// main.ts
import { Application } from "jsr:@oak/oak";
import { useOakServer } from "jsr:@dklab/oak-routing-ctrl";
import { MyController } from "./MyController.ts";
const app = new Application();
useOakServer(app, [MyController]);
await app.listen({ port: 1993 });
// MyController.ts
import {
Controller,
ControllerActionArgs,
Post,
} from "jsr:@dklab/oak-routing-ctrl";
@Controller()
export class MyController {
@Post("/tell/:whom")
@ControllerActionArgs("body")
say(body, ctx) {
const { note } = body;
console.log(`telling ${ctx.params.whom} that "${note}"`);
}
}
deno run -A main.ts
curl localhost:1993/tell/Alice -d'{"note": "Bob is waiting"}'