MVC模式可谓无人不知,它除了能增强团队协作的效率,还可方便产品的维护升级,本文我们将对Express框架的模板和视图(V)相关功能进行介绍。
模板引擎
Express支持许多模板引擎,常用的有:
视图渲染(view randering)
视图的文件名默认需遵循“<name>.<engine>”的形式,这里<engine>是要被加载的模块的名字。比如视图layout.ejs就是在告诉视图系统要require(‘ejs’),被加载的模块必须输出exports.compile(str, options)方法,并要返回一个函数来遵守Express的模板接口约定。我们也可以使用app.register()来映射模板引擎到其它文件扩展名,从而实现更灵活的模板引擎行为,如此一来就可以实现“csser.html”可以被ejs引擎所渲染。
下面我们将用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');
于是我们就可以通过下面的方式:
res.render('index');
代替如下方式:
res.render('index.jade');
当“view engine”设置后,模板的扩展名就成了可选项,同时我们还可以混合匹配多模板引擎:
res.render('another-page.ejs');
Express同时提供了视图选项设置,这些设置会在每次视图渲染后应用,比如你并不经常使用layouts,就可以这样设置:
app.set('view options', {
layout: false
});
如果需要,这些设置可以在后续的res.render()调用中被覆盖:
res.render('csser-view.ejs', { layout: true });
可以通过指定一个路径的方式来实现用自己的layout来代替系统默认的,比如如果我们将“view engine”设置为jade并且自定义了一个名为“./views/mylayout.jade”的layout,我们可以这样使用它:
res.render('page', { layout: 'mylayout' });
否则必须指定扩展名:
res.render('page', { layout: 'mylayout.jade' });
这些路径也可以是绝对路径:
res.render('page', { layout: __dirname + '/../../mylayout.jade' });
这方面较好的例子就是自定义ejs模板的开始和关闭的标记:
app.set('view options', {
open: '{{',
close: '}}'
});
局部视图(View Partials)
Express视图系统原生支持局部和集合视图,这称作微型视图,主要用于渲染一个文档片段。比如与其在视图中循环显示评论,不如使用局部集合(partial collection):
partial('comment', { collection: comments });
如果不需要其它选项或本地变量,我们可以省略对象而简单的传入评论数组,这和上面的示例是一样的:
partial('comment', comments);
当使用局部集合时,支持一些“魔术”本地变量:
- 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’)的需要。
相关推荐
的NodeJS版本jQuery模板引擎 视图渲染(view randering) 视图的文件名默认需遵循“<name>.”的形式,这里是要被加载的模块的名字。比如视图layout.ejs就是在告诉视图系统要require(‘ejs’),被加载的模块必须输出...
这个项目案例结合了前端的Vue.js框架、后端的Node.js与Express框架,以及数据库操作的MyBatis持久层框架,构建了一个完整的Web应用程序。下面将分别详细介绍这四个技术的核心概念、用途及它们如何协同工作。 **Vue....
- Express支持多种模板引擎,如Jade(现在称为Pug)、EJS、ejs-locals等。 - 视图引擎用于将数据渲染成HTML,简化页面的动态生成。 5. **错误处理** - 错误处理中间件是专门用来捕获和处理程序中的错误,通常...
**NodeJS + Express + MongoDB 简单博客系统** 这个项目是一个基于Node.js、Express.js框架和MongoDB数据库构建的简单博客系统。它为初学者提供了一个很好的平台,以了解和实践Web开发中的服务器端编程、路由处理...
标题中的“nodejs+express+mongodb+bootstrap+jquery+ejs写的电影demo”表明这是一个使用Node.js、Express框架、MongoDB数据库、Bootstrap前端框架、jQuery库以及EJS模板引擎开发的电影相关的应用程序示例。...
在“nodejs+express搭建自己的框架”这个主题中,我们将探讨如何利用Express的灵活性和模块化特性,定制适合自身需求的应用框架。首先,你需要安装Node.js和Express。在命令行中,使用npm(Node包管理器)安装...
Express 是 Node.js 平台上一个非常流行的 web 应用框架,它遵循 MVC(模型-视图-控制器)设计模式,用于构建高效、可扩展的网络应用。 "nodejs_express_module" 提供的是 Express 框架的部署包,主要针对无法通过 ...
在"nodejs+express+mysql起步学习demo:待完善.zip"这个压缩包中,我们可以推测这可能是一个初学者或教学者用来展示如何结合这三个技术的示例项目。Kwan1117可能是这个项目的作者或者是一个项目标识。这个项目旨在...
在这个“nodeJs+express+socket.io的即时通信web”项目中,开发者创建了一个简单的聊天室应用,实现了以下几个关键功能: 1. **在线统计**:利用Socket.IO的连接状态管理,可以实时追踪并更新当前在线用户数量。...
总的来说,这个"nodejs+express+mysql后台框架"提供了一个简洁、高效的起点,让开发者可以快速搭建起一个功能完善的后端服务,进行Web应用的开发。通过深入理解和定制这个框架,可以提高开发效率,降低维护成本,...
Express则是Node.js的一个轻量级Web应用框架,它简化了构建Web服务的过程,使得开发者能够快速搭建功能丰富的Web应用程序。本篇文章将深入探讨如何使用Node.js和Express来创建一个自定义的项目。 1. **安装Node.js*...
Express是基于Node.js的web应用框架,它简化了路由、中间件和视图的管理。在Express中,你可以定义路由来处理HTTP请求,使用中间件来处理请求和响应,以及设置模板引擎来渲染视图。例如: ```javascript const ...
该标题提到的"jinwei_nodejs_express"是一个基于Node.js的项目,它利用了Express框架进行开发。描述中指出,这个项目对Express进行了简单的封装,使得在使用时能够更便捷地实现多进程操作,特别是通过`cluster`模块...
Express是基于Node.js的一个Web应用框架,它简化了HTTP请求和响应的处理,提供了许多中间件来处理路由、视图系统、静态文件服务等,大大降低了开发复杂度。 MySQL则是一个关系型数据库管理系统,广泛应用于存储和...
在本项目中,“nodejs+express+mysql学习nodejs的小项目”是一个初学者友好的教程,旨在帮助开发者了解如何使用Node.js、Express框架以及MySQL数据库来构建Web应用程序。这个压缩包可能包含了源代码、配置文件和其他...
5. **视图和模板引擎**:Express可以集成模板引擎,如ejs或pug,用于渲染HTML页面。`res.render()`方法用于将数据传递给模板并返回给客户端。 6. **数据库交互**:可能使用MongoDB或其他NoSQL数据库存储用户提交的...
2. **Express 框架**:理解 Express 的核心概念,如中间件、路由和视图系统。中间件是 Express 的核心功能之一,它们按顺序执行,可以处理请求和响应。路由用于定义 HTTP 方法(GET、POST等)和 URL 的对应关系,...
这些文件可以帮助我们了解项目的工作原理,包括数据库的连接设置、路由定义、视图模板、模型定义以及可能的数据库操作脚本。 为了深入了解这个框架,我们需要查看代码结构,理解如何初始化Express应用,定义路由,...
这个"Node.js-使用nodejs的express框架搭建的后台管理系统.zip"文件,很可能包含了一个使用Express构建的后台管理系统的源代码,我们可以从以下几个方面来探讨相关的知识点: 1. **Node.js基础**:理解Node.js的...