我修复了ejs的一个奇怪的语法错误,我想知道问题是什么

I fixed a weird syntax error with ejs, and I'm wondering what the issue was

提问人:Phillip Feldman 提问时间:2/24/2023 更新时间:3/10/2023 访问量:49

问:

我正在构建一个博客网页作为个人项目,作为学习 Web 开发的一种方式,我遇到了这个奇怪的语法错误。我修改了我的代码,以便登录和注销的用户将获得不同的导航栏。以下代码导致了错误:

<% if(firstp==="Welcome"){%>
        <%-include('./partials/nav2.ejs')%>
    <%}%>
    <%else%>
    <%{ %>
        <%-include('./partials/nav.ejs')%>
    <%  } %>

登录用户将获得 nav2,而注销的用户将发送到 else 子句并查看 nav。注销用户收到以下错误:

编译 ejs 时 C:\Users\[已编辑]\browse.ejs 中出现意外的令牌“else”

登录用户将收到相同的错误,或者根据我编写ejs的确切方式,将收到类似“缺少括号”的内容(我忘记复制错误以及如何准确复制它)。以下代码有效:

<% if(firstp==="Welcome"){%>
        <%-include('./partials/nav2.ejs')%>
    <%}else{ %>
        <%-include('./partials/nav.ejs')%>
    <%  } %>

两者都是有效的 JavaScript 语法,那么是什么原因呢?

HTML 节点 .js 语法错误 EJS

评论


答:

3赞 Matt 2/24/2023 #1

该错误与 EJS 如何为标签生成 Javascript 代码有关,每个标签都以分号为前缀;

第一个例子相当于:

; if(firstp==="Welcome"){
; include('./partials/nav2.ejs')
; }
; else
; {
; include('./partials/nav.ejs')
; }

分号用于将 Javascript 语句与前一个标记分隔开来,但在本例中,分号结束语句。 在更常见的 JS 格式中,这是正在发生的事情:if

if(firstp==="Welcome"){
  include('./partials/nav2.ejs'); 
};
else;
{
  include('./partials/nav.ejs'); 
}

工作示例仅在语句大括号内注入分号,这不会终止语句if{}if

; if(firstp==="Welcome"){
; include('./partials/nav2.ejs')
; } else {
; include('./partials/nav.ejs')
; }