繁体   English   中英

node表示如何将hleb页面的把手渲染到文件中

[英]node express how to render handlebars html page to file

我想通过wkhtmltopdf将一些html页面转换为pdf。 但是,我想要转换为pdf的html页面是使用把手动态生成的。

所以我认为一个解决方案可能是通过把手生成html页面而不是文件(html文件)。 然后,使用hkhtmltopdf将该文件转换为pdf,然后允许用户以某种方式下载pdf。

所以,我的问题是:如何将(把手)动态生成的html页面渲染到文件中?

谢谢,再见......

创建文件的简单示例。

var Handlebars = require('handlebars');

var source = "<p>Hello, my name is {{name}}. I am from {{hometown}}. I have " +
    "{{kids.length}} kids:</p>" +
    "<ul>{{#kids}}<li>{{name}} is {{age}}</li>{{/kids}}</ul>";
var template = Handlebars.compile(source);

var data = { "name": "Alan", "hometown": "Somewhere, TX",
    "kids": [{"name": "Jimmy", "age": "12"}, {"name": "Sally", "age": "4"}]};
var result = template(data);


var fs = require('fs');
    fs.writeFile("test.html", result, function(err) {
    if(err) {
        return console.log(err);
    }
});

使用express-handlebars ,您应该使用高级模式并在此示例中创建它的实例

正确的方法是创建一个视图文件(就像你可能已经有问题一样)并使用快速手柄实例来呈现它:

// init code
var exphbs = require('express-handlebars');
var hbs = exphbs.create({
    defaultLayout: 'your-layout-name',
    helpers: require("path-to-your-helpers-if-any"),
});
app.engine('.file-extention-you-use', hbs.engine);
app.set('view engine', '.file-extention-you-use');

// ...then, in the router
hbs.render('full-path-to-view',conext, options).then(function(hbsTemplate){
     // hbsTemplate contains the rendered html, do something with it...
});

HTH

Alex上面的代码非常完美。 然而,我的困惑是:我使用的是“快速把手”,而不是“把手”。 现在,我能理解的是Express-Handlebars是Express应用程序的Handlebars的一个实现,我正在使用它。 我只是没有找到在Express-Handlebars中使用'compile()'方法的方法,所以我最终安装了Handlebars(独立)并用它来编译我的(html)模板并将结果保存到磁盘,就像Alex在上面解释道。

总结:1)我知道Express-Handlebars是Express应用程序的Handlebars。 2)我不知道如何使用快速把手的“compile()”方法,所以我最终安装了Handlebars(来自npm)并在服务器上使用它来生成我的html文件(来自模板)并保存到磁盘。 3)当然,我在任何地方安装并使用Express-Handlebars来在我的Express应用程序中提供我的页面; 刚安装了Handlebars,用“compile()”方法生成我的html(在服务器中)并将结果保存到磁盘。

希望这是可以理解的。 再次感谢再见...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM