欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

NodeJS學(xué)習(xí)筆記之Connect中間件模塊(一)

 更新時間:2015年01月27日 15:39:22   投稿:hebedich  
這是一個目錄概要,里面記錄著NodeJS的基礎(chǔ)知識部分,今天這篇文章以及后續(xù)的幾篇,將是一個進(jìn)階系列,讓我們建立一個由淺入深的學(xué)習(xí)的過程,

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

什么是“Connect”,中間件又當(dāng)如何理解,帶著問題來看今天的文章。

如何理解 "中間件" ?

我的理解是這樣的,中間件就是類似于一個過濾器的東西,在客戶端和應(yīng)用程序之間的一個處理請求和響應(yīng)的的方法。

如果把一個http處理過程比作是污水處理,中間件就像是一層層的過濾網(wǎng)。每個中間件在http處理過程中通過改寫request或(和)response的數(shù)據(jù),

狀態(tài),實現(xiàn)了特定的功能。

什么是 ”Connect“ ?

我們可以把Connec看做一堆中間件的集合。對于每一次請求,Connect將會使用中間件層來過濾請求,其中每一個中間件都可以獲取HTTP請求。

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

過濾器處理請求,但是他們并不針對請求進(jìn)行回應(yīng)(想想服務(wù)器日志)。

第二種類型是供應(yīng)器,它會針對請求進(jìn)行回應(yīng),你可以根據(jù)你的需求使用多個中間件,Http請求將會通過每一個中間件直到其中一個中間件對請求進(jìn)行回應(yīng)。

二,Connect內(nèi)置中間件介紹

下面列舉出幾個主要的中間件,并且實例講述:

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

復(fù)制代碼 代碼如下:

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

  參數(shù):options

  options:

    key:Cookies名,默認(rèn)值為connect.sid

    store: session存儲實例

    secret: session的cookie加密

    cookie: session的cookie配置,默認(rèn)值為{path: ‘/', httpOnly: true, maxAge: null}

    proxy:安全cookie的反向代理,通過x-forwarded-proto實現(xiàn)

    Cookie option:

    cookie.maxAge: 默認(rèn)值null,表示當(dāng)瀏覽器關(guān)閉后cookie被刪除。

復(fù)制代碼 代碼如下:

 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" 會不斷增加,服務(wù)器端 “Session” 維護(hù)數(shù)量 。

(3),bodyParser------請求內(nèi)容解析中間件,支持多種類型application/json,application/x-www-form-urlencoded, multipart/form-data?! ?/p>

復(fù)制代碼 代碼如下:

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

 三,再來個對比實例,看看使用中間件的好處。

復(fù)制代碼 代碼如下:

 /*
  * 使用connect實現(xiàn)的靜態(tài)文件處理
  */
 var connect = require('connect');
 connect(connect.static(__dirname + '/public')).listen(//監(jiān)聽
     8888,
     function() {
         console.log('Connect started on port 8888');
     }
 );
 /*
  * 使用node原生api實現(xiàn)
  */
 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(//監(jiān)聽
     8888,
     function() {
         console.log('Http Server started on port 8888');
     }
 );

盡管node原生api已經(jīng)花費(fèi)這么些行代碼,但其實仍然留下一個簡單靜態(tài)文件服務(wù)器的諸多方面未經(jīng)處理,

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

與此同時connect已經(jīng)將這些問題都處理好了。

四,總結(jié)一下

 (1),理解中間件流式處理。

復(fù)制代碼 代碼如下:

 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),原生實現(xiàn)方式與中間件實現(xiàn)之間的差異化。

(3),通過上述的幾個中間件例子,理解用途和使用場景并且參考相關(guān)文檔掌握其余中間件的基本使用。

相關(guān)文章

  • Node環(huán)境中JS代碼缺少window對象的原因和解決方案

    Node環(huán)境中JS代碼缺少window對象的原因和解決方案

    你可能會在某些情況下需要在Node環(huán)境下運(yùn)行JavaScript代碼,但你也可能會遇到一個常見的問題:缺少window環(huán)境,在本文中,我們將深入探討這個問題的原因,并提供解決方案,需要的朋友可以參考下
    2023-08-08
  • Nodejs中的this詳解

    Nodejs中的this詳解

    本文給大家匯總介紹了下nodejs中的this,nodejs中的this和在瀏覽器中javascript中的this還是有很大的差異的,小伙伴們可以研究下
    2016-03-03
  • 使用?Node-RED對?MQTT?數(shù)據(jù)流處理

    使用?Node-RED對?MQTT?數(shù)據(jù)流處理

    本文將介紹使用 Node-RED 連接到 MQTT 服務(wù)器,并對 MQTT 數(shù)據(jù)進(jìn)行過濾和處理后再將其發(fā)送至 MQTT 服務(wù)器的完整操作流程。讀者可以快速了解如何使用 Node-RED 對 MQTT 數(shù)據(jù)進(jìn)行簡單的流處理
    2022-05-05
  • nodejs用gulp管理前端文件方法

    nodejs用gulp管理前端文件方法

    本篇文章給大家分享了nodejs用gulp管理前端文件的步驟方法以及優(yōu)缺點分析,有興趣的朋友參考下。
    2018-06-06
  • 快速掌握Node.js環(huán)境的安裝與運(yùn)行方法

    快速掌握Node.js環(huán)境的安裝與運(yùn)行方法

    這篇文章主要介紹了Node.js環(huán)境的安裝與運(yùn)行方法,Node是基于Google Chrome V8引擎的JavaScript解釋器,需要的朋友可以參考下
    2016-02-02
  • 利用node.js制作命令行工具方法教程(一)

    利用node.js制作命令行工具方法教程(一)

    這篇文章主要給大家介紹了node.js制作命令行工具方法教程,文中介紹的非常詳細(xì),對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面跟著小編一起來學(xué)習(xí)學(xué)習(xí)吧。
    2017-06-06
  • 使用nodejs連接mySQL寫接口全過程(增刪改查)

    使用nodejs連接mySQL寫接口全過程(增刪改查)

    這篇文章主要給大家介紹了關(guān)于使用nodejs連接mySQL寫接口(增刪改查)的相關(guān)資料,MySQL是一種常用的關(guān)系型數(shù)據(jù)庫,它與Node.js的結(jié)合可以提供強(qiáng)大的數(shù)據(jù)存儲和檢索功能,需要的朋友可以參考下
    2023-12-12
  • nodemailer郵箱發(fā)送驗證碼的實現(xiàn)

    nodemailer郵箱發(fā)送驗證碼的實現(xiàn)

    郵箱注冊是常見的功能,通常需要發(fā)送郵箱驗證碼驗證,本文就來介紹一下nodemailer郵箱發(fā)送驗證碼的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • node.js基于mongodb的搜索分頁示例

    node.js基于mongodb的搜索分頁示例

    本篇文章主要介紹了node.js基于mongodb的搜索分頁示例,mongodb分頁很簡單,這里整理了詳細(xì)的代碼,有需要的小伙伴可以參考下。
    2017-01-01
  • node.js中的events.emitter.removeAllListeners方法使用說明

    node.js中的events.emitter.removeAllListeners方法使用說明

    這篇文章主要介紹了node.js中的events.emitter.removeAllListeners方法使用說明,本文介紹了events.emitter.removeAllListeners 的方法說明、語法、接收參數(shù)、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12

最新評論