'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 1:[1]

This worked for me.

make sure install this package: npm install express-handlebars

var hbs = require('express-handlebars');

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.engine('hbs', hbs.engine({
  extname: 'hbs',
  defaultLayout: 'layout',
  layoutsDir: __dirname + '/views/layout/',
  partialsDir: __dirname + '/views/partials'
}))

Solution 2:[2]

Its working as i change module to

var hbs = require('express-handlebars');

Solution 3:[3]

Use hbs.engine() like given below

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

Solution 4:[4]

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.engine('hbs',hbs.engine({extname:'hbs',defaultLayout:'layout',layoutsDir:__dirname+'/views/layout/',partialDir:__dirname+'/views/partials/'}))

change hbs to hbs.engine

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 muzu-85
Solution 2 Anis
Solution 3 Tyler2P
Solution 4 AlexM