2013-05-04 2 views
0

Я использовал Express web framework для Node.JS и использовал анализатор chjj/marked, чтобы разобрать разметку в HTML. Я также смог выполнить эту уценку с помощью Express. Я использую шаблоны EJS в моих экспресс-проектах как правило, и то, что я хотел бы сделать, это использовать EJS с уценкой.Как отменить уценку с помощью EJS с помощью Express/Node.JS?

В идеале я хотел бы иметь возможность использовать во время компиляции включает, которые обычно используются в 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 с чем-то вроде следующий:

<% include markdown-file.md %> 

было бы неплохо иметь возможность использовать синтаксис EJS в уценке или предоставить какой-то способ доступа к переменным в уценке. Возможно ли подобное? Если нет, то каким будет самый простой способ использовать уценку для моего контента в шаблоне EJS?

EDIT 5/19/13: Я действительно хотел сделать что-то подобное для использования в своих проектах, поэтому мне пришлось дать ему возможность сочетать уценку с EJS. Взгляните на мой модуль на GitHub под названием markedejs, если вы заинтересованы в этом, README объясняет, что я сделал довольно хорошо. Этот модуль использует marked для анализа разметки в HTML, unescapes и передает шаблон HTML в EJS для окончательного рендеринга. Работает все синтаксис EJS в рамках уценки и включает в себя 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> теги не добавляются по содержанию header.html и footer.html.

Однако, это не совсем делать то, что я изначально еще хотел, я хотел бы иметь возможность include шаблоны уценки в обоих других шаблонов HTML и другие шаблоны уценки. В настоящее время я могу включать только HTML-шаблоны в мои шаблоны разметки. Все еще надеялись, что кто-то может лучше понять, как я могу заставить EJS включать работу с файлами разметки?

ответ

2

Вы, вероятно, придется изменить EJS, если вы хотите, чтобы заставить его обрабатывать уценки файлы в это

<% include filename.ext %> 

директива. Они, как они обрабатываются, являются простыми и рекурсивными, но для этого нужно будет иметь явное знание файлов разметки и вызвать конвертер меток для генерации html перед добавлением его в шаблон.

Я использовал marked создать функцию, я прохожу в мои шаблоны EJs, которые могут быть призваны включать файл уценки, и она работает очень хорошо:

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") %> 

, но это не позволяет мне использовать шаблон функции EJs в уценки файлов, то уценка чистый HTML, который получает встраиваемыми.

Смежные вопросы