【问题标题】:switch condition statement semicolon error inside ejs templateejs模板内的switch条件语句分号错误
【发布时间】:2020-08-28 22:09:39
【问题描述】:

我尝试在 ejs 模板中切换条件,但出现错误

这是我的代码:

<% switch(check) {%>
    <% case check == 'like' : %>
        <button href="#<%=item._id%>" id="like"  class="recommendation good  open-recommendation-form">
            <span class="icon-like"></span>
        </button>
        <button href="#<%=item._id%>" id="dislike"  class="recommendation bad hoverable open-recommendation-form">
            <span class="icon-dislike"></span>
        </button>
        <%break%>
    <% case check == 'dislike' : %>
        <button href="#<%=item._id%>" id="like"  class="recommendation good hoverable open-recommendation-form">
            <span class="icon-like"></span>
        </button>
        <button href="#<%=item._id%>" id="dislike"  class="recommendation bad  open-recommendation-form">
            <span class="icon-dislike"></span>
        </button>
        <%break%>
    <% default : %>
        <button href="#<%=item._id%>" id="like"  class="recommendation good hoverable open-recommendation-form">
            <span class="icon-like"></span>
        </button>
        <button href="#<%=item._id%>" id="dislike"  class="recommendation bad hoverable  open-recommendation-form">
            <span class="icon-dislike"></span>
        </button>  
    <%break%>  
<%} %> 

我得到的错误:

SyntaxError: Unexpected token ';'在 /Users/ismail/Desktop/expressjs-blank/views/dashboard/purchases.ejs 编译 ejs 时

If the above error is not helpful, you may want to try EJS-Lint:
https://github.com/RyanZim/EJS-Lint
Or, if you meant to create an async function, pass `async: true` as an option.
    at new Function (<anonymous>)
    at Template.compile (/Users/ismail/Desktop/expressjs-blank/node_modules/ejs/lib/ejs.js:632:12)
    at Object.compile (/Users/ismail/Desktop/expressjs-blank/node_modules/ejs/lib/ejs.js:368:16)
    at handleCache (/Users/ismail/Desktop/expressjs-blank/node_modules/ejs/lib/ejs.js:216:18)
    at tryHandleCache (/Users/ismail/Desktop/expressjs-blank/node_modules/ejs/lib/ejs.js:255:16)
    at View.exports.renderFile [as engine] (/Users/ismail/Desktop/expressjs-blank/node_modules/ejs/lib/ejs.js:461:10)
    at View.render (/Users/ismail/Desktop/expressjs-blank/node_modules/express/lib/view.js:135:8)
    at tryRender (/Users/ismail/Desktop/expressjs-blank/node_modules/express/lib/application.js:640:10)
    at Function.render (/Users/ismail/Desktop/expressjs-blank/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/Users/ismail/Desktop/expressjs-blank/node_modules/express/lib/response.js:1012:7)

【问题讨论】:

  • 您分享的代码与您遇到的错误无关。错误中提到的符号不在您的代码中。

标签: node.js express ejs


【解决方案1】:

switch/case 语句更改为以下内容应该可以解决问题(简化版只有一个case):

<% switch(check) {
case 'like' : %>
<button href="#<%= item._id %>" id="like" class="recommendation good  open-recommendation-form">
    <span class="icon-like">TEST</span>
</button>
<% break;
}
%>

使用以下内容渲染页面,绝对可以:

res.render('name-of-ejs-template', {item: {_id: "https://www.stackoverflow.com"}, check: 'like'});

【讨论】:

  • 我已将其更改为 if 条件,并且效果非常好
  • 这当然是另一种方法。使用 if 语句作为答案发布您的解决方案,接受我的答案或删除您的问题。谢谢你:)
  • @eol 你能解释一下为什么你的答案有效,而不是作者写的上面吗?
猜你喜欢
  • 2017-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多