首先跳出前端
要看清node中間層在整個服務承擔什麼角色,首先咱們要跳出前端的視野,把本身視角提示一個level —— 去鳥瞰整個項目。
互聯網時代其實就是信息時代,咱們都是在利用數據交換,來產生價值。
在這個原始的流程之間,咱們有不少事情能夠作。來看和前端最近這條線,前端-->後端。
-
代理
-
緩存
-
限流
-
日誌
-
監控
-
鑑權
-
路由
-
灰度
-
...
上面列出的是一些咱們一個服務除了前端的展現,service端的網絡服務,API的提供,數據落庫等以外也要作的部分事情。在先後端沒有分離的時代,這些都是交給後端來作,好比Java,PHP等。尤爲在以前,套用模板語言就能解決大部分問題的時候,能夠說前端不值得單獨拿出來作。可是,當谷歌把JavaScript的宿主環境擴展到瀏覽器之外時,咱們有了更寬泛的選擇。
先後端分離
先後端分離幾乎是如今開發的必選項。我要放棄傳統的MVC模式,解除模板語言的限制,獨立構建開發環境,SPA頁面作SEO,分離部署依賴,統一API出口去適應更好的適應多端等等…….先後端分離的優劣我就不過多贅述。
在先後端分離的前提下,咱們就能夠在服務器(JAVA)和瀏覽器(JS)中間架一箇中間層(NODEJS).
Node中間層
在先後端分離的自然選擇下,node中間層能夠承擔更多的責任。
-
代理:在開發環境下,咱們能夠利用代理來,解決最多見的跨域問題;在線上環境下,咱們能夠利用代理,轉發請求到多個服務端。
-
緩存:緩存實際上是更靠近前端的需求,用戶的動做觸發數據的更新,node中間層能夠直接處理一部分緩存需求。
-
限流:node中間層,能夠針對接口或者路由作響應的限流。
-
日誌:相比其餘服務端語言,node中間層的日誌記錄,能更方便快捷的定位問題(是在瀏覽器端仍是服務端)。
-
監控:擅長高併發的請求處理,作監控也是合適的選項。
-
鑑權:有一箇中間層去鑑權,也是一種單一職責的實現。
-
路由:前端更須要掌握頁面路由的權限和邏輯。
-
服務端渲染:node中間層的解決方案更靈活,好比SSR、模板直出、利用一些JS庫作預渲染等等。
-
更多的可能性
這些,都是在有個node中間層的好處,使得服務更加的靈活。固然,node也有不少弊端,若是設計很差,很容易讓代碼充滿 callback 。CPU使用率較重、IO使用率較輕的應用——如視頻編碼、人工智能等,Node.js的優點沒法發揮(在後面的成熟更新中,node對這類問題可能也有比較好的解決方案)。