【问题标题】:render EJS template and save it as a file渲染 EJS 模板并将其保存为文件
【发布时间】:2016-12-17 20:40:43
【问题描述】:

我一直在努力解决这个问题,我正在尝试渲染 EJS 文件并将结果保存为 HTML,保存部分似乎正在工作,但我无法完全掌握如何返回数据来自“模板”文件。

var fileName = 'public/cv/' + userID + '_default.html';
    var stream = fs.createWriteStream(fileName);
    function buildHtml(request) {

        var sveducations = JSON.parse(SQReducations);
        var header = '';

        return '<!DOCTYPE html>'
            + '<html><header>' + header + '</header><body>' +
                html
            +
            '</body></html>';
    };
    stream.once('open', function (fd) {
        var html = buildHtml();
        stream.end(html);
    });

【问题讨论】:

  • 首先&lt;body&gt;' + html + '&lt;/body&gt; html 变量似乎没有被定义。如何从“模板”文件返回数据是什么意思?

标签: javascript node.js ejs templating


【解决方案1】:

这是保存从 ejs 呈现的 html 字符串的最简单方法。

var ejs  = require('ejs');
var fs   = require('fs');
var data = {} // put your data here.  

var template = fs.readFileSync('./template.ejs', 'utf-8');
var html     = ejs.render ( template , data );

fs.writeFileSync("./html.html", html, 'utf8');

如果你想从 JSON 文件中读取数据

var data = JSON.parse(fs.readFileSync('./data.json', 'utf8'));

8/12 编辑

使用 try catch 获取错误信息。

var ejs  = require('ejs');
var fs   = require('fs');
var data = {} // put your data here.  

try {
    var template = fs.readFileSync('./template.ejs', 'utf-8');
    var html     = ejs.render ( template , data );

    fs.writeFileSync("./result.html", html, 'utf8');

}catch (e){
    console.log(e)  // If any error is thrown, you can see the message.
}

【讨论】:

  • 我编辑了我的答案,请使用 try catch 获取错误信息。
  • 您可以通过使用 ejs.renderFile() 来避免使用 readFileSync() ;) 检查我的答案如下
【解决方案2】:

现在您不再需要通过 readFile()readFileSync() 调用来加载模板。您可以简单地使用 ejs.renderFile(pathToTemplate, data, cal)

const data = {};

ejs.renderFile(path.join(__dirname, '../views/template.ejs'), data, (err, result) => {
    if (err) {
        logger.log('info', 'error encountered: ' + err);
        // throw err;
    }
    else {
        try {
            fs.writeFileSync('./html.html', result, 'utf8');
        } catch(err) {
            if (err) {
                throw err;
            }
        }

    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 2016-03-06
    • 2016-02-26
    • 2016-03-01
    • 2019-01-19
    • 2012-10-27
    • 2018-01-17
    • 2015-07-17
    相关资源
    最近更新 更多