Reputation: 1219
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
Upvotes: 1
Views: 10833
Reputation: 107
The below code works fine for me.
app.engine(
'hbs',
expressHbs.engine({
layoutsDir: 'views/layouts/',
defaultLayout: 'main-layout',
extname: 'hbs'
}));
Upvotes: 1
Reputation: 21
Use hbs.engine()
like given below
app.engine('hbs', hbs.engine({
extname: 'hbs',
defaultLayout: 'layout',
layoutDir: __dirname + '/views/layouts'
}));
Upvotes: 2
Reputation: 1
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
Upvotes: -1
Reputation: 51
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'
}))
Upvotes: 4
Reputation: 334
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');
Upvotes: 2
Reputation: 1219
Its working as i change module to
var hbs = require('express-handlebars');
Upvotes: 0