将 req 的 app 屬性儲存到變量 app 裡:
在浏覽器裡通路 localhost:4000,該請求轉發給 app.render 函數。
這個 merge 操作,把對象 b 的屬性,全部賦給對象 a:
首先試圖從緩存中讀取 view 執行個體:
讀取 index 視圖執行個體:
得到視圖構造函數:
開始渲染:
調試模式:
調用 Universal Engine 進行渲染:
下列代碼是我們團隊同僚編寫的:
在哪裡渲染好的呢?
入口函數:renderResponse
this.shouldRender 判斷是否應該在伺服器端渲染:
如果目前請求正在渲染,或者已經超過最大渲染并發數,那麼就 fallback 到 CSR 渲染模式:
調用鈎子函數,得出目前這個請求的渲染政策:
fallback 到 CSR 了:
在 CSR 模式下,把 index.html 的請求傳回給用戶端:
self 的指向:
我還沒在 Visual Studio Code 裡 attach nodejs 程序,/ 的 rendering 就結束了 ?!
如果給了一個很大的 timeout 值,就不用擔心會 fallback 到 CSR 了:
此時這個 doc,裡面包含的 selector 是空的:
Render an HTML document for a specific URL with specified render options:
上圖就是 express-engine.js 的 render 實作函數。
下圖:platform-server.js:
最終渲染的結果: