azu/JavaScript-Plugin-Architecture

Connectの仕組み

Closed this issue · 0 comments

azu commented

#22 の一部

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

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

pylons_as_onion

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

  • .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);
  }