azu / JavaScript-Plugin-Architecture

JavaScriptプラグインアーキテクチャの本
https://azu.github.io/JavaScript-Plugin-Architecture/
MIT License
250 stars 12 forks source link

Connectの仕組み #57

Closed azu closed 9 years ago

azu commented 9 years ago

22 の一部

Connectの仕組みについてまとめる。

思想的にはRackから来てて、RackのものはPythonのWSGIミドルウェアから影響受けてそう。

pylons_as_onion

おおまかな仕組みとしては

というだけ。 エラーハンドリングはmiddlewareの引数の数で分けている。

後はルーティングの仕組みもあるけど、middlewareとは別に関係ないのでこの書籍は省略する。

内容

この仕組みは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);
  }