NodeJS框架Express的模板视图机制分析_javascript技巧
模板引擎
Express支持许多模板引擎,常用的有:
- haml 的实现Haml
- haml.js 接替者,同时也是Express的默认模板引擎Jade
- 嵌入JavaScript模板EJS
- 基于CoffeeScript的模板引擎CoffeeKup
- 的NodeJS版本jQuery模板引擎
视图渲染(view randering)
视图的文件名默认需遵循“
下面我们将用Jade引擎来渲染index.html,因为我们没有设置layout:false,index.jade渲染后的内容将被作为body本地变量传入layout.jade。
app.get('/', function(req, res){
res.render('index.jade', { title: 'CSSer, 关注Web前端技术!' });
});
新增的“view engine”设置可以指定默认模板引擎,如果我们想使用jade可以这样设置:
app.set('view engine', 'jade');
于是我们就可以通过下面的方式:
代替如下方式:
当“view engine”设置后,模板的扩展名就成了可选项,同时我们还可以混合匹配多模板引擎:
Express同时提供了视图选项设置,这些设置会在每次视图渲染后应用,比如你并不经常使用layouts,就可以这样设置:
layout: false
});
如果需要,这些设置可以在后续的res.render()调用中被覆盖:
可以通过指定一个路径的方式来实现用自己的layout来代替系统默认的,比如如果我们将“view engine”设置为jade并且自定义了一个名为“./views/mylayout.jade”的layout,我们可以这样使用它:
否则必须指定扩展名:
这些路径也可以是绝对路径:
这方面较好的例子就是自定义ejs模板的开始和关闭的标记:
open: '{{',
close: '}}'
});
局部视图(View Partials)
Express视图系统原生支持局部和集合视图,这称作微型视图,主要用于渲染一个文档片段。比如与其在视图中循环显示评论,不如使用局部集合(partial collection):
如果不需要其它选项或本地变量,我们可以省略对象而简单的传入评论数组,这和上面的示例是一样的:
当使用局部集合时,支持一些“魔术”本地变量:
- firstInCollection 当为第一个对象时该值为true
- indexInCollection 集合中对象的索引值
- lastInCollection 当为最后一个对象时为true
- collectionLength 集合的长度
Local variables passed (or generated) take precedence, however locals passed to the parent view are available in the child view as well. So for example if we were to render a blog post with partial(‘blog/post', post) it would generate the post local, but the view calling this function had the local user, it would be available to the blog/post view as well.
传入(或生成)的本地变量优先,但传入父视图的本地变量在子视图仍有效。因此如果我们用partial(‘blog/post', post)来渲染博客日志时,将生成post的本地变量,但调用本函数的视图拥有本地用户,它在blog/post视图依然有效。(一回注:这段翻译感觉有问题,请高人指点)。
性能提示:当使用局部集合渲染100长度的数组就意味着需要渲染100次视图,对于简单的集合你可以将循环内联,而不要使用局部集合,这样可以减少系统开销。
视图查找(View Lookup)
视图查找是相对于父视图进行的,比如我们有一个名为“views/user/list.jade”的页面视图,如果在该视图中调用 partial(‘edit'),视图系统将会尝试查找并加载“views/user/edit.jade”,而partial(‘.. /messages')将加载“views/messages.jade”。
视图系统还支持索引模板,这样你就可以使用一个同名的目录。比如,在一个路由中我们执行res.render(‘users'),这将指向“views/users.jade”或者“views/users/index.jade”。
当使用上面的索引视图时,我们可以通过partial(‘users')从同名目录下引用“views/users/index.jade”,同时视图系统会尝试“../users/index”,这能减少我们调用partial(‘index')的需要。

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

怎么处理文件上传?下面本篇文章给大家介绍一下node项目中如何使用express来处理文件的上传,希望对大家有所帮助!

Express和Laravel是两个非常流行的Web框架,分别代表了JavaScript和PHP两大开发语言的优秀框架。本文将针对这两个框架进行对比分析,帮助开发者选择更适合自己项目需求的框架。一、框架简介Express是一个基于Node.js平台的Web应用程序框架,它提供了一系列强大的功能和工具,使开发者可以快速搭建高性能的Web应用程序。Express

深入比较Express和Laravel:如何选择最佳框架?在选择一个适合自己项目的后端框架时,Express和Laravel无疑是两个备受开发者欢迎的选择。Express是基于Node.js的轻量级框架,而Laravel则是基于PHP的流行框架。本文将深入比较这两个框架的优缺点,并提供具体的代码示例,以帮助开发者选择最适合自己需求的框架。性能和扩展性Expr

node express怎么操作cookie?下面本篇文章就来给大家介绍一下用node操作cookie的方法,希望对大家有所帮助!

Express与Laravel:对比优劣势,你会选择哪个?在Web开发领域,Express和Laravel是两个备受关注的框架。Express是一个基于Node.js的灵活且轻量级的Web应用框架,而Laravel是一个基于PHP的优雅且功能丰富的Web开发框架。本文将从功能、易用性、扩展性以及社区支持等方面对比Express和Laravel的优劣势,并结合

如何利用React和Express搭建全栈JavaScript应用引言:React和Express是目前非常流行的JavaScript框架,它们分别用于构建前端和后端应用。本文将介绍如何结合使用React和Express来搭建一个全栈JavaScript应用。我们将逐步讲解如何搭建一个简单的TodoList应用,同时提供具体的代码示例。一、准备工作在开始之前

如何使用Node.js搭建一个简单的博客系统Node.js是一个基于ChromeV8引擎的JavaScript运行时环境,可以让JavaScript的运行速度更加高效。在Node.js的帮助下,我们可以使用JavaScript构建强大的服务器端应用程序,包括博客系统。本文将向您介绍如何使用Node.js搭建一个简单的博客系统,并为您提供具体的代码示例。请按

在选择后端框架时,Express和Laravel都是非常流行的选择。Express是基于Node.js的Web应用程序开发框架,而Laravel是基于PHP的Web应用程序开发框架。两者各有优势,选择最适合自己的框架需要考虑多方面因素。Express框架的优势在于它的灵活性和简单的学习曲线。Express的核心思想是“足够小,足够灵活”,它提供了大量的中间件
