如何在 express.js 玉模板中呈现 markdown?

Posted

技术标签:

【中文标题】如何在 express.js 玉模板中呈现 markdown?【英文标题】:How can I render markdown in express.js jade template? 【发布时间】:2011-09-15 12:50:54 【问题描述】:

我使用 express js 框架。我有一个来自数据库的降价字符串,并希望在我的玉模板中将其呈现为 html。我安装了 node-markdown 并希望以这种方式呈现它:

app.js

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

template.jade

- each note in todo.notes
  div= md(note.string)

但是,它并没有打印出任何东西......对此有什么建议吗?

谢谢!

编辑:自己解决了,只是忘记将 md 变量放入我的视图中...

【问题讨论】:

我建议您回答并接受您自己的问题。并提到如何将 md 变量注入到视图中。 您能否就如何实现这一目标发表您的答案? 对于 2016 年来到这里的人:Jade 现在是 Pug 【参考方案1】:

“过滤器”的概念将“编译器”或“过滤器”访问者暴露给翡翠模板的一部分。

查看:https://github.com/visionmedia/jade

过滤器

:sass 必须安装 sass.js

:less 必须安装 less.js

:markdown 必须安装markdown-js 或node-discount

:cdata

:coffeescript 必须安装 coffee-script

您可以在模板中通过以下语法使用它: http://jade-lang.com/reference/filters/

【讨论】:

虽然这个答案是正确的,但它并没有具体回答这个问题,因为Filters are compile time. This makes them fast but means they cannot support dynamic content.【参考方案2】:

我自己找到了解决方案:

问题是,我忘记将 md 变量传递到我的视图中。因此,要让 node-markdown 模块运行,您必须执行以下操作:

app.js 标头

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

app.js 路由(传递 md 变量)

...
res.render('template',  vars:  foo: foo_.bar , md: md, layout: false );
...

template.jade

...
div!= md(note.string)
...

【讨论】:

感谢您发布您所做的事情。我可以让我的降价渲染到页面上,但所有输出都作为 html 实体,所以你可以看到页面上的实际标记。你遇到过这样的事吗? 我知道为什么它输出为转义的 html - 我没有 div!= md(str) 来阻止渲染器清理 html。 如果您经常使用变量,将其写入 app.locals 可能是个好主意?这样,您也可以从视图中以 md 的形式访问它,而不必将其传递给每个视图。 根据您的渲染需求,您不需要div,可以像这样简单地使用它:!= md(note.string)【参考方案3】:

节点模块node-markdown 已弃用。 marked 是高级新版本。你可以这样试试

var md = require('marked');

在您的路由器内部

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

在你的玉模板里面

div!= md(note.string)

【讨论】:

【参考方案4】:

如果您在 Jade 文件中使用 Marked,您可以执行以下简单操作:

extends layout

block content
    include:md ../../public/docs/getting-started.md

【讨论】:

这对我不起作用。我得到类似md is not a filter【参考方案5】:

您可以使用marked,然后您可以按照以下说明进行操作:

app.js

app.locals.md = require('marked').setOptions( breaks: true )

现在您可以在模板jade上每次调用该函数,例如:

template.jade

- each note in todo.notes
    div!= md(note.string)

【讨论】:

以上是关于如何在 express.js 玉模板中呈现 markdown?的主要内容,如果未能解决你的问题,请参考以下文章

玉模板引擎,如何使用layout.jade?

如何将对象数组传递给玉模板?

res.render 中的 Express-Node JS 车把模板:如何迭代?

如何在带有 nunjucks 的 Express 框架中使用 HTML - 没有玉

Express.js 应用程序错误:Flash 消息未呈现

为啥我的 json 对象的 `email` 属性不会显示在我的玉模板中?