How to save rendered html view files from ExpressJS Routes(如何从ExpressJS路由保存渲染的html视图文件)
问题描述
我使用ExpressJS
和PUG
构建了几个静电网站页面,以利用模板引擎的优势。
但是现在我需要导出由所有ExpressJS
Routes
呈现的所有原始HTML。
有没有什么软件包可以帮助我做到这一点?或者我必须编写自定义命令并迭代所有Routes
并保存呈现的输出?
如果自定义命令是唯一方法,如何迭代所有routes
并获得呈现的输出?
推荐答案
我找不到任何库或资源来实现我想要的。但是使用我的一些肮脏的代码、黑客和包,我能够导出所有的路由。
注意:我没有编写node命令来导出htmls,而是添加了一个路由来触发操作,下面是该路由的代码:
app.use('/export_templates', router.get('/', async function (req, res, next) {
const endpoints = listEndpoints(app);
const failedEndpoints = [];
for (const i in endpoints) {
const endpoint = endpoints[i];
if (endpoint.path == '/export_templates') {
continue;
}
try {
const res = await axios.get('http://'+req.headers.host+''+endpoint.path+'?export=true');
}
catch(error) {
failedEndpoints.push(endpoint.path);
}
}
res.json({
"status": "succes",
"message": "Please check templates folder for the latest exported html templates",
"failed": failedEndpoints
})
}));
基本上,此路由使用export=true
参数迭代并向所有可用路由发出请求。
pug
模板位置和新文件名作为函数参数调用exportTemplateFile
函数。
如果请求不包含export
参数,则请求的路由将简单地输出模板。
示例路由:
router.get('/', function(req, res, next) {
if (req.query.export) {
exportTemplateFile('views/index.pug', 'index.html');
}
res.render('index.pug');
});
这里是完成导出过程的2个util函数的代码
function createTemplateFile(filename) {
fs.open(filename,'r',function(err, fd){
if (err) {
fs.writeFile(filename, '', function(err) {
if(err) {
console.log(err);
}
});
}
});
}
function exportTemplateFile(templateLocation, templateName) {
const html = pretty(pug.renderFile(templateLocation));
createTemplateFile('templates/'+templateName);
var stream = fs.createWriteStream('templates/'+templateName);
stream.once('open', function (fd) {
stream.write(html);
stream.end();
});
}
createTemplateFile
函数只是在文件不存在时创建一个新文件。
exportTemplateFile
函数将HTML保存在由pug
呈现的html
变量中,并用pretty
包美化它,然后覆盖新模板文件。
注意:在我的示例中,所有pug
模板都是静电,因此我不必向pug.renderFile
函数传递任何上下文。但是,如果您需要在PUG模板内使用任何上下文,您只需将其与模板位置一起传递即可。
这篇关于如何从ExpressJS路由保存渲染的html视图文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何从ExpressJS路由保存渲染的html视图文件
基础教程推荐
- 动态更新多个选择框 2022-01-01
- Karma-Jasmine:如何正确监视 Modal? 2022-01-01
- 我什么时候应该在导入时使用方括号 2022-01-01
- 在 JS 中获取客户端时区(不是 GMT 偏移量) 2022-01-01
- 有没有办法使用OpenLayers更改OpenStreetMap中某些要素 2022-09-06
- 悬停时滑动输入并停留几秒钟 2022-01-01
- 角度Apollo设置WatchQuery结果为可用变量 2022-01-01
- 在for循环中使用setTimeout 2022-01-01
- 当用户滚动离开时如何暂停 youtube 嵌入 2022-01-01
- 响应更改 div 大小保持纵横比 2022-01-01