express中間件


中間件(Middleware)可以理解為一個對用戶請求進行過濾和預處理的東西,它一般不會直接對客戶端進行響應,而是將處理之后的結果傳遞下去。

Express支持的中間件

在express官網中可以看出express本身支持若干中間件:

  1. basicAuth:基本的身份認證功能,處理之后可以通過req.user屬性訪問被認證的用戶對象
  2. bodyParser:完成請求體消息的三種轉換功能:json(),urlencoded(),multipart(),這三個中間件可以分別使用,而bodyParse是對三者的統一封裝
  3. compress:對response數據進行壓縮處理
  4. cookieParser:對Cookie頭進行處理,然后通過req.cookies屬性來訪問所有cookie對象
  5. cookieSession:提供對Session的支持。我們知道大部分的服務器Session其實是通過cookie來實現的。服務器端通過判斷客戶端發送的兩次請求中某一個cookie項的值是否相同來認定是否是同一個session。處理之后可以通過req.session屬性訪問session對象
  6. csrf:對CSRF(跨域請求偽造)保護的支持。CSRF是指偽造他人請求發送給受攻擊的站點。其防御方法有驗證HTTP Refer字段;在請求地址中添加token並進行驗證;在HTTP頭中自定義屬性並進行驗證等等。該中間件就是通過生成token來解決的,生成的token可以通過req.csrfToken()來進行訪問
  7. directory:使服務器的某項目錄能夠為外界所訪問

Connect中間件框架

其實,express中的中間件就是使用了Connect中間件框架。它們是一種包含關系。此外,Connect和Express其實是同一個作者。

connect支持的中間件就非常多了。從主頁中就可以看出:

其使用方法跟express中中間件的使用方法如出一轍,只是多了一些中間件而已。

園友luics將Connect中間件分為了三個部分:

  1. Pre-Request 通常用來改寫request的原始數據
  2. Request/Response 大部分中間件都在這里,功能各異
  3. Post-Response 全局異常處理,改寫response數據等

 

自己編寫中間件

中間件函數作為插件被放到請求流中(request flow),在Connnect里使用 connect.use(),或在express中使用app.use()。一個自定義的中間件模塊需要返回一個方法,這個方法理想情況下接受 req,res或next三個參數。

module.exports = function() {  
      
    return function(req, res, next) {  
     // Do Something to `req' or `res'

    // Pass to next middleware
    return next();

    // Error occurred and pass to error handler
    return next(err);

    // Intercept the request and make response directly without pass to next middleware
    return res.send(XXX);

    // Hook on `res.end' to perform some decoration on response
    var end_ = res.end;
    res.end = function (text) {
         // Do something to response data ...
         end_.bind(this)(arg1, arg2, ...);
    };

  }
}

 

參考資料:

http://www.cnblogs.com/luics/archive/2012/11/28/2775206.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM