fastify
v3 は 2023/7 EOF
routing
ファイルに分割したい
plugin として handler を定義して register する形が一般的にか?
plugin
TS
Directory structure
Error
デフォルトのエラーハンドラーに任せる方法がある
カスタマイズする場合は setErrorHandler を定義することが可能
Error handlers are fully encapsulated, so a setErrorHandler call within a plugin will limit the error handler to that plugin's context.
どこまで影響を与えるかは fastify の context のルールにしたがう
Logging
fastify instance の logger を使いたいので、サーバーの初期化は index とは別の server.ts とかで行って、log も server.ts で export するのがよさそう
Test
API を呼び出す部分を、外部ライブラリに頼る必要がない
サーバーを起動しなくてもテストできる
Reply.send() が複数実行される可能性がある場合どのように書くべきか
void を return するべき
code:shell
if (error instanceof GenericError) {
reply.status(error.statusCode).send({ code: error.code, message: error.message });
return; // 当然 return しなければ、下の send まで実行される。ただし、fastify が reseponse が送られているかどうかを管理してくれているので、Reply was already sent というエラーになるのでクライアント側に問題が起きることはない。
}
request.log.fatal(error, error.message);
reply.status(500).send({ code: 'UNKNOWN', message: 'Unknow error occured' });