メインコンテンツまでスキップ

ハンドラー

controller.ts
import { defineController } from './$relay';

export default defineController(() => ({
get: () => ({ status: 200, body: 'Hello' }),
post: {
validators: {
query: z.object({ ... }),
body: z.object({ ... }),
},
schemas: {
response: { 201: { type: 'object', properties: { ... } } },
},
hooks: {
preValidation: [],
preHandler: (req, _, done) => { ...; done(); },
},
handler: async ({ query: { foo }, params: { bar }, body }) => {
const baz = await createBaz(foo, bar, body);
if (!baz) return { status: 400 };
return { status: 201, body: baz };
},
},
}));

ハンドラーは、リクエストを引数としレスポンスを戻り値として返す関数です。 ハンドラーはコントローラーレベルでのみ定義できます。


ハンドラーの定義方法を探していますか?

ハンドラーの定義方法はルーティングページにあります。以下のリンクから defineController() について参照してください。

関数 ServerHandler

引数の型

  • オブジェクト RequestParams & AdditinalRequest
    • query : query
    • headers : reqHeaders
    • params : URL Params
    • body : reqBody

戻り値の型

  • オブジェクト ServerResponse | promise Promise<ServerResponse>
    • status : status
    • body : resBody
    • headers : resHeaders

RequestParams 型と ServerResponse 型は API 型定義に基づいて決定されます。

async を用いて Promise となった場合、ServerHandlerPromise になります。