Closed azu closed 9 years ago
Node.jsのモジュールで.use(plugin)
的なものが結構多い気がするけど、
これは何が起源なんだろ? connectが最初なのかな?
connectのuseはRack DSL起源ではないでしょうか? 実践Node.js プログラミングのP149に
Connect ミドルウェアのコンセプトは、もともと Ruby の Rack フレームワークの影響を受けている。
だから Rack と非常によく似たモジュールインタフェースを提供するが、Node はストリーミング方式なので
API は共通ではない。
という記述がありました。
Ruby - Rack解説 - Rackの構造とRack DSL - Qiitaに、useメソッドを使うと
run Rack::ETag.new(
Rack::Deflater.new(
Rack::Directory.new 'public'
)
)
を次のように書ける
use Rack::ETag
use Rack::Deflater
run Rack::Directory.new 'public'
という例がありました。とてもconnectぽいと思います。
@ledsun ありがとうございます。なるほど。 たしかにconnectのはrackに影響受けてそうですね。
package.jsonのkeywordsにもrack
があったりしました
コールドリーディング v2
middleware patternと呼ばれる事がある感じ
connectはmiddleware間の依存関係とか定義ないので、色々自分でガンバってやる必要があって、細かいのは実装でやってね的な感じっぽいな
Node.js - 逆引きメモ:expressの使い方 - Qiitaはmiddlewareの考え方が簡単にまとまってる。
rackの実装
ミドルウェアとは何かを一言で言うと,「別なアプリケーションをラップして,リクエストやレスポンスを加工したり,処理を切り換えたりするRackアプリケーション」です -- http://gihyo.jp/dev/serial/01/ruby/0025
このミドルウェアの連鎖をミドルウェアスタックといいます。 -- 第3回 WSGIミドルウェアの作成:WSGIとPythonでスマートなWebアプリケーション開発を|gihyo.jp … 技術評論社
Rack middlewareの仕組みの元ネタはPythonのWSGI middlewareという感じなのかな
Connectに統一しよう #48
middlewareスタックなやつ、直接オブジェクトを変更しないで、抽象オブジェクトを入れて編集させれば矛盾ある変更とかの検知ができるようになる気がする
ひとまず書けたのでCloseします
微妙に曖昧なところもあるので Pull Request歓迎です
middlewareの仕組み
Connectのアーキテクチャ
URL: https://github.com/senchalabs/connect
どう書ける?
どういう仕組み? #57
.use(middlware)
はmiddlewareをstackに追加するstack.forEach(middleware => middleware(req, res, next))
するどういう事に向いてる?
この仕組みを使ってるもの
チェックリスト