如何使用Express / Node.JS使用EJS渲染markdown?

时间:2013-05-04 02:27:39

标签: node.js express markdown ejs

我一直在使用Express web framework作为Node.JS,并且一直在使用降价解析器chjj/marked来将markdown解析为HTML。我也能够使用Express渲染这个降价。我通常在我的Express项目中使用EJS模板,我希望能够使用EJS和markdown。

理想情况下,我希望能够使用通常在EJS中使用的编译时包含,其示例如下所示:

<% include header.html %>

<h3>User List -- Located in users.html</h3>
<ul id="users">
  <% users.forEach(function(user){ %>
    <li><%= user.name %> -- <%= user.email %></li>
  <% }) %>
</ul>

<% include footer.html %>

如果我能在我的EJS模板中包含markdown文件,那将是很好的,如下所示:

<% include markdown-file.md %>

能够在markdown中使用EJS语法或提供某种方式来访问markdown中的变量也是很好的。有可能这样吗?如果没有,对于我在EJS模板中使用markdown作为内容的最简单方法是什么?

编辑5/19/13:我真的想在我自己的项目中使用这样的东西,所以我不得不放弃将markdown与EJS结合起来。如果您对此感兴趣,请查看GitHub上名为markedejs的模块,README解释了我做得非常好。此模块使用marked来将markdown解析为HTML,对其进行unescape,并将HTML模板传递给EJS以进行最终渲染。所有EJS语法都在markdown内工作,并且在markdown模板中包含HTML模板也可以正常工作。您可以使降价模板如下所示:

<nop><% include header.html %></nop>

<%= site.title %>
=======================

<%= site.description %>

This project was created by <%= author.name %>. My website is
located at the url [<%= author.url %>]().

## <%= header %>

![Markdown Logo](img/mdlogo.png)

Hey <%= user.name %>! This is a test template for the `markedejs` module. We
can use markdown and EJS together for some pretty awesome results.

### The Classic EJS Supplies List
<ul>
<% for (var i = 0; i < supplies.length; i++) { %>
  <li><%= supplies[i] %></li>
<% } %>
</ul>

### Your User Data

I like using markdown lists a whole lot better when I can.

 - **Username:** <%= user.username %>
 - **Name:** <%= user.name %>
 - **Stars:** <%= user.stars %>

We can do some conditionals as well. You will only see the footer below this
paragraph if you pass in `true` for the `showFooter` flag.

<% if (showFooter !== undefined && showFooter === true) { %>
  <%= footer %>
<% } %>

<nop><% include footer.html %></nop>
  • <nop>标记已由markedejs删除,并包含在降价模板中,因此<p>和{{1}的内容周围不会添加header.html标记}。

然而,这还不是我原本想要的,我希望能够在其他HTML模板和其他降价模板中使用footer.html降价模板。目前,我只能在我的降价模板中包含HTML模板。仍希望有人能更好地了解如何制作EJS包括使用降价文件吗?

3 个答案:

答案 0 :(得分:2)

请尝试将&lt;%=更改为&lt;% -

答案 1 :(得分:2)

如果你想让它来处理它中的markdown文件,你可能需要修改EJS

<% include filename.ext %>

指令。它们的处理方式包括简单和递归,但它需要明确的markdown文件知识,并在将其添加到模板之前调用markdown转换器生成html。

我已经使用marked来创建一个传递给我的EJS模板的函数,可以调用 include 一个markdown文件,它运行得很好:

app.get ('/docs', function (req, res) {

   // Allow the docs.html template to 'include' markdown files
   var marked = require ('marked');

   var md = function (filename) {
      var path = __dirname +"/views/docs/" + filename;
      var include = fs.readFileSync (path, 'utf8');
      var html = marked (include);

      return html;
   };

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

在模板中,执行以下操作:

<%- md("index.md") %>

但它不允许我在markdown文件中使用EJS模板函数,markdown是内联的纯HTML。

答案 2 :(得分:0)

您可以使用此https://www.npmjs.com/package/express-markdown-browser

使用md文件创建文件夹并设置express。祝你好运。