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>


4 回复

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 模板引擎来实现片段视图。

示例代码

  1. 安装依赖

    npm install express ejs consolidate --save
    
  2. 配置 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');
    });
    
  3. 创建视图文件

    • 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 及更高版本中实现片段视图功能。

回到顶部