我正在玩我的第一个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
文件中的markdown然后将HTML传递给视图来显示来实现这一点,但我不知道,这看起来有点麻烦。
有没有办法将变量传递给Jade过滤器?
答案 0 :(得分:19)
您可以使用从节点传入jade的函数来执行此操作:
var md = require("node-markdown").Markdown;
然后将其作为本地传递到视图中:
res.render('view', { md:md, markdownContent:data });
然后通过调用函数:
在玉视图中渲染它!= md(markdownContent)
答案 1 :(得分:15)
不推荐使用节点模块node-markdown
。 marked是高级新版本。你可以试试这个
var md = require('marked');
在路由器内
res.render('template', { md: md });
在您的玉石模板中
div!= md(note.string)
答案 2 :(得分:7)
我不认为玉可以开箱即用。实现它的一种方法可能比预渲染markdown稍微清晰一点,就是创建一个名为markdown
的辅助函数,它接受一个markdown字符串并返回HTML。然后你可以做类似
section
!= markdown(md)
当您渲染玉石模板时,降价功能应包含在locals
数据中,并且可以直接使用降价库将降价语法转换为HTML。
答案 3 :(得分:1)
如果您使用的是Scalate's Jade support,则可以输入:
section
:&markdown
#{md}
您还可以使用以下内容导入外部文件:
section
:&markdown
#{include("MyFile.md")}