Connectの仕組み
Closed this issue · 0 comments
azu commented
#22 の一部
Connectの仕組みについてまとめる。
**的にはRackから来てて、RackのものはPythonのWSGIミドルウェアから影響受けてそう。
おおまかな仕組みとしては
.use(middlware)
はmiddlewareをstackに追加する- リクエストがきたら、stack.forEach(middleware => middleware(req, res, next)) する
というだけ。
エラーハンドリングはmiddlewareの引数の数で分けている。
後はルーティングの仕組みもあるけど、middlewareとは別に関係ないのでこの書籍は省略する。
内容
- middlewareをトレースしてみる
- useがスタックに詰めて、call nextをしている仕組み
- エラーハンドリング middleware
- Rackから影響を受けている話
この仕組みはHTTPサーバのミドルウェアスタックの話と深い関係がありそうなので、
あんまり深追いはしないでHTTPサーバではよくある仕組みだよみたいな話に留める。
koaの場合はgeneratorを使うので少しnext
の扱い方が異なっている。
Connectの場合はnextは終了の的な意味合いだけど、 yeild nextと書けば、そのmiddlewareは前後の処理も書くことができる。
エラーハンドリングはそれを上手く使ってる。
try {
yield next;
} catch (err) {
this.status = err.status || 500;
this.body = err.message;
this.app.emit('error', err, this);
}