expressミドルウェアの理解

3494 ワード

nodejsミドルウェア
クッション:
一つの要求をサーバーに送ります.ライフサイクルを経て、サーバーは要求を聞いてください.解析要求に応答して、サーバーはこのプロセスを処理する時、時には複雑になります.これらの複雑な業務を一つのサブ部分に分解して、サブ部分は一つの中間部品です.処理要求に対して、応答が出る前に、要求と要求に対してもいいです.ステージ応答はいくつかの動作を行い、この処理結果を次の処理ステップに渡すことができる.
expressは中間部品をこのように説明します.
任意のコードを実行します.
要求と応答オブジェクトを変更します.
終了要求-応答サイクル.
スタックの次の中間部品を呼び出します.
カテゴリ:
アプリケーション中間部品
ルートレベル中間部品
エラー処理ミドルウェア
中間部品を内蔵する
第三者中間部品
くりを一つあげる:
 var express = require('express');
 var app = express();
 app.get('/', function(req, res, next) {
    // req     
    // res     
    next(); //              /    ,   next(), 
           //                      ,          
 });
app.get('/end', function(req, res) {
    res.send('          ,  next  ');
})
app.listen(3000);
上のnext()の説明:next()関数はnodejsまたはexpressの関数ではなく、中間部品関数を伝達する第三変数です.これは総称して、任意の名前でもいいです.名前統一のために、混乱を起こさないようにnext()と約束しています.それを呼び出したら、アプリケーションの次の中間プログラムを呼び出します.
中間部品の使用説明:
 var express = require('express');
 var app = express();
 app.use(requestTime); // 
 var requestTime = function(req,res, next) {
    req.requestTime = new Date().getTime();
    next();
 }

 app.get('/time', function(req, res, next) {
    var timeText = '     :';
    timeText = timeText + req.requestTime; //    req.requestTime               ,
    //         ,           req      ,    next()            ,
    //                            
    res.send(timeText);
 });
app.get('/end', function(req, res) {
    res.send('          ,  next  ');
})
app.listen(3000);
以下は、要求と応答をそれぞれの関数で処理する複数の中間体関数の例である.
具体的に
var express = require('express');
var app = express();

var middleA = function (req, res, next) {
    req.useOne = '        middleA ';
    res.useOne = 'middleA        middleA';
    req.paramasQuery = 1
    // console.log(req.useOne, req.useTwo, req.useThree);
    next();
}

var middleB = function (req, res, next) {
    req.useTwo = '         middleB';
    res.useTwo = 'middleB        middleB';
    req.paramasQuery += 1;
    console.log(res.useOne, res.useTwo, res.useThree);
    next();
}

var middleC = function (req, res, next) {
    req.useThree = '         middleC';
    res.useThree = 'middleC        middleC';
    req.paramasQuery += 2;
    console.log(res.useOne, res.useTwo, res.useThree);
    console.log(req.paramasQuery);
    next();
}
app.use(middleA);
app.use(middleB);
app.use(middleC);

app.get('/', function(req, res, next) {
    console.log(req.useOne, req.useTwo, req.useThree);
    //         middleA           middleB          middleC
    //    req                       
    console.log(res.useOne, res.useTwo, res.useThree);
    // middleA        middleA middleB        middleB middleC        middleC
    //    res                   res          
    req.paramasQuery += 3;
    // req paramasQuery                 ,     7,
    //     res          ,          
    //         ,             ,                ,
    //               ,             ,
    //           ,    ,    
    res.send('req.paramasQuery                :' + req.paramasQuery); // 7
})

app.listen(5000, function() {
    console.log('5000      ')
})
まとめ:
expressミドルウェア関数は、メインプログラムの業務ロジックを分解し、各ミドルウェア関数が処理した結果を次のミドルウェア関数に伝えます.工場でラインマンが箱を洗うシーンを想像してください.一人目は側面を洗い、二人目は底面を洗い、三人目はトップ面を洗います.このラインは終了します.その後、箱もきれいに洗います.それぞれのものを作って、お互いに影響しないで、また協力します.