将 req 的 app 属性保存到变量 app 里:在浏览器里访问 localhost:4000,该请求转发给 app.render 函数。这个 merge 操作,把对象 b 的属性,全部赋给对象 a:首先试图从缓存中读取 view 实例:读取 index 视图实例:得到视图构造函数:开始渲染:调试模式:调用 Universal Engine 进行渲染:下列代码是我们团队同事编写的:在哪里渲染好的呢?入口函数:renderResponsethis.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:最终渲染的结果: