【问题标题】:How can I use the EJS templating engine in nodeJS/express without doing `res.render`?如何在 nodeJS/express 中使用 EJS 模板引擎而不执行`res.render`?
【发布时间】:2018-07-07 01:09:09
【问题描述】:

我想重新发送一个 JSON 对象,其中包含从我的 EJS 模板之一生成的 HTML sn-p。

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

这有可能吗?谢谢!

【问题讨论】:

    标签: node.js express ejs templating


    【解决方案1】:

    您可以将 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
       });
    });
    

    【讨论】:

    • 谢谢!我不知道,因为我之前从未使用过res.render 的回调!
    • 那么res.render即使需要回调也是同步的?
    • 不,通过回调,render 只是将解析后的内容传递给回调的参数;由您决定是否发送。由于您想将内容包装在 JSON 对象中,因此在发送它之前,我只是保存了稍后要发送的解析内容。虽然这只是给了我一个增加我的答案的想法......请继续关注......
    【解决方案2】:

    简短回答:可以,但我不推荐。

    长答案:是的,尽管您需要自己使用 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 必须读取视图文件,但这可以通过缓存模板(确实如此)来缓解。您的模板最好在您的请求处理程序代码之外,恕我直言。

    【讨论】:

    • 老实说,我不知道res.render 能够接听电话。 :/我的坏
    猜你喜欢
    • 2022-12-14
    • 2023-04-11
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2014-10-10
    相关资源
    最近更新 更多