目錄
模板引擎" >模板引擎
视图渲染(view randering)" >视图渲染(view randering)
视图查找(View Lookup)" >视图查找(View Lookup)
首頁 web前端 js教程 NodeJS框架Express的模板视图机制分析_javascript技巧

NodeJS框架Express的模板视图机制分析_javascript技巧

May 16, 2016 pm 06:04 PM
express

模板引擎

Express支持许多模板引擎,常用的有:

视图渲染(view randering)

视图的文件名默认需遵循“.”的形式,这里是要被加载的模块的名字。比如视图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 + '/http://www.jb51.net/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')的需要。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

node專案中如何使用express來處理檔案的上傳 node專案中如何使用express來處理檔案的上傳 Mar 28, 2023 pm 07:28 PM

怎麼處理文件上傳?以下這篇文章為大家介紹一下node專案中如何使用express來處理文件的上傳,希望對大家有幫助!

Express和Laravel的比較分析:選擇更適合你的框架 Express和Laravel的比較分析:選擇更適合你的框架 Mar 10, 2024 pm 10:15 PM

Express和Laravel是兩個非常受歡迎的Web框架,分別代表了JavaScript和PHP兩大開發語言的優秀框架。本文將針對這兩個架構進行比較分析,幫助開發者選擇更適合自己專案需求的框架。一、框架簡介Express是一個基於Node.js平台的Web應用程式框架,它提供了一系列強大的功能和工具,使開發者可以快速建立高效能的網路應用程式。 Express

深入比較Express和Laravel:如何選擇最佳框架? 深入比較Express和Laravel:如何選擇最佳框架? Mar 09, 2024 pm 01:33 PM

深入比較Express和Laravel:如何選擇最佳框架?在選擇一個適合自己專案的後端框架時,Express和Laravel無疑是兩個備受開發者歡迎的選擇。 Express是基於Node.js的輕量級框架,而Laravel則是基於PHP的流行框架。本文將深入比較這兩個框架的優缺點,並提供具體的程式碼範例,以幫助開發者選擇最適合自己需求的框架。效能和擴展性Expr

聊聊node+express怎麼操作cookie 聊聊node+express怎麼操作cookie Jun 22, 2022 am 10:01 AM

node+express怎麼操作cookie?以下這篇文章就來跟大家介紹一下用node操作cookie的方法,希望對大家有幫助!

Express與Laravel:對比優劣勢,你會選哪一個? Express與Laravel:對比優劣勢,你會選哪一個? Mar 10, 2024 am 08:39 AM

Express與Laravel:對比優劣勢,你會選哪一個?在網路開發領域,Express和Laravel是兩個備受關注的框架。 Express是一個基於Node.js的靈活且輕量級的網頁應用框架,而Laravel是一個基於PHP的優雅且功能豐富的Web開發框架。本文將從功能、易用性、擴展性以及社群支援等方面來比較Express和Laravel的優劣勢,並結合

如何利用React和Express搭建全端JavaScript應用 如何利用React和Express搭建全端JavaScript應用 Sep 26, 2023 pm 01:09 PM

如何利用React和Express來建構全端JavaScript應用引言:React和Express是目前非常流行的JavaScript框架,它們分別用於建構前端和後端應用。本文將介紹如何結合使用React和Express來建構一個全端JavaScript應用程式。我們將逐步講解如何搭建一個簡單的TodoList應用,同時提供具體的程式碼範例。一、準備工作在開始前

如何使用Node.js建立一個簡單的部落格系統 如何使用Node.js建立一個簡單的部落格系統 Nov 08, 2023 pm 06:45 PM

如何使用Node.js建立一個簡單的部落格系統Node.js是一個基於ChromeV8引擎的JavaScript執行環境,可以讓JavaScript的運作速度更有效率。在Node.js的幫助下,我們可以使用JavaScript建立強大的伺服器端應用程序,包括部落格系統。本文將向您介紹如何使用Node.js建立一個簡單的部落格系統,並為您提供具體的程式碼範例。請按

Express還是Laravel?選擇最適合你的後端框架 Express還是Laravel?選擇最適合你的後端框架 Mar 10, 2024 pm 06:06 PM

在選擇後端框架時,Express和Laravel都是非常受歡迎的選擇。 Express是基於Node.js的Web應用程式開發框架,而Laravel是基於PHP的Web應用程式開發框架。兩者各有優勢,選擇最適合自己的框架需要考慮多面向因素。 Express框架的優點在於它的靈活性和簡單的學習曲線。 Express的核心思想是“足夠小,足夠靈活”,它提供了大量的中間件

See all articles