最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

如何理解 "中間件" ?

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

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

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

什么是 ”Connect“ ?

我們可以把Connec看做一堆中間件的集合。對(duì)于每一次請(qǐng)求,Connect將會(huì)使用中間件層來(lái)過(guò)濾請(qǐng)求,其中每一個(gè)中間件都可以獲取HTTP請(qǐng)求。

T.J Holowaychuk談到Connect時(shí),他說(shuō)一共有兩種類(lèi)型的中間件。其中一種是過(guò)濾器:

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

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

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

下面列舉出幾個(gè)主要的中間件,并且實(shí)例講述:

(1),cookieParser------cookie解析中間件,解析Cookies的頭通過(guò)req.cookies得到cookies。還可以通過(guò)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

  描述:會(huì)話管理中間件

  依賴:cookieParser

  參數(shù):options

  options:

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

    store: session存儲(chǔ)實(shí)例

    secret: session的cookie加密

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

    proxy:安全cookie的反向代理,通過(guò)x-forwarded-proto實(shí)現(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);

  隨著客戶端不斷刷新頁(yè)面 "PV" 會(huì)不斷增加,服務(wù)器端 “Session” 維護(hù)數(shù)量 。

(3),bodyParser------請(qǐng)求內(nèi)容解析中間件,支持多種類(lè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);

 三,再來(lái)個(gè)對(duì)比實(shí)例,看看使用中間件的好處。

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

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

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

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

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

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

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

相關(guān)文章

  • node.js學(xué)習(xí)之事件模塊Events的使用示例

    node.js學(xué)習(xí)之事件模塊Events的使用示例

    Nodejs中不存在瀏覽器中冒泡,捕獲這些行為,Nodejs中實(shí)現(xiàn)了events這個(gè)模塊,Nodejs中大多數(shù)模塊都集成了這個(gè)模塊,所以events是Nodejs中最重要的一個(gè)模塊。這篇文章主要給大家介紹了關(guān)于node.js學(xué)習(xí)教程之事件模塊Events的相關(guān)資料,需要的朋友可以參考下。
    2017-09-09
  • mac中利用NVM管理不同node版本的方法詳解

    mac中利用NVM管理不同node版本的方法詳解

    這篇文章主要給大家介紹了關(guān)于在mac中利用NVM管理不同node版本的相關(guān)資料,文中詳細(xì)介紹了nvm的安裝和卸載、nvm安裝node的方法,以及nvm如何管理node版本,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • 前端自動(dòng)化開(kāi)發(fā)之Node.js的環(huán)境搭建教程

    前端自動(dòng)化開(kāi)發(fā)之Node.js的環(huán)境搭建教程

    這篇文章主要介紹了前端自動(dòng)化開(kāi)發(fā)之Node.js環(huán)境搭建的相關(guān)資料,文中介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用node.js具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-04-04
  • Node.js系列之安裝配置與基本使用(1)

    Node.js系列之安裝配置與基本使用(1)

    這篇文章主要為大家詳細(xì)介紹了Node.js系列之安裝配置與基本使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • 關(guān)于node編寫(xiě)文件上傳的接口的坑及解決

    關(guān)于node編寫(xiě)文件上傳的接口的坑及解決

    這篇文章主要介紹了關(guān)于node編寫(xiě)文件上傳的接口的坑及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Nodejs中的JWT和Session的使用

    Nodejs中的JWT和Session的使用

    這篇文章主要介紹了Nodejs中的JWT和Session的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • node.js中stream流中可讀流和可寫(xiě)流的實(shí)現(xiàn)與使用方法實(shí)例分析

    node.js中stream流中可讀流和可寫(xiě)流的實(shí)現(xiàn)與使用方法實(shí)例分析

    這篇文章主要介紹了node.js中stream流中可讀流和可寫(xiě)流的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了node.js stream流可讀流和可寫(xiě)流基本分類(lèi)、原理、定義、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • nodejs實(shí)現(xiàn)jwt的示例代碼

    nodejs實(shí)現(xiàn)jwt的示例代碼

    本文主要介紹了nodejs實(shí)現(xiàn)jwt的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • nodejs檢測(cè)因特網(wǎng)是否斷開(kāi)的解決方案

    nodejs檢測(cè)因特網(wǎng)是否斷開(kāi)的解決方案

    這篇文章主要給大家介紹了關(guān)于nodejs如何檢測(cè)因特網(wǎng)是否斷開(kāi)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用nodejs具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 一步步教你使用node搭建一個(gè)小頁(yè)面

    一步步教你使用node搭建一個(gè)小頁(yè)面

    最近使用NodeJs搭建的小型web應(yīng)用,所以下面這篇文章主要給大家介紹了關(guān)于使用node搭建一個(gè)小頁(yè)面的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11

最新評(píng)論

宜宾市| 嵩明县| 宜州市| 昭平县| 巴中市| 东兴市| 永顺县| 郸城县| 贵溪市| 西华县| 马鞍山市| 全椒县| 井冈山市| 桐柏县| 蛟河市| 墨玉县| 巫溪县| 兴宁市| 上饶县| 卢湾区| 黔南| 安顺市| 余干县| 江华| 黔西县| 安丘市| 民权县| 邯郸县| 许昌县| 吉木乃县| 马尔康县| 松原市| 美姑县| 滦南县| 石城县| 屯昌县| 康乐县| 泰来县| 保康县| 湟中县| 陵水|