Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

598
Vistas
TypeError: exphbs no es una función

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?

over 4 years ago · Santiago Trujillo
8 Respuestas
Responde la pregunta

0

Puede usar exphbs liabrary en lugar de express-handlebars .

Registrando motor de vista:

 // view engine setup app.engine('hbs', require('exphbs')); app.set('view engine', 'hbs'); app.set('view options', { layout: 'main'});

De forma predeterminada, exphbs busca un nombre de carpeta llamado parciales para el directorio de parciales y un nombre de carpeta llamado diseños para el directorio de diseños. Tanto las carpetas de parciales como las de diseños se encuentran en el directorio de vistas .

aprende más

over 4 years ago · Santiago Trujillo Denunciar

0

Debe usar "exphbs.engine" en lugar de "exphbs".

 app.engine('.hbs', exphbs.engine({ extname: '.hbs', defaultLayout: "main"}));
over 4 years ago · Santiago Trujillo Denunciar

0

  1. var exphbs = require("express-handlebars");
  2. app.engine("manillar",exphbs({ defaultLayout: "main" }));

Reemplace con esto:

  1. const {motor} = require("express-handlebars");
  2. app.engine("manillar", motor({ defaultLayout: "main" }));
over 4 years ago · Santiago Trujillo Denunciar

0

"app.engine('.hbs', exphbs({ extname: '.hbs', defaultLayout: "main"})); ^ TypeError: exphbs is not a function"

Este error se puede resolver agregando una engine() function a la constante exphbs , O simplemente llamando a la función engine() .

exphbs.engine() , debido a que exphbs es una constante y no una función, tenemos que llamar a la función engine() desde el paquete express-handlebars , ¡para que podamos usar el motor de plantillas handlebars!

guia de uso express-manillar


Puede obtener un segundo error si no está utilizando un archivo de diseño ( main.handlebars / main.hbs ).
Si alguien tiene problemas con el error de archivo main.handlebars / main.hbs .
Puede establecer el defaultLayout como null .

Algo como esto:

 const expressHbs = require('express-handlebars'); app.engine('handlebars', expressHbs.engine({ layoutsDir: 'views/layouts/', defaultLayout: null, extname: 'handlebars' }) ); app.set('view engine', 'handlebars'); app.set('views', 'views'); // optional

layoutsDir es la ubicación de sus diseños (si hay alguno, se puede omitir si no está utilizando un diseño).
extname (nombre de la extensión) depende de la elección del usuario.

over 4 years ago · Santiago Trujillo Denunciar

0

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

over 4 years ago · Santiago Trujillo Denunciar

0

const { engine } = require('express-handlebars');

y

 app.engine('handlebars', engine({ extname: '.hbs', defaultLayout: "main"}));
over 4 years ago · Santiago Trujillo Denunciar

0

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

over 4 years ago · Santiago Trujillo Denunciar

0

así es, según la documentación de hbs , esta opción hará el trabajo.

 import express from 'express'; import { engine } from 'express-handlebars'; const app = express(); app.engine('.hbs', engine({extname: '.hbs'})); app.set('view engine', '.hbs'); app.set('views', './views');
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda