如何在不执行`res.render`的情况下在nodeJS / express中使用EJS模板引擎?

时间:2018-01-28 02:28:23

标签: node.js express ejs templating

我想res.send一个JSON对象,其中包含从我的一个EJS模板生成的HTML片段。

res.send({
    status: "xyz",
    timestamp: new Date(),
    htmlContent: "" //=====> HTML snippet from template.ejs here
});

这有可能吗?谢谢!

2 个答案:

答案 0 :(得分:1)

简答:是的,但我不推荐它。

长答案:是的,尽管您需要自己使用ejs模板库:

var ejs = require('ejs');
var template = ejs.compile('<h1>Template</h1><p><%= data %></p>'), options);
var renderedTemplate = template({data: 'My Data'});
//renderedTemplate would contain '<h1>Template</h1><p>My Data</p>'

这会给你你想要的。但实际上与使用res.render没有多大区别。是的,express必须阅读视图文件,但这可以通过缓存模板来缓解(它确实如此)。你的模板在你的请求处理程序代码之外也是更好的,恕我直言。

答案 1 :(得分:1)

你可以&#34;渲染&#34;将ejs内容添加到变量中并将其添加到对象中。

var content='';
res.render('template', function(err, html) {
   content = html;
});
res.send({
    status: "xyz",
    timestamp: new Date(),
    htmlContent: content
});

如果您只想做这件事,那么我们可以缩短代码:

res.render('template', function(err, html) {
   res.send({
     status: "xyz",
     timestamp: new Date(),
     htmlContent: html
   });
});