I am trying to use the express-handlebars module but have an error. My code:
var exphbs = require('express-handlebars');
app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
app.set('view engine', '.hbs');
My error:
"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
^
TypeError: exphbs is not a function"
I can't seem to figure it out why is it not working properly. Any ideas?
You should use "exphbs.engine" instead of "exphbs".
app.engine('.hbs', exphbs.engine({ extname: '.hbs', defaultLayout: "main"}));
If you want to use express-handlebars with commonJS module you should import it like that:
const express = require('express');
const { engine } = require('express-handlebars');
const app = express();
app.engine('handlebars', engine({ extname: '.hbs', defaultLayout: "main"}));
app.set('view engine', 'handlebars');
app.set("views", "./views");
app.get('/', (req, res) => {
res.render('home');
});
app.listen(3000);
If you want to go with ES6 module, you can follow the official readme
You have two options to solve this
1st Method-
In this you just have to update a single word .enigne
Change this:
app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
To
app.engine('.hbs', exphbs.engine({ extname: '.hbs', defaultLayout: "main"}));
2nd Method-
In this, you have to update
var exphbs = require('express-handlebars');
To
const { engine } = require('express-handlebars');
And
app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));
To
app.engine('handlebars', engine({ extname: '.hbs', defaultLayout: "main"}));
Goodluck