FastifyのHooks
FastifyにはHooksといってイベント発火時に任意の処理を実行できる仕組みがある。 イベントの種類は次の通り
onRequest
preParsing
preValidation
preHandler
preSerialization
onError
onSend
onResponse
onTimeout
Hookからレスポンスを返して、それ以降のライフサイクルを止めることもできる。
https://gyazo.com/d3529554aeded092026011ad84bcebab
Hookからレスポンスを返す際には注意点がある。以下の注意点を守らないと、
レスポンスを返した後もライフサイクルが続く・止まらなくなることがある。
リクエストに対する処理が2回実行されることがある(例えばデータベースのトランザクションが2回実行されると困る)。
注意点の内容
Promiseを返さない関数を使う場合、reply.send()を呼び出してレスポンスを返す。
Promiseを返す関数を使う場合、
reply.send()を呼び出してレスポンスを返す。
reply.send()の呼び出しがpromiseチェーンに含まれていない場合、それを呼び出した後にreturn replyする。
returnする前に・promiseが解決される前にreply.send()する。
Promiseを返さない関数を使ったHookとPromiseを返す関数を使ったHookを混ぜてはいけない。
Streamで返したければPromiseを返す関数を使わないほうが良い。
Hookはスコープごとに設定することができる。