node express how to render handlebars html page to file

前端 未结 3 960
陌清茗
陌清茗 2020-12-16 00:48

I want to convert some html page to pdf via wkhtmltopdf. However, the html page I want to convert to pdf is dynamically generated using handlebars.

So I think one s

相关标签:
3条回答
  • 2020-12-16 01:31

    Using express-handlebars, you should use the advanced mode and create an instance of it like in this example.

    The proper way would be to create a view file (like you probably already have per you question) and use the express handlebars instance to render it:

    // 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

    0 讨论(0)
  • 2020-12-16 01:36

    Code above from Alex works perfect. However, my confusion was: I was using 'express-handlebars' and not 'handlebars'. Now, what I can understand is Express-Handlebars is an implementation of Handlebars for an Express application, which I´m using. I just didn't find a way to use the 'compile()' method in Express-Handlebars, so I ended up installing Handlebars (standalone) and used it to compile my (html) template and save the result to disk, just as Alex explained above.

    In summary: 1) I know Express-Handlebars is Handlebars for Express app. 2) I don't know how to use "compile()" method just from express-handlebars, so I ended up installing Handlebars (from npm) and using it on the server to produce my html file (from template) and save it to disk. 3) Of course I installed and use Express-Handlebars everywhere to serve my pages in my Express app; just installed Handlebars to produce my html (in the server) with "compile()" method and save the result to disk.

    Hope this is understandable. Thanks again and bye ...

    0 讨论(0)
  • 2020-12-16 01:45

    Simple example for create file.

    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);
        }
    });
    
    0 讨论(0)
提交回复
热议问题