0

0

EJS模板中语法错误:缺少右括号与未闭合的

聖光之護

聖光之護

发布时间:2026-01-04 15:10:02

|

891人浏览过

|

来源于php中文网

原创

EJS模板中语法错误:缺少右括号与未闭合的 <% 标签修复指南

本文详解 ejs 模板中 `syntaxerror: missing ) after argument list` 的根本原因——混用 ejs 输出语法 `` 与 javascript 表达式语法,重点修复 `foreach` 循环标签缺失、url 插值错误等常见问题。

该错误通常出现在 EJS 模板编译阶段,核心原因有两个:

  1. EJS 标签未正确闭合:如 <% formData.forEach(...) 缺少起始 <% 或结束 %>;
  2. 在 JavaScript 字符串插值中错误嵌套 <%= %>:例如 <a href=/update/${<%= index %>}> 是非法的——EJS 不支持在模板字符串(`...${...}`)中嵌套 <%= %>,因为 <%= %> 本身已在服务端执行并输出纯文本,而 ${} 是客户端 JS 语法,二者运行时机与作用域完全不同。

✅ 正确写法应严格区分:

  • <% ... %>:用于执行 JavaScript 逻辑(如循环、条件判断),不输出内容
  • <%= ... %>:用于输出转义后的变量值(如 <%= index %>);
  • <%- ... %>:用于输出非转义的原始 HTML(慎用)。

以下是修复后的完整 update.ejs(或列表页)代码示例:

绘蛙
绘蛙

电商场景的AI创作平台,无需高薪聘请商拍和文案团队,使用绘蛙即可低成本、批量创作优质的商拍图、种草文案

下载
<html>
<head>
  <title>Form Data</title>
</head>
<body>
  <h1>Form Data</h1>
  <table border="2">
    <tr>
      <th>Name</th>
      <th>Email</th>
      <th>Message</th>
      <th>Actions</th>
    </tr>
    <!-- ✅ 正确:使用 <% %> 包裹整个 forEach 逻辑 -->
    <% formData.forEach(function(data, index) { %>
      <tr>
        <td><%= data.name %></td>
        <td><%= data.email %></td>
        <td><%= data.message %></td>
        <td>
          <!-- ✅ 正确:URL 中直接使用 <%= index %> 插入值,无需模板字符串 -->
          <a href="/update/<%= index %>">Update</a>
          <a href="/delete/<%= index %>">Delete</a>
        </td>
      </tr>
    <% }); %>
  </table>
</body>
</html>

⚠️ 注意事项:

  • 不要写成 `/update/${<%= index %>}` —— 这会导致 EJS 解析器在遇到 <%= index %> 时尝试将其作为 JS 表达式的一部分解析,从而引发 missing ) after argument list 等语法错误;
  • 所有 EJS 标签必须成对出现:<% 对应 %>,<%= 对应 %>,不可遗漏或错位;
  • 若 formData 可能为 undefined 或非数组,请在渲染前做服务端校验(如 if (Array.isArray(formData)) { ... }),避免运行时错误;
  • 推荐使用更现代的 for...of 或 forEach 写法,并配合 EJS 的 <%_ %>(去除空白行)提升可读性(非必需但更规范)。

总结:EJS 是服务端模板引擎,所有 <%= %> 和 <% %> 都在 Node.js 环境中被提前编译执行,最终生成纯 HTML 发送给浏览器。切勿将前端 JS 语法(如模板字符串、箭头函数)与 EJS 语法混淆使用。遵循“逻辑用 <% %>,输出用 <%= %>”原则,即可避免绝大多数语法错误。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

847

2023.08.22

php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

267

2025.12.04

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

760

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

221

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1567

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

651

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1228

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1204

2024.04.29

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

26

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 10.2万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 3.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号