在node.js中使用EJS进行双重渲染

时间:2014-02-16 21:59:00

标签: node.js templates render ejs

我想知道是否可以使用带有不同标签的ej进行双重渲染。

例如我有这个ejs模板

<@= test @>

<% for(var i=0; i<people.length; i++) { %>
    <li>
        <%= people[i].name %>
    </li>
<%
    }
%>

在node.js中,我使用默认标记(&lt;%)或使用某些已定义的标记(&lt; @)进行渲染

var people = [{"name":"Martin"}, {"name":"Jean"}];

 exports.test = function(req, res) {
    res.render('template', {
        open:'<@',close:'@>',
        people : people,
        test : "Hello world"
    })
}

此代码将呈现

Hello world <% for(var i=0; i
<%= people[i].name %>
<% } %>

这一个

var people = [{"name":"Martin"}, {"name":"Jean"}];

 exports.test = function(req, res) {
    res.render('template', {
        people : people,
        test : "Hello world"
    })
}

将呈现

<@= test @>
Martin
Jean

我想找到一种方法来双重渲染它:

Hello world
Martin
Jean

由于

解决方案感谢bnuhero

 exports.test = function(req, res) {
 var people = [{"name":"Martin"}, {"name":"Jean"}];
     res.render( 'test',
          {open:'<@', close:'@>', test : "Hello world"},
          function(err, html) {
            if (err) {
            console.log(err);
              res.send(500, err);
            } else {
              res.send(require('ejs').render(html, {people: people}))
            }
         });
    };

1 个答案:

答案 0 :(得分:2)

首先,通过提供回调函数来调用res.render()。可能的错误和呈现的字符串都传递给此回调函数。 res.render()不会对客户端执行自动回复。

其次,将require('ejs').render()应用于回调函数中的呈现字符串。

最后,将结果发送到客户端。

exports.test = function(req, res) {
  var people = [{"name":"Martin"}, {"name":"Jean"}];
  res.render( 'template',
              {open:'<@', close:'@>', test : "Hello world"},
              function(err, html) {
                if (err) {
                  res.send(500, err);
                } else {
                  res.send(require('ejs').render(html, {people: people}));
                };
             });
};