ミドルウェアとルートハンドラ
expressにはミドルウェアとルートハンドラというものがある。
ルートハンドラとは下図のget,postなどに紐づく関数のこと。
function(){}のこと。(レスポンスを返すメイン処理。)
対してミドルウェアとはルートハンドラの前後に行われる処理。
基本はuseを使い、その中でミドルウェアに当たるfunctionを定義する。
例えば下図だったら、”/”に対してpostやgetが送られてきたら
postやgetの処理に行く前、後に行う処理を書く。(データの処理。jsonとか)
流れは
request→middleware→route handler
ミドルウェアは第三引数にnextというのがあり、次のミドルウェアを指定できる。
ルートハンドラにもnextを定義できる。
(nextで例外処理を呼び出したりする。)
nextを呼ばないと次の処理に行かない。
例えば下図は”/”に対してget処理を投げたときコンソールログを出す処理。
上から順番に処理されるので
最初のミドルウェアでコンソールにmiddle oneが記述され
ミドルウェアにnextがあるので次のmiddle twoが処理。
(nextがない場合、middle oneで終わる。handdler処理もされない。)
次のミドルウェアにもnextがあるのでget処理の場合getのhanddlerが実行される。
ルートハンドラ内にはnextを記述していないので以降の処理はされない。
ミドルウェアとルートハンドラで挙動は変わらないが、処理するタイミングと
役割が異なる。
getとuseはパス指定や関数を呼び出すところは同じだが
違いとしてパスの判別が異なる。
useは前方一致。getは完全一致。