中間部品の実現原理
2593 ワード
expressを使ったことがある学生はすべて知っていて、一つのHTTPの要求の完成はいくつかの中間部品を経て完成しました.中間部品はアクセス可能な要求対象(
じゃ、まず面接で出会った問題に行きます.中間件の実現構想です.もちろん、あなたがexpressを知っているなら、もっとよく理解してくれます.
次はこの解法を検証しましょう.
テスト一:ある中間関数体で、ユーザーがnextを呼び出していないと、次の中間部品関数を呼び出さない.
試験二:nextの呼び出しが非同期環境にある場合、次の中間部品関数は前の中間部品関数のnextが本当に呼び出された時に実行されます.
もちろんこれは一番簡単な中間部品の構想です.expressの中間部品の中ではこれよりずっと複雑ですが、問題を解決する考えを考察してもいいです.
req
)と応答対象(res
)の関数です.Expressアプリケーションの要求-応答サイクルでは、次のインラインの中間部品は通常変数を使います. next
表示するじゃ、まず面接で出会った問題に行きます.中間件の実現構想です.もちろん、あなたがexpressを知っているなら、もっとよく理解してくれます.
function fun1(ctx, next) {
ctx.count++;
console.log(ctx.count);
next();
}
function fun2(ctx, next) {
ctx.count++;
console.log(ctx.count);
next();
}
function fun3(ctx, next) {
ctx.count++;
console.log(ctx.count);
next();
}
compose([fun1, fun2, fun3])({count: 1});
compose, compose([fun1, fun2, fun3])({count: 1}) , fun1 fun2 fun3 , fun1
next , ,fun1 fun2 ,{count:1} context,
context 。
私のcomposeは構想が簡単です.次の通りです. function compose(arr){
index = 0;
len = arr.length;
return function (ctx) {
function next() {
index++;
if(index >= len) return;
arr[index](ctx, next);
}
arr[index](ctx, next);
}
}
このように出力した結果は2 3 4で、予想通りです.次はこの解法を検証しましょう.
テスト一:ある中間関数体で、ユーザーがnextを呼び出していないと、次の中間部品関数を呼び出さない.
function fun1(ctx, next) {
ctx.count++;
console.log(ctx.count);
next();
}
function fun2(ctx, next) {
ctx.count++;
console.log(ctx.count);
// next();
}
function fun3(ctx, next) {
ctx.count++;
console.log(ctx.count);
next();
}
compose([fun1, fun2, fun3])({count: 1});
は、上述のようにfun 2でnextを呼び出す必要がない場合、出力は2 3となり、予想通りとなる.試験二:nextの呼び出しが非同期環境にある場合、次の中間部品関数は前の中間部品関数のnextが本当に呼び出された時に実行されます.
function fun1(ctx, next) {
ctx.count++;
console.log(ctx.count);
next();
}
function fun2(ctx, next) {
ctx.count++;
console.log(ctx.count);
setTimeout(function () {
next();
},1000);
}
function fun3(ctx, next) {
ctx.count++;
console.log(ctx.count);
next();
}
compose([fun1, fun2, fun3])({count: 1});
は上述のように、fun 2の中で1 s後にnextを呼び出して、2 3に出力してから1秒後に4を出力します.もちろんこれは一番簡単な中間部品の構想です.expressの中間部品の中ではこれよりずっと複雑ですが、問題を解決する考えを考察してもいいです.