将原始Markdown文本传递给Jade

nic*_*ckf 25 markdown node.js express pug

我正在玩我的第一个Node.js Express应用程序,正如每个程序员都知道的那样,在测试新框架时你应该首先构建的是博客!无论如何,我想在Markdown中写文章然后在视图中呈现它.我看到Jade允许在视图内部使用过滤器完成此操作,但我无法使其正常工作.

为了简化这种情况,这里是我正在谈论的一个例子.

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

//article.jade
section
    :markdown
        #{md}
Run Code Online (Sandbox Code Playgroud)

但是,这产生了这样的结果:<section><h1>{md}</h1></section>......它并没有代替我传给它的变量.

然后我尝试了这个:

//article.jade
section
    :markdown
        !{md}
Run Code Online (Sandbox Code Playgroud)

输出是这样的:

<section><p>Hello World!

*Woo*</p></section>
Run Code Online (Sandbox Code Playgroud)

所以,现在它没有解析降价!

我已经能够通过解析app.js文件中的markdown 然后将HTML传递给视图来显示来实现这一点,但我不知道,这似乎有点混乱.

有没有办法将变量传递给Jade过滤器?

mar*_*man 19

您可以使用从节点传入jade的函数来执行此操作:

var md = require("node-markdown").Markdown;
Run Code Online (Sandbox Code Playgroud)

然后将其作为本地传递到视图中:

res.render('view', { md:md, markdownContent:data });
Run Code Online (Sandbox Code Playgroud)

然后通过调用函数在jade视图中呈现它:

!= md(markdownContent)
Run Code Online (Sandbox Code Playgroud)


Fiz*_*han 15

node-markdown不推荐使用节点模块.在显着的是先进的新版本.你可以这样试试

var md = require('marked');
Run Code Online (Sandbox Code Playgroud)

在您的路由器内

res.render('template', { md: md });
Run Code Online (Sandbox Code Playgroud)

在你的玉模板里面

div!= md(note.string)
Run Code Online (Sandbox Code Playgroud)


Pet*_*ons 7

我不认为玉可以开箱即用.实现它的一种方法可能比预渲染markdown稍微清晰一点,就是创建一个调用帮助函数markdown,该函数采用markdown字符串并返回HTML.然后你可以做类似的事情

section
    != markdown(md)
Run Code Online (Sandbox Code Playgroud)

locals渲染jade模板时,markdown函数应包含在数据中,并且可以直接使用markdown库将markdown语法转换为HTML.

  • 所以,他们决定实现一个专用的`:markdown`过滤器,但是没有选择提供一种将外部Markdown文件加载到这个过滤器的机制?ಠ_ಠ (3认同)