2017-02-09 54 views
0

我試圖完全理解中間件是什麼,我已經到了一個硬點。Angular Http模塊考慮中間件?

我正在閱讀expressJs文檔及其中間件功能的定義 - 「中間件功能是可以訪問請求對象(req),響應對象(res)和下一個中間件功能在應用程序的請求 - 響應週期中,下一個中間件函數通常用名爲next的變量表示。

我知道下一個變量不必被命名爲「下一個」來獲得func。

我也知道中間件(如monogJs)和中間件函數/方法(app.use())之間是有區別的。在角度上,http模塊也遵循這種模式,就像角度和其他流行框架中的其他事情一樣。這些也被認爲是中間件嗎?有人能爲我提供清晰嗎?

+0

不,中間件位於瀏覽器和http服務器之間 – Sebas

回答

1

中間件是在每次請求之前和之後執行的一段代碼。這有助於您創建共享功能,如日誌記錄和授權,而無需爲每個端點實施代碼。

中間件的順序通常稱爲中間件鏈。

app.use(middleware) 

這是我們將中間件附加到每個請求的方式。當涉及到數據庫連接時,我們傾向於將它從請求端點中刪除,因爲它是應用程序全局的。

現在,我們接下來的原因是當函數完成時告訴鏈。這是一個回調模式。我們還希望能夠在鏈中拾取錯誤(異常),以便我們可以爲我們的應用程序添加共享功能。 JavaScript不是類型定義的,所以我們註冊兩個函數之間差異的唯一方法是註冊參數的數量。這就是錯誤處理有4個參數的原因。

這裏是記錄和錯誤處理

app.use(function(req, res, next) { 
    console.log('request made to server'); 
    next(); 
}); 

app.use(function(error, req, res, next) { 
    console.log('an error occurred in the code'); 
    next(); 
}); 

app.get('/', function(req, res) { 
    /* Your logic here */ 
}); 

如果您希望使用只有幾個端點特定中間件端點的一個例子,你可以註冊他們直接

app.get('/', middleware, function(res, res) { 
    /* Your logic here */ 
}); 

我希望這有助於理解中間件。中間件是處理堆棧的一部分,而不是協議調用。

+0

嘿謝謝!你提供了一個很好的解釋,但我認爲這是我的困惑所在。 http中的angular模塊具有.then方法,可以讓您以任何方式處理響應,類似於中間件。您甚至可以將它傳遞給另一個函數以供繼續處理。那麼,什麼使中間件不同? – Scott

+0

Http是一個異步調用。因爲從服務器獲取響應需要花費n個時間。如果在JavaScript中不可用,則您的應用程序在等待數據時會凍結。看看Promises。可能會幫助你理解什麼是關鍵。 –