NodeJS學習筆記之Connect中介軟體模組(一)_node.js

來源:互聯網
上載者:User

希望大家能夠堅持看下去我這系列的文章,這也是對我的最大的鼓勵與支援,讓我們共同進步,以文會友,相互協助。好了直接進入今天的主題,

什麼是“Connect”,中介軟體又當如何理解,帶著問題來看今天的文章。

如何理解 "中介軟體" ?

我的理解是這樣的,中介軟體就是類似於一個過濾器的東西,在用戶端和應用程式之間的一個處理請求和響應的的方法。

如果把一個http處理過程比作是汙水處理,中介軟體就像是一層層的過濾網。每個中介軟體在http處理過程中通過改寫request或(和)response的資料,

狀態,實現了特定的功能。

什麼是 ”Connect“ ?

我們可以把Connec看做一堆中介軟體的集合。對於每一次請求,Connect將會使用中介軟體層來過濾請求,其中每一個中介軟體都可以擷取HTTP請求。

T.J Holowaychuk談到Connect時,他說一共有兩種類型的中介軟體。其中一種是過濾器:

過濾器處理請求,但是他們並不針對請求進行回應(想想伺服器日誌)。

第二種類型是供應器,它會針對請求進行回應,你可以根據你的需求使用多個中介軟體,Http請求將會通過每一個中介軟體直到其中一個中介軟體對請求進行回應。

二,Connect內建中介軟體介紹

下面列舉出幾個主要的中介軟體,並且執行個體講述:

(1),cookieParser------cookie解析中介軟體,解析Cookies的頭通過req.cookies得到cookies。還可以通過req.secret加密cookies。

複製代碼 代碼如下:

var connect = require('./lib/connect') ;
var app = connect()
.use(connect.cookieParser('secret string'))
.use(function (req,res,next){
    req.cookies.website="hi,i am bigbear !" ;
    res.end(JSON.stringify(req.cookies)) ;
}).listen(8888) ;

(2),session

  描述:會話管理中介軟體

  依賴:cookieParser

  參數:options

  options:

    key:Cookies名,預設值為connect.sid

    store: session儲存執行個體

    secret: session的cookie加密

    cookie: session的cookie配置,預設值為{path: ‘/', httpOnly: true, maxAge: null}

    proxy:安全cookie的反向 Proxy,通過x-forwarded-proto實現

    Cookie option:

    cookie.maxAge: 預設值null,表示當瀏覽器關閉後cookie被刪除。

複製代碼 代碼如下:

 var connect = require('./lib/connect');
 var app = connect()
 .use(connect.logger('dev'))
 .use(connect.cookieParser())
 .use(connect.session({secret: '123', cookie: { maxAge: 60000 }}))
 .use(function (req, res, next) {
     if(req.session.pv){
         res.setHeader('Content-Type', 'text/html');
         res.write('views: ' + req.session.pv);
         res.end();
         req.session.pv++;
     }else{
         req.session.pv = 1;
         res.end('Refresh');
     }
 })
 .listen(8888);

  隨著用戶端不斷重新整理頁面 "PV" 會不斷增加,伺服器端 “Session” 維護數量 。

(3),bodyParser------請求內容解析中介軟體,支援多種類型application/json,application/x-www-form-urlencoded, multipart/form-data。  

複製代碼 代碼如下:

 var connect = require('connect');
 var app = connect()
     .use(connect.bodyParser())
     .use(function(req, res) {
         res.end('req.body=>' + JSON.stringify(req.body));
     })
 .listen(8888);

 三,再來個對比執行個體,看看使用中介軟體的好處。

複製代碼 代碼如下:

 /*
  * 使用connect實現的靜態檔案處理
  */
 var connect = require('connect');
 connect(connect.static(__dirname + '/public')).listen(//監聽
     8888,
     function() {
         console.log('Connect started on port 8888');
     }
 );
 /*
  * 使用node原生api實現
  */
 var http = require('http');
 http.createServer(
     function(req, res) {
         var url = require('url');
         var fs = require('fs');
         var pathname = __dirname + '/public' + url.parse(req.url).pathname;
         //讀取本地檔案
         fs.readFile(
             pathname,
             function(err, data) {
                 //異常處理
                 if (err) {
                     res.writeHead(500);
                     res.end('500');
                 }
                 else {
                     res.end(data);
                 }
             }
         );
     }
 ).listen(//監聽
     8888,
     function() {
         console.log('Http Server started on port 8888');
     }
 );

儘管node原生api已經花費這麼些行代碼,但其實仍然留下一個簡單靜態檔案伺服器的諸多方面未經處理,

比如:404等異常未處理、沒有基本的檔案路徑安全驗證(實際上我們可以訪問到整個os檔案系統)、全域異常處理等等;

與此同時connect已經將這些問題都處理好了。

四,總結一下

 (1),理解中介軟體串流。

複製代碼 代碼如下:

 var app = connect();
 app.use(connect.staticCache());
 app.use(connect.static(__dirname + '/public'));
 app.use(connect.cookieParser());
 app.use(connect.session());
 app.use(connect.query());
 app.use(connect.bodyParser());
 app.use(connect.csrf());
 app.use(function (req, res, next) {
   // 中介軟體
 });
 app.listen(8888);

(2),原生實現方式與中介軟體實現之間的差異化。

(3),通過上述的幾個中介軟體例子,理解用途和使用情境並且參考相關文檔掌握其餘中介軟體的基本使用。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.