Подтвердить что ты не робот

Передача сырого текста Markdown в Jade

Я играю с моим первым приложением Node.js Express, и, как знает каждый программист, первое, что вы должен строиться при тестировании новой структуры - это блог! В любом случае, я хотел бы написать статьи в Markdown, а затем отобразить их в представлении. Я видел, что Jade позволяет делать это внутри самого представления, используя фильтры, но я не могу заставить это работать.

Чтобы упростить ситуацию, вот пример того, о чем я говорю.

//app.js
res.render("article", {
    md : "Hello World!\n\n*Woo*"
});

//article.jade
section
    :markdown
        #{md}

Но это выводит это: <section><h1>{md}</h1></section>... он не заменяет переменные, которые я передал ему.

Затем я попробовал это:

//article.jade
section
    :markdown
        !{md}

И вывод следующий:

<section><p>Hello World!

*Woo*</p></section>

Итак, теперь он не разбирает уценку!

Мне удалось заставить это работать, проанализировав уценку в файле app.js, а затем передав HTML в представление для отображения, но я не знаю, что кажется немного беспорядочным.

Есть ли способ передать переменные в фильтры Jade?

4b9b3361

Ответ 1

Вы можете сделать это с помощью функции, переданной в jade из node:

var md = require("node-markdown").Markdown;

Затем передайте его в представление как локальное:

res.render('view', { md:md, markdownContent:data });

Затем визуализируйте его в представлении нефрита, вызвав функцию:

!= md(markdownContent)

Ответ 2

Модуль node node-markdown устарел. marked - новая версия. Вы можете попробовать как это

var md = require('marked');

Внутри вашего маршрутизатора

res.render('template', { md: md });

Внутри вашего нефритового шаблона

div!= md(note.string)

Ответ 3

Я не думаю, что нефрит может сделать это из коробки. Один из способов добиться этого, который может чувствовать себя немного чище, чем предварительная рендеринг, заключается в создании вспомогательной функции под названием markdown, которая берет строку уценки и возвращает HTML. Тогда вы можете сделать что-то вроде

section
    != markdown(md)

Функция уценки должна быть включена в данные locals при визуализации шаблона нефрита и может напрямую использовать библиотеку меток для преобразования синтаксиса уценки в HTML.

Ответ 4

Если вы используете поддержку Scalate Jade, вы можете ввести:

section
    :&markdown
        #{md}

Вы также можете импортировать внешние файлы с помощью:

section
    :&markdown
        #{include("MyFile.md")}