首页 > 其他分享 >第8章 Express的模板引擎

第8章 Express的模板引擎

时间:2024-07-22 20:56:28浏览次数:8  
标签:Express Handlebars app Pug 引擎 模板 EJS

在Express应用中,模板引擎是一个重要的工具,它允许你使用静态模板文件生成动态的HTML。模板文件通常包含占位符变量和表达式,这些变量和表达式在渲染时会被实际数据替换。使用模板引擎可以使得前端代码和后端逻辑分离,提升开发效率和代码维护性。

本章节将详细介绍如何在Express中使用三种常见的模板引擎:EJS、Pug和Handlebars。通过学习本章内容,你将能够熟练地在Express应用中集成和使用这些模板引擎。

1. 使用 EJS

EJS(Embedded JavaScript)是一种简单的模板语言,它使用JavaScript语法嵌入到HTML中,使得前端页面动态化。

安装与配置

首先,我们需要安装EJS模块:

npm install ejs

然后,在Express应用中配置EJS作为模板引擎:

const express = require('express');
const app = express();

// 设置EJS为模板引擎
app.set('view engine', 'ejs');
app.set('views', './views'); // 设置模板文件存放目录

app.get('/', (req, res) => {
    res.render('index', { title: 'Express EJS Example', message: 'Hello, EJS!' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
创建EJS模板

views目录下创建一个名为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><%= message %></h1>
</body>
</html>

在上面的模板中,<%= %>用于输出变量的值。渲染时,titlemessage变量会被替换为实际的数据。

传递数据和逻辑

你可以在EJS模板中使用JavaScript逻辑,比如条件判断和循环:

<body>
    <h1><%= message %></h1>
    <% if (user) { %>
        <p>Welcome, <%= user.name %>!</p>
    <% } else { %>
        <p>Please log in.</p>
    <% } %>
</body>
2. 使用 Pug

Pug(原名Jade)是一种简洁的模板引擎,通过缩进表示HTML的嵌套结构,语法简洁优雅。

安装与配置

首先,安装Pug模块:

npm install pug

然后,在Express应用中配置Pug作为模板引擎:

const express = require('express');
const app = express();

// 设置Pug为模板引擎
app.set('view engine', 'pug');
app.set('views', './views'); // 设置模板文件存放目录

app.get('/', (req, res) => {
    res.render('index', { title: 'Express Pug Example', message: 'Hello, Pug!' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
创建Pug模板

views目录下创建一个名为index.pug的模板文件:

doctype html
html
    head
        title= title
    body
        h1= message

Pug的缩进表示HTML标签的嵌套,=用于插入变量的值。

传递数据和逻辑

你可以在Pug模板中使用条件判断和循环:

body
    h1= message
    if user
        p Welcome, #{user.name}!
    else
        p Please log in.
3. 使用 Handlebars

Handlebars是一种逻辑少的模板语言,设计上强调了保持模板的清晰性和简单性。

安装与配置

首先,安装Handlebars模块:

npm install hbs

然后,在Express应用中配置Handlebars作为模板引擎:

const express = require('express');
const app = express();

// 设置Handlebars为模板引擎
app.set('view engine', 'hbs');
app.set('views', './views'); // 设置模板文件存放目录

app.get('/', (req, res) => {
    res.render('index', { title: 'Express Handlebars Example', message: 'Hello, Handlebars!' });
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});
创建Handlebars模板

views目录下创建一个名为index.hbs的模板文件:

<!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>{{message}}</h1>
</body>
</html>

Handlebars使用双花括号{{ }}来插入变量的值。

传递数据和逻辑

Handlebars模板中也可以使用条件判断和循环:

<body>
    <h1>{{message}}</h1>
    {{#if user}}
        <p>Welcome, {{user.name}}!</p>
    {{else}}
        <p>Please log in.</p>
    {{/if}}
</body>

模板引擎是Express应用中不可或缺的一部分,熟练掌握这些技术能够让你更高效地开发和维护Web应用。

标签:Express,Handlebars,app,Pug,引擎,模板,EJS
From: https://blog.csdn.net/imdeity/article/details/140300443

相关文章

  • luoguP3379 【模板】最近公共祖先(LCA)
    思路可以用倍增法去解决问题代码#include<bits/stdc++.h>usingnamespacestd;intn,m,root,parent[30][600005],dep[600005],head[1000005];intlog_v;intcnt=0;structe{ intto,next;}edge[1000005];intgetint(){ charch='*'; while(!isdi......
  • 手写Kd树(C++模板非递归实现)
    手写Kd树(C++模板非递归实现)1.Kd树1.1Kd树简介1.2Kd树的建立1.3Kd树的查找2.C++完整代码实现3.测试代码3.1代码实现3.2测试结果4.与PCL中的Kd树做对比本文实现的Kd树实现参考了高翔博士的书《自动驾驶与机器人中的slam技术从理论到实践》;高博士原书中是递归......
  • [Vani有约会] 雨天的尾巴 /【模板】线段树合并
    [Vani有约会]雨天的尾巴/【模板】线段树合并题目背景深绘里一直很讨厌雨天。灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切。虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以及田地里的粮食被弄得一片狼藉。无......
  • 编辑距离与滚动数组优化 - 二维动态规划模板
    题目:编辑距离。思路显然,定义\(f[i][j]\)表示字符串\(a\)中前\(i\)个字符到字符串\(b\)中前\(j\)个字符的编辑距离。那么对于\(a_i=b_j\)时,我们对当前位无需进行任何编辑操作,则\(f[i][j]=f[i-1][j-1]\)。如果\(a_i\neb_j\),那么我们就要对当前位进行编辑:......
  • 易优CMS模板标签downloadpay下载付费
    [基础用法]标签:downloadpay描述:下载模型实现付费,会员专享,会员付费下载,在使用之前先频道模型->下载模型->编辑->开启下载付费使用方法:付费标签需要加载/template/pc/system/download_pay.htm模板文件下载地址:点击下载,该文件放在pc模板目录......
  • 易优CMS模板标签type指定栏目输出单页模型栏目的详细内容
    [基础用法]标签:type描述:获取指定栏目信息用法:{eyou:typetypeid='栏目ID'empty='暂时没有数据'}<ahref="{$field.typeurl}">{$field.typename}</a>{/eyou:type}属性:typeid=''指定栏目ID,如果没有指定则获取当前列表页的栏目IDtype='self'表示当前栏目ty......
  • 最长不降子序列 n log n 方案输出与 Dilworth 定理 - 动态规划模板
    朴素算法不必多说,\(O(n^2)\)的暴力dp转移。优化算法时间为\(O(n\logn)\),本质是贪心,不是dp。思路是维护一个单调栈(手写版),使这个栈单调不降。当该元素\(\ge\)栈顶元素时,把这个元素压入栈中。否则,在单调栈中找到第一个大于该元素的项,把这一项改为这个元素。(因为要......
  • DevExpress中文教程 - 如何在.NET MAUI应用中实现Material Design 3?
    DevExpress .NETMAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件,该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。获取DevExpressv24.1正式版下载DevExpress技术交流群10:532598169      欢迎一起进群讨论Mate......
  • 虚幻引擎 | 最全 布料模拟 参考教程
    1.刷权重Clothing面板刷权重,刷完需要Applyclothingdata.https://www.youtube.com/watch?v=_BAyvKq_fsE&t=328s 有了布料数据的SkeletonMesh模型无法再导出DCC,要先removeclothingdata2.PhysicalAssetshttps://www.youtube.com/watch?v=aulYVEkXNfk PhysicalAsse......
  • 【搜索】【模板】 IDDFS
    IDDFS使用场景使用dfs由于状态量太大会TLE,bfs会MLE。答案必须很小,一般在20以内。算法原理设置dfs的搜索深度限制\(dep\),dfs穷举\(dep\)层的答案。若在\(dep\)层找到满足条件的情形,则\(dep\)则为答案,否则\(dep\leftarrowdep+1\),继续搜索。优......