Estoy tratando de usar el módulo express-handlebars pero tengo un error. Mi código:
var exphbs = require('express-handlebars'); app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"})); app.set('view engine', '.hbs');Mi error:
"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"})); ^ TypeError: exphbs is not a function"Parece que no puedo entender por qué no funciona correctamente. ¿Algunas ideas?
Debe usar "exphbs.engine" en lugar de "exphbs".
app.engine('.hbs', exphbs.engine({ extname: '.hbs', defaultLayout: "main"}));Si desea usar express-handlebars con el módulo commonJS , debe importarlo así:
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);Si desea utilizar el módulo ES6 , puede seguir el archivo Léame oficial
Tienes dos opciones para solucionar esto
1er método-
En este solo tienes que actualizar una sola palabra .enigne
Cambia esto:
app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));Para
app.engine('.hbs', exphbs.engine({ extname: '.hbs', defaultLayout: "main"}));2do método-
En esto hay que actualizar
var exphbs = require('express-handlebars');Para
const { engine } = require('express-handlebars');Y
app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"}));Para
app.engine('handlebars', engine({ extname: '.hbs', defaultLayout: "main"}));Buena suerte