Nodejs求解:Express在最新版本3.0以上的,还支持片段视图(partials)吗?
Nodejs求解:Express在最新版本3.0以上的,还支持片段视图(partials)吗?
Express旧支持片段视图(partials),但在新版本里运行时,module.js找不到相关模块!这是在学习《NODE开发指南》过程中遇到的问题。 <BR> 原文 5.4.4 片段视图 Express 的视图系统还支持片段视图 (partials ),它就是一个页面的片段,通常是重复的 内容,用于迭代显示。通过它你可以将相对独立的页面块分割出去,而且可以避免显式地使 用 for 循环。让我们看一个例子,在 app.js 中新增以下内容: <div style=“background: #000;color:#fff”> app.get(’/list’, function (req, res) { res.render(‘list’, { title: ‘List’, items: [1991, ‘byvoid’, ‘express’, ‘Node.js’] }); }); </div> 在 views 目录下新建 list.ejs ,内容是: <div style=“background: #000;color:#fff”><ul><%- partial(‘listitem’, items) %></ul> </div> 同时新建 listitem.ejs ,内容是: <div style=“background: #000;color:#fff”><li><%= listitem %></li> </div>
错误信息: <BR> <div style=“background: #000;color:#fff”> 500 ReferenceError: F:\lsblog\views\list.ejs:1 >> 1| <ul><%- partial(‘listitem’, items) %></ul> partial is not defined </div>
Nodejs 求解:Express 在最新版本 3.0 以上的,还支持片段视图(partials)吗?
原文
在较旧版本的 Express 中,片段视图(partials)功能被广泛使用。但是,随着 Express 进入 3.0 以上的版本,一些原有的功能可能会有所变化或不再直接支持。
问题描述
在学习《Node 开发指南》的过程中,遇到了一个问题。在较新的 Express 版本中,试图使用片段视图时遇到了 ReferenceError: partial is not defined
错误。
示例代码
让我们回顾一下旧版本中的代码:
app.js 文件
const express = require('express');
const app = express();
app.set('views', './views'); // 设置视图目录
app.set('view engine', 'ejs'); // 设置模板引擎为 EJS
app.get('/list', function (req, res) {
res.render('list', {
title: 'List',
items: [1991, 'byvoid', 'express', 'Node.js']
});
});
app.listen(3000);
views/list.ejs 文件
<div style="background: #000;color:#fff">
<ul>
<% for (var i = 0; i < items.length; i++) { %>
<%- include('listitem', { listitem: items[i] }) %>
<% } %>
</ul>
</div>
views/listitem.ejs 文件
<div style="background: #000;color:#fff">
<li><%= listitem %></li>
</div>
解释
在旧版本的 Express 中,你可以直接使用 partial()
函数来包含片段视图。然而,在 Express 3.0 及以上版本中,这种直接调用的方式不再被支持。取而代之的是,你需要使用 <%- include('filename', { data }) %>
来包含其他视图文件。
总结
在较新版本的 Express 中,虽然不直接支持 partial()
函数,但你可以通过 <%- include('filename', { data }) %>
的方式实现类似的功能。这种方式更加灵活,并且与当前的 Express 架构更兼容。
谢谢
在 Express 4.x 及以上版本中,partial
模板功能已经被移除,不再直接支持。但你可以通过第三方中间件来实现类似的功能。例如,可以使用 consolidate.js
结合 EJS 模板引擎来实现片段视图。
示例代码
-
安装依赖
npm install express ejs consolidate --save
-
配置 Express 应用
const express = require('express'); const cons = require('consolidate'); const app = express(); // 设置模板引擎 app.engine('ejs', cons.ejs); app.set('view engine', 'ejs'); app.set('views', './views'); // 设置 views 文件夹为存放所有助手中的间件 // 路由 app.get('/list', (req, res) => { res.render('list', { title: 'List', items: [1991, 'byvoid', 'express', 'Node.js'] }); }); app.listen(3000, () => { console.log('Server is running on port 3000'); });
-
创建视图文件
-
views/list.ejs
<div style="background: #000;color:#fff"> <ul> <% items.forEach(function(item) { %> <%- include('listitem', { listitem: item }) %> <% }); %> </ul> </div>
-
views/listitem.ejs
<div style="background: #000;color:#fff"> <li><%= listitem %></li> </div>
-
解释
- 在 Express 4.x 中,
partial
功能被移除了,但你可以使用<%- include('path/to/template', data) %>
来包含其他模板片段。 - 在上述代码中,我们使用了
consolidate.js
来处理 EJS 模板,并通过<%- include('listitem', { listitem: item }) %>
包含了listitem.ejs
模板。 - 这样就可以实现类似于
partial
的效果。
通过这种方式,你可以在 Express 4.x 及更高版本中实现片段视图功能。