渲染 EJS 模板并将其保存为文件
Posted
技术标签:
【中文标题】渲染 EJS 模板并将其保存为文件【英文标题】:render EJS template and save it as a file 【发布时间】: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);
);
【问题讨论】:
首先<body>' + html + '</body>
html 变量似乎没有被定义。如何从“模板”文件返回数据是什么意思?
【参考方案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;
);
【讨论】:
以上是关于渲染 EJS 模板并将其保存为文件的主要内容,如果未能解决你的问题,请参考以下文章