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

EJS输出标签含感叹号触发SyntaxError问题求助

问题分析与解决

问题核心

在Node.js环境的localhost:3000运行EJS代码时,三元表达式中带感叹号的字符串会触发SyntaxError: Invalid or unexpected token,移除感叹号则正常运行,尝试多种转义方式均无效。

代码复现

<body>
    <h1>Home Page</h1>
    <ul>
        <li>Name: <%= restaurant.name %></li>
        <li>Address: <%= restaurant.address %></li>
        <li>Phone: <%= restaurant.phone %></li>
        <li>
            <%= restaurant.isOpen === true ? "Yes, we are open!" : "No, we are
            closed" %>
        </li>
    </ul>
</body>

原因解析

问题出在多行字符串的写法上:你在双引号内将"No, we are closed"拆成了两行,普通单/双引号不支持原生多行字符串,EJS编译时会把换行符和后续缩进当成语法的一部分,结合感叹号后触发了解析器的误判,导致语法错误。转义方式无效是因为问题根源不在感叹号本身,而是多行字符串的解析逻辑冲突。

解决方案

方案1:将字符串写在同一行

把三元表达式的两个分支字符串都放在一行,避免换行导致的解析问题:

<li>
    <%= restaurant.isOpen ? "Yes, we are open!" : "No, we are closed" %>
</li>

方案2:使用模板字符串(反引号)

ES6模板字符串支持原生多行写法,用反引号包裹字符串即可正常解析:

<li>
    <%= restaurant.isOpen ? `Yes, we are open!` : `No, we are
    closed` %>
</li>

方案3:升级EJS版本

部分旧版EJS对多行字符串+特殊字符的解析存在bug,执行npm install ejs@latest升级到最新稳定版也可能解决该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:42:43