tsoaでNitro/H3に対応したいと思い、
いろいろ調べてみたときの備忘録(*´ω`*)
Nitroではファイルシステムベースでルーティングしてくれるが、
tsoaなどルーティングを自動生成したい場合、ちょっと困る。
H3自体にはRouterが存在するので、
NitroのPluginsを使って実現できそう。
ソースはこんな感じ
// plugins/1.routing.ts import { createRouter, eventHandler, lazyEventHandler } from "h3"; export default defineNitroPlugin((nitroApp) => { // routerに登録するroute/handlerのリスト const handlers = [ { route: "/foo", handler: eventHandler(async (event) => ({ nitro: "this is /foo" })), method: "get", }, { route: "/", handler: eventHandler(async (event) => ({ nitro: "this is /" })), method: "get", }, ]; // 各routeをlazyEventHandlerでラップしながら登録 for (const h of handlers) { nitroApp.router.use(h.route, h.handler, h.method as any); }; });
pnpm nitropack build
を実行すると、
.output/server/chunks/nitro/node-server.mjs
が作成される。
ビルドされた結果にも同様の感じで、routes
ディレクトリのファイルを読み取った結果が
routerとして登録されているので、それを参考にしてみた感じ。
(nitropack2.5系とnitropack2.6系で違うっぽいので要注意)
以上!! これで自動生成できそうな気がする(*´ω`*)