EJS: ‹%= по сравнению с ‹%-

Я использую EJS с веб-сервером Node.js, который я создаю. Я вижу много примеров EJS, в которых иногда используется <%= при выводе HTML или строк, тогда как в других примерах (иногда в пределах одного и того же шаблона) используется <%-.

Я попытался сослаться на документы EJS и руководство по началу работы, но оба не предоставили информации о нотации <%-. Кроме того, мои попытки поиска в Google не дали ничего полезного. Спасибо!


person Matt Huggins    schedule 13.06.2012    source источник


Ответы (5)


Версия EJS, которую вы, вероятно, используете в Node, отличается от версии, которую вы видите в коде Google; в версии Node <%= экранирует HTML-код, попадающий в буфер, а <%- — нет. источник

person Michelle Tilley    schedule 14.06.2012
comment
Привет, я искал тот же вопрос, но что означает экранирование HTML, попадающего в буфер? Что такое буфер? - person holyxiaoxin; 09.02.2015
comment
@holyxiaoxin Обычно это буфер, который сбрасывается через сокет в браузер пользователя. - person Michelle Tilley; 10.02.2015
comment
@holyxiaoxin 'k   k' внутри ‹%= будет записано как 'k #160; к'. Это будет экранированный HTML. Внутри ‹%- это приведет к пробелу 'k k' - person Shwetabh Shekhar; 06.02.2018

С http://ejs.co/:

<% 'Scriptlet' tag, for control-flow, no output
<%= Outputs the value into the template (HTML escaped)
<%- Outputs the unescaped value into the template
person Joey Nelson    schedule 01.08.2017

<%= *param* %> используется для передачи данных из представления в контроллер и наоборот

в то время как <%- %> должен включать другой код

Для моего проекта

введите здесь описание изображения

person Mark Sparrow    schedule 04.03.2020

С помощью <%= вы, если бы отображали некоторые переменные, содержащие строку, содержащую HTML-код, он не отображал бы этот HTML-код, а отображал бы его как текст, чтобы избежать атак межсайтового скриптинга.
С минусом ( <%- ) вы можете избежать этого. и действительно отображать HTML-код.

person Darina Sergeivna    schedule 01.03.2019
comment
Я заметил, что вы взяли это дословно из объяснения Максимилиана Шварцмюллера в его курсе NodeJS;) - person nCardot; 11.03.2020

1) Вариант первый: файл ejs импортирует переменную с именем noob, которая содержит, например, значение req.body. <p><%= noob %></p>

2) Второй вариант: файл ejs, импортирующий частичный шаблон с именем myPartial.ejs, который находится внутри папки partials. <p><%- include("./partials/myPartial") %></p>

3) Вариант третий: файл ejs использует код javascript:

<p>
<% while (i < 10) { %>
  myVar += "The number is " + i;
  i++;
<% } %>
</p>
person Abdulhakim Altunkaya    schedule 07.07.2021