当前位置: 首页 > news >正文

ejs列表渲染,条件渲染,在node中使用ejs

Node.js 项目中使用 EJS 实现 列表渲染条件渲染,并结合实际代码示例,帮你更好地理解 EJS 的用法。


🧑‍💻 一、在 Node.js 中使用 EJS

我们已经知道如何在 Express 中使用 EJS,下面我们回顾一下如何在 Node.js 项目中配置 EJS 作为模板引擎:

1️⃣ 安装依赖

npm install express ejs

2️⃣ 创建项目结构

project/
├── views/
│   ├── index.ejs
│   ├── partials/
│   │   └── header.ejs
├── app.js

3️⃣ 配置 Express 使用 EJS

// app.js
const express = require('express');
const app = express();
const port = 3000;// 设置 EJS 为视图引擎
app.set('view engine', 'ejs');// 设置视图文件目录
app.set('views', './views');// 路由定义
app.get('/', (req, res) => {res.render('index', {title: 'EJS 列表和条件渲染示例',users: [{ name: '小红', age: 25 },{ name: '小明', age: 30 },{ name: '小李', age: 35 }]});
});// 启动服务器
app.listen(port, () => {console.log(`服务已启动:http://localhost:${port}`);
});

🖼️ 二、EJS 列表渲染

在 EJS 中,我们使用 <% for ... %> 来遍历数组或对象列表。

示例:渲染用户列表

1️⃣ 创建视图:views/index.ejs
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title><%= title %></title>
</head>
<body><h1>用户列表</h1><ul><% users.forEach(user => { %><li><%= user.name %> - <%= user.age %> 岁</li><% }) %></ul></body>
</html>
2️⃣ 渲染数据:app.js 中传递数据(如上例)
app.get('/', (req, res) => {res.render('index', {title: 'EJS 列表和条件渲染示例',users: [{ name: '小红', age: 25 },{ name: '小明', age: 30 },{ name: '小李', age: 35 }]});
});

📝 三、EJS 条件渲染

EJS 允许你在模板中使用常见的 JavaScript 语法,如 if 语句来实现条件渲染。

示例:条件渲染用户状态

1️⃣ 创建视图:views/index.ejs
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title><%= title %></title>
</head>
<body><h1>用户状态</h1><ul><% users.forEach(user => { %><li><%= user.name %> - <% if (user.age >= 30) { %><span>年纪较大</span><% } else { %><span>年纪较轻</span><% } %></li><% }) %></ul></body>
</html>
2️⃣ 渲染数据:app.js 中传递数据(如上例)
app.get('/', (req, res) => {res.render('index', {title: 'EJS 条件渲染示例',users: [{ name: '小红', age: 25 },{ name: '小明', age: 30 },{ name: '小李', age: 35 }]});
});

💡 四、EJS 语法回顾与扩展

1. 输出变量:

  • <%= %>:输出变量并转义(防止 XSS 攻击)

    <%= username %>  <!-- 输出并转义 -->
    
  • <%- %>:输出原始 HTML,不转义

    <%- content %>  <!-- 直接输出 HTML -->
    

2. 条件判断:

  • <% if ... %>:条件判断
    <% if (age >= 18) { %><p>成人</p>
    <% } else { %><p>未成年</p>
    <% } %>
    

3. 循环:

  • <% for ... %>:循环遍历

    <% for (let i = 0; i < list.length; i++) { %><li><%= list[i] %></li>
    <% } %>
    
  • forEach

    <% users.forEach(user => { %><li><%= user.name %> - <%= user.age %></li>
    <% }) %>
    

🗂️ 五、项目最佳实践

项目结构:

project/
├── views/
│   ├── partials/
│   │   └── header.ejs
│   ├── index.ejs
│   └── about.ejs
├── public/
│   └── css/
│       └── style.css
├── routes/
│   ├── index.js
│   └── user.js
├── app.js

路由模块化

// routes/index.js
const express = require('express');
const router = express.Router();router.get('/', (req, res) => {res.render('index', {title: '首页',users: [{ name: '小红', age: 25 },{ name: '小明', age: 30 }]});
});module.exports = router;
// app.js
const express = require('express');
const app = express();
const indexRouter = require('./routes/index');app.set('view engine', 'ejs');
app.set('views', './views');app.use('/', indexRouter);app.listen(3000, () => {console.log('Server running at http://localhost:3000');
});

💡 六、总结

  • 列表渲染:使用 forEachfor 循环来渲染数组或对象。
  • 条件渲染:通过 ifelse 语句来根据条件显示不同内容。
  • EJS 优势:简单、易学、灵活,可以结合 Express 渲染动态页面。

相关文章:

  • 【C++入门:类和对象】[3]
  • JS 应用算法逆向三重断点调试调用堆栈BP 插件发包安全结合
  • java中final以及static的作用
  • Linux并发与竞争:从生活例子到内核实战
  • 从对数变换到深度框架:逻辑回归与交叉熵的数学原理及PyTorch实战
  • 高企复审奖补!2025年合肥市高新技术企业重新认定奖励补贴政策及申报条件
  • 【AI论文】ToolRL:奖励是工具学习所需的一切
  • [创业之路-382]:企业法务 - 企业如何通过技术专利与技术秘密保护自己
  • 深度学习:迁移学习
  • rocky9.4部署k8s群集v1.28.2版本(containerd)(纯命令)
  • ssh启动不了报错
  • leetcode刷题日记——有效的括号
  • python自动化学习六:断言
  • 基于Java+MySQL 实现(Web)日程管理系统
  • 开发了一个b站视频音频提取器
  • Spring Security结构总览
  • 【MySQL】基本查询
  • Android 16强制横竖屏设置
  • 【oql】spark thriftserver内存溢出,使用oql查询导致oom的sql
  • c语言 write函数
  • 专访|白俄罗斯共产党中央第一书记瑟兰科夫:只有大家联合起来,才能有效应对当前危机所带来的冲击
  • 我国首次发布铁线礁、牛轭礁珊瑚礁“体检”报告,菲炮制言论毫无科学和事实依据
  • 马上评丨冒名顶替上中专,为何一瞒就是30多年?
  • 新任乒协副主席马龙:感谢刘国梁,愿把经验传给年轻运动员
  • “沉默”的智驾:余承东不喊“遥遥领先”,何小鹏连夜改口 | 电厂
  • 新增1839个!2024年度本科专业备案和审批结果,公布