node.jsのconnectモジュールでミドルウェアの順番を動的に変えることは可能か？


connectモジュールを使って、順次処理をしていくとします。

[code]

    var connect = require('connect');
    
    connect()
        .use(funcA)
        .use(funcB)
        .use(funcC);
        .listen(3000);
    
[/code]

ここで、funcAの処理の内容によって、funcBを経由せずにfuncCに行くことは可能でしょうか？




簡潔に言えば、それはできません。それぞれの函数の呼び出しは独立からです。

独立とは、

[code]

    var connect = require('connect');
    
    connect().use(funcA).use(funcB).use(funcC).listen(3000);
    
[/code]

と

[code]

    var connect = require('connect');
    
    var tmp1 = connect();
    var tmp2 = tmp1.use(funcA)
    var tmp3 = tmp2.use(funcB)
    var tmp4 = tmp3.use(funcC)
    tmp4.listen(3000);
    
[/code]

とが等価であること。

* * *

ですが、ECMAScript6に導入されたPromiseオブジェクトを使えばできるかも知れませんが、いい方法とは思えません。

funcAとfuncBとfuncCの処理を一つの関数にまとめてはどう思いますか。それなら、処理の流れはよく管理できるようになるのではないでしょうか。




簡潔に言えば、それはできません。それぞれの函数の呼び出しは独立からです。

独立とは、

[code]

    var connect = require('connect');
    
    connect().use(funcA).use(funcB).use(funcC).listen(3000);
    
[/code]

と

[code]

    var connect = require('connect');
    
    var tmp1 = connect();
    var tmp2 = tmp1.use(funcA)
    var tmp3 = tmp2.use(funcB)
    var tmp4 = tmp3.use(funcC)
    tmp4.listen(3000);
    
[/code]

とが等価であること。

* * *

ですが、ECMAScript6に導入されたPromiseオブジェクトを使えばできるかも知れませんが、いい方法とは思えません。

funcAとfuncBとfuncCの処理を一つの関数にまとめてはどう思いますか。それなら、処理の流れはよく管理できるようになるのではないでしょうか。

