27 模板引擎之传递变量的内容
在前面一节中,我们探讨了如何使用 Express.js 渲染模板。了解了如何通过响应对象将数据连接到模板并展示它们。现在这一节中,我们将深入讨论如何在渲染模板时传递变量。
传递变量的基本概念
在使用模板引擎渲染页面时,通常需要将数据传递到模板中,以便在页面上动态生成内容。在 Express.js 中,您可以通过 res.render()
方法轻松实现这一点,该方法的第一个参数为模板名称,第二个参数则为要传递到模板的变量对象。
例子:基础变量传递
让我们从一个基本的案例开始,演示如何传递变量。假设我们有一个名为 index.ejs
的模板文件,其内容如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= title %></title>
</head>
<body>
<h1><%= greeting %></h1>
<p>当前时间是:<%= currentTime %></p>
</body>
</html>
然后可以在我们的 Express 应用中这样设置路由:
const express = require('express');
const app = express();
const path = require('path');
// 设置视图引擎为 EJS
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views')); // 假设 views 目录与根目录同级
app.get('/', (req, res) => {
const currentTime = new Date().toLocaleString();
res.render('index', {
title: '欢迎来到首页',
greeting: '你好,世界!',
currentTime: currentTime
});
});
app.listen(3000, () => {
console.log('服务器已启动,访问 http://localhost:3000');
});
在这个例子中,我们创建了一个简单的 Express 应用程序,并在根路由中调用 res.render()
方法,将 title
、greeting
和 currentTime
变量传递给 index.ejs
模板。模板中的 <%= %>
语法用来插入变量值。
传递复杂的数据结构
除了基本数据类型,我们还可以向模板传递复杂的对象或数组。这在需要动态展示多个内容时尤其有用。
例子:传递对象和数组
假设我们想在模板中显示一份用户的详细信息,以及他们的爱好列表。在 index.ejs
中,模版可能看起来如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><%= user.name %>'s Profile</title>
</head>
<body>
<h1>用户姓名: <%= user.name %></h1>
<p>年龄: <%= user.age %></p>
<h2>爱好</h2>
<ul>
<% user.hobbies.forEach(function(hobby) { %>
<li><%= hobby %></li>
<% }) %>
</ul>
</body>
</html>
在路由中,我们可以这样设置:
app.get('/user', (req, res) => {
const user = {
name: '张三',
age: 28,
hobbies: ['阅读', '旅行', '摄影']
};
res.render('index', { user: user });
});
此时,当您访问 /user
路由时,将渲染一个显示用户信息和爱好的页面。
使用局部变量
在使用模板时,您还可以将不同的局部变量传递到模板,以进一步组织代码。例如:
app.get('/hello', (req, res) => {
const name = 'Alice';
res.render('hello', { name: name });
});
在 hello.ejs
中,您可以这样使用:
<h1>你好,<%= name %>!</h1>
总结
通过本节的学习,我们了解到如何在使用 Express.js 渲染模板时传递各种变量,包括简单类型、对象和数组。有效的使用变量能够极大增强模板的动态性和可读性。在实际开发中,这种方法使得我们能够创建出交互性更强、内容更加丰富的 Web 应用。
在下一章中,我们将继续讨论如何将 Node.js 应用部署到生产环境,包括如何优化应用性能和安全性。请继续关注!