Как отобразить html, хранящийся в базе данных, на страницу ejs

#javascript #html #node.js #express #ejs

#javascript #HTML #node.js #экспресс #ejs

Вопрос:

Я считаю, что это очень просто, но, похоже, не могу в этом разобраться.

У меня установлен редактор Quilljs в моем веб-приложении nodejs / express, и он хранит мое описание в базе данных mysql как <p><strong>This is the quill data. How are we doing dev?</strong></p> .

Теперь моя страница ejs выглядит следующим образом :

 <% data.forEach(function(d,index){ %>
   <p> <%= d.description %> </p>
<% }) %>
 

но это, очевидно, отображает данные так, как они хранятся в базе данных (с p strong тегами и).

Что я пробовал:

  • пробовал использовать <pre> так, чтобы форматирование оставалось неизменным (просто попробуйте новичок).
  • пробовал .html() и .load() методы jquery для обновления данных в формате HTML, но безрезультатно.

Как я могу преобразовать это в html? чтобы форматированный текст печатал результирующий HTML-код, а не исходный код.

Ответ №1:

Используйте <%- вместо <%=

 <% data.forEach(function(d,index){ %>
   <p> <%- d.description %> </p>
<% }) %>
 

Вы можете посмотреть about tags paragraph, чтобы узнать больше об использовании <%= или <%- в документах ejs

Примечание: Если вы это сделаете, будьте осторожны с проблемой XSS.
И вам понадобится sanitize-html, чтобы сохранить ваш HTML-код.

ПРАВКА1

Вам не нужно присваивать его новой переменной.

 <% data.forEach(function(d,index){ %>
  <% if (d.description.length > 75) { %>
    <p> <%- d.description.substring(0, 75) %> </p>
  <% } else { %>
    <p> <%- d.description %> </p>
  <% }%>
<% }) %>
 

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

1. Это работает! Спасибо. Могу ли я использовать <%- теги in scriptlet? что-то вроде этого: <% <%- d.description %> %> ? Какова альтернатива?

2. почему вы хотите это сделать?

3. Я хочу ограничить описание, скажем, 75 буквами. Поэтому я хочу выполнить некоторые операции js над текстом в формате html, например : <% var theDesc = <%- d.description %>; var newStr; if(theDesc.length >75) { newStr = theDesc.substring(0,75); } else newStr = theDesc; %> . Возможно ли это?

4. очевидно, что если я удалю описание <%- %> вокруг d.в приведенном выше коде, это сработает. Но затем он отображает переменную следующим amp;>pamp;< Some text amp;>/pamp;< образом . Это все, что я пытаюсь сделать.

5. Огромное спасибо за это, приятель. Я довольно новичок в создании шаблонов с помощью NodeJS. И следовало бы поискать это в документе. Еще раз спасибо за ваше время.

Ответ №2:

НЕ СОХРАНЯЙТЕ HTML-КОД.

Это может доставить вам много проблем. Попробуйте создать какую-нибудь произвольную структуру данных, например json, и распечатать ее с помощью вашего EJS.

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

1. Как я уже сказал, сэр, я использую quiil editor, и он дает мне эти HTML-теги, чтобы сохранить стиль / форматирование без изменений. Не могли бы вы, пожалуйста, показать мне некоторые методы или связать меня с соответствующими статьями / документами / блогами / чем-нибудь, чтобы достичь того, что вы говорите? Это было бы очень кстати. Спасибо.

2. Вы можете сохранить формат, используя некоторый AST (абстрактное синтаксическое дерево).