Search code examples
node.jsexpresshandlebars.java

Handles Bars hbs is not a function


i have just set up my layouts folder inside view as

app.engine('hbs', hbs({extname: 'hbs', defualtLayout : 'layout' , layoutDir: __dirname + '/views/layouts'}));
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');

module use is

var hbs = require('hbs');

which give me th following errors

app.engine('hbs', hbs({extname: 'hbs', defualtLayout : 'layout' , layoutDir: __dirname + '/views/layouts'}));
                  ^

TypeError: hbs is not a function

Solution

  • Because what exported by hbs module is not a function actually.

    You should read the description file of the hbs module and it has tell you how to use it.

    Using hbs as the default view engine requires just one line of code in your app setup. This will render .hbs files when res.render is called.

    app.set('view engine', 'hbs');
    

    To use a different extension (i.e. html) for your template files:

    app.set('view engine', 'html');
    
    app.engine('html', require('hbs').__express);
    

    and another way is using express-handlebars module, it could be used on your way.

    app.engine('handlebars', exphbs({defaultLayout: 'main'}));
    
    app.set('view engine', 'handlebars');