Page 104 - Node.js开发指南
P. 104

5.4  模板引擎    97


                   上面例子中,app.all 定义的这个路由规则实际上起到了中间件的作用,把相似请求                                          1
               的相同部分提取出来,有利于代码维护其他next方法如果接受了参数,即代表发生了错误。
               使用这种方法可以把错误检查分段化,降低代码耦合度。

               5.4  模板引擎                                                                              2


                   上一节我们介绍了 Express 的路由控制方法,它是网站架构最核心的部分,即MVC架构
               中的控制器。在这一小节里,我们会讲述模板引擎的使用和集成,也就是视图。视图决定了
               用户最终能看到什么,因此也是最重要部分,这里我们以 ejs 为例介绍模板引擎的使用方法。                                           3

               5.4.1  什么是模板引擎

                   模板引擎(Template Engine)是一个从页面模板根据一定的规则生成 HTML 的工具。它                                  4
               的发轫可以追溯到 1996 年 PHP 2.0 的诞生。PHP 原本是 Personal Home Page Tools(个人主
               页工具)的简称,用于取代 Perl 和 CGI 的组合,其功能是让代码嵌入在 HTML 中执行,以
               产生动态的页面,因此 PHP 堪称是最早的模板引擎的雏形。随后的 ASP、JSP 都沿用了这个
               模式,即建立一个 HTML 页面模板,插入可执行的代码,运行时动态生成 HTML。                                              5
                   按照这种模式,整个网站就由一个个的页面模板组成,所有的逻辑都嵌入在模板中。这
               种模式大大降低了动态网页开发的门槛,因此一开始很受欢迎,但随着规模的扩大它会遇到
               许多问题,下面列举几个主要的。                                                                        6
                     页面功能逻辑与页面布局样式耦合,网站规模变大以后逐渐难以维护。
                     语法复杂,对于非技术的网页设计者来说门槛较高,难以学习。
                     功能过于全面,页面设计者可以在页面上编程,不利于功能划分,也使模板解析效
                      率降低。                                                                            7
                   这些问题制约了早期模板引擎的发展,直到 MVC 开发模式普及,模板引擎才开始遍地
               开花。现代的模板引擎是 MVC 的一部分,在功能划分上它严格属于视图部分,因此功能以
               生成 HTML 页面为核心,不会引入过多的编程语言的功能。相较于一门编程语言,它通常
                                                                                                      8
               学习起来相当容易。
                   模板引擎的功能是将页面模板和要显示的数据结合起来生成 HTML  页面。它既可以运
               行在服务器端又可以运行在客户端,大多数时候它都在服务器端直接被解析为 HTML,解析
               完成后再传输给客户端,因此客户端甚至无法判断页面是否是模板引擎生成的。有时候模板                                               9
               引擎也可以运行在客户端,即浏览器中,典型的代表就是 XSLT,它以 XML 为输入,在客
               户端生成 HTML 页面。但是由于浏览器兼容性问题,XSLT 并不是很流行。目前的主流还是
               由服务器运行模板引擎。
                   在 MVC 架构中,模板引擎包含在服务器端。控制器得到用户请求后,从模型获取数据,                                          10
   99   100   101   102   103   104   105   106   107   108   109