You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JS逻辑在Express+EJS的页面中以文本形式显示?

解决EJS局部视图逻辑代码显示为文本的问题

嘿,我之前也碰到过一模一样的问题!这明显是你的EJS局部视图没有被正确解析,导致模板里的<% ... %>这类逻辑代码直接被当成普通文本输出了。咱们一步步来排查解决:

  • 用正确的EJS语法引入局部视图
    你得确保在主模板(比如index.ejs或者layout.ejs)里用<%- include('局部视图路径') %>来引入contact视图,注意是<%-而不是<%或者<%=:

    • <%-:会把包含的模板内容解析后输出,保留所有HTML和执行逻辑
    • <%=:会转义HTML内容,把逻辑代码当成文本输出
    • <%:只执行逻辑但不输出内容
      举个正确的引入示例:
    <!-- 假设contact.ejs在views/partials目录下 -->
    <%- include('./partials/contact') %>
    
  • 确认Express的EJS配置无误
    检查你的Express应用是否正确设置了EJS作为模板引擎,并且指定了正确的视图目录:

    const path = require('path');
    const express = require('express');
    const app = express();
    
    // 设置EJS为模板引擎
    app.set('view engine', 'ejs');
    // 指定视图文件所在目录
    app.set('views', path.join(__dirname, 'views'));
    

    另外,你的局部视图文件必须是.ejs后缀(比如contact.ejs),不能用.html,否则EJS不会解析里面的模板逻辑。

  • 检查局部视图的语法完整性
    从你提供的代码片段来看,结尾的逻辑好像没写完:<% } else { %><h2 class="errors-heading">Oops, please cor...,是不是缺少了闭合的<% } %>?如果模板里有未闭合的逻辑块,EJS会无法正确解析,导致逻辑代码直接输出。
    完整的逻辑代码应该是这样的:

    <div class="form-header">
      <% if (Object.keys(errors).length === 0) { %>
        <h2>Send us a message aa</h2>
      <% } else { %>
        <h2 class="errors-heading">Oops, please correct the errors below</h2>
      <% } %>
    </div>
    

    确保所有的<%都有对应的%>,逻辑结构是完整闭合的。

  • 禁用模板缓存(开发环境)
    开发时有时候模板缓存会导致修改不生效,你可以在Express里禁用缓存:

    app.set('view cache', false);
    

    或者直接重启你的Express服务器,让最新的模板代码被加载。

内容的提问来源于stack exchange,提问作者Keith Gray

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:14:08