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

Node.js Express项目adm.ejs编译报Unexpected token catch错误排查

报错根本原因

问题源于对 EJS 注释规则的误解:

  • EJS 逻辑在服务端解析,优先级高于 HTML 语法,HTML 注释<!-- -->无法屏蔽 EJS 逻辑代码。
  • 你在模板中两处用 HTML 注释包裹的 EJS 开循环标签:
    <!--<% for(var i=0 ; i < voters.length; i++) { %> -->
    <!--<% for(var i=0 ; i < candidates.length; i++) { %>-->
    会被 EJS 正常解析执行,开启两个没有对应闭合<% } %>的 for 代码块。
  • 未闭合的代码块会导致 EJS 拼接生成的可执行 JS 函数存在结构语法错误,编译阶段会误把 EJS 内部错误捕获逻辑中的catch关键字识别为模板内的非法 token,最终抛出Unexpected token catch报错。
  • 你项目中其他页面运行正常,就是因为这些页面没有这类注释写法;你检查过的 include 语法、路由逻辑也确实没有问题,问题完全出在模板内部的 EJS 逻辑注释方式上。
修复方案
  • 注释 EJS 逻辑必须使用 EJS 原生注释语法<%# 注释内容 %>,这类注释不会被服务端解析执行。
  • 针对现有模板的修改:将两处被 HTML 注释包裹的循环开标签替换为 EJS 注释格式,即:
    • 把 voter 表格处的注释行改为<%# for(var i=0 ; i < voters.length; i++) { %>
    • 把 candidate 表格处的注释行改为<%# for(var i=0 ; i < candidates.length; i++) { %>
  • 修改后 EJS 会直接跳过这些循环逻辑,不会生成未闭合的代码块,即可正常编译页面。

内容的提问来源于stack exchange,提问作者Janit Lodha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 18:15:04