ошибка оператора условия переключения с запятой внутри шаблона ejs

#node.js #express #ejs

#node.js #выразить #ejs

Вопрос:

я попытался переключить условие внутри шаблона 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%>  
<%} %> 
  

и ошибка, которую я получил :

Ошибка синтаксиса: неожиданный токен ‘;’ в /Users/ismail / Desktop / expressjs-пустой /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)
  

Комментарии:

1. Код, которым вы поделились, не связан с ошибкой, которую вы получаете. Символ, упомянутый в ошибке, нигде не присутствует в вашем коде.

Ответ №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'});
  

Комментарии:

1. я изменил его на условие if, и оно работает просто идеально

2. Ну, это, конечно, другой способ сделать это. Либо опубликуйте свое решение с помощью операторов if в качестве ответа, примите мой ответ или удалите свой вопрос. Спасибо 🙂

3. @eol можете ли вы, пожалуйста, объяснить, почему ваш ответ работает, а не приведенный выше, написанный автором?