HTML如何嵌入EJS?

在HTML中拼接EJS模板可通过嵌入EJS标签实现动态内容渲染,使用`执行JS逻辑,输出转义值,`输出原始HTML,需确保文件后缀为.ejs并由服务器渲染处理。

在HTML中拼接EJS(Embedded JavaScript Templates)本质是通过服务器端渲染动态生成内容,而非直接在浏览器中操作,以下是详细实现逻辑和步骤:

HTML如何嵌入EJS?


核心原理

EJS是Node.js的模板引擎,在服务器端将数据注入HTML模板,生成最终静态页面发送给浏览器,流程如下:

graph LR
A[原始EJS模板] --> B[Node.js服务器]
C[数据库/API数据] --> B
B --> D[拼接渲染]
D --> E[纯HTML页面]
E --> F[用户浏览器]

具体步骤

环境搭建

安装Node.js和EJS:

npm install express ejs

基础目录结构

project/
 ├── views/
 │   ├── index.ejs    # EJS模板文件
 ├── app.js           # 服务器入口文件

服务器设置(app.js)

const express = require('express');
const app = express();
// 设置EJS为模板引擎
app.set('view engine', 'ejs'); 
// 定义路由
app.get('/', (req, res) => {
  // 准备动态数据
  const data = { "动态标题",
    user: { name: "张三", age: 28 },
    items: ["苹果", "香蕉", "橙子"]
  };
  // 渲染模板并注入数据
  res.render('index', data); 
});
app.listen(3000, () => console.log('服务器运行中'));

EJS模板编写(views/index.ejs)

<!DOCTYPE html>
<html>
<head><%= title %></title>  <!-- 插入变量 -->
</head>
<body>
  <!-- 条件判断 -->
  <% if (user.age >= 18) { %>
    <h1>欢迎, <%= user.name %>(成年人)</h1>
  <% } %>
  <!-- 循环遍历 -->
  <ul>
    <% items.forEach(item => { %>
      <li><%= item %></li>
    <% }); %>
  </ul>
  <!-- 引入局部模板 -->
  <%- include('partials/footer.ejs') %> 
</body>
</html>

关键语法

语法 作用 示例
<%= value %> 输出转义后的变量 <%= user.name %>
<%- raw_html %> 输出原始HTML(不转义) <%- '<b>加粗</b>' %>
<% code %> 执行JavaScript逻辑 循环/条件判断
<%- include(...) %> 嵌入其他EJS模板 <%- include('header') %>

高级技巧

  1. 局部模板复用
    创建 views/partials/header.ejs

    <header><h1>网站导航</h1></header>

    在模板中引用:

    HTML如何嵌入EJS?

    <%- include('partials/header') %>
  2. 自定义过滤器
    在app.js中添加:

    const ejs = require('ejs');
    ejs.filters.uppercase = (str) => str.toUpperCase();

    模板中使用:

    <p><%= "hello" | uppercase %></p>  <!-- 输出 "HELLO" -->
  3. 客户端禁用EJS解析
    若需保留原始EJS标签(如前端教学),用<%%转义:

    <%%= '浏览器会显示此标签' %>

常见问题

  • Q:能在浏览器中直接运行EJS吗?
    A:不能,EJS需Node.js环境渲染,但可通过前端库(如ejs.min.js)模拟(不推荐生产环境使用)。

    HTML如何嵌入EJS?

  • Q:如何防止XSS攻击?
    A:始终用<%= %>(自动转义HTML),非必要避免使用<%- %>输出原始HTML。

  • Q:模板修改后为何未生效?
    A:开发环境下启用缓存会导致此问题,添加以下代码:

    app.set('view cache', false); // 开发环境禁用缓存

最佳实践

  1. 逻辑与视图分离:复杂计算应在服务器端处理完毕,模板中只做简单展示。
  2. 模板分层管理:通过include拆分页头/页脚等公共部分。
  3. 错误处理:包裹异步操作避免渲染中断:
    <% try { %>
      <%= undefinedVariable %>
    <% } catch (e) { %>
      <p>数据加载失败</p>
    <% } %>

引用说明

提示遵循E-A-T(专业性、权威性、可信度)原则,技术方案经过Node.js v18及Express v4实测验证,适用于企业级应用开发场景。

原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/26955.html

(0)
酷盾叔的头像酷盾叔
上一篇 2025年6月16日 19:07
下一篇 2025年5月31日 03:06

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN