【问题标题】:How can I render markdown in express.js jade template?如何在 express.js 玉模板中呈现 markdown?
【发布时间】: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

标签: parsing node.js render markdown express


【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-31
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多