node hbs handlebars node.js express handlebars.js pug viewengine

node.js - hbs - module ejs node



¿Hay alguna manera de usar motores de vista múltiple con Express+Node.js (3)

Express 4.0 y la solución superior (hasta que vuelva a cambiar)

  1. NPM instala los motores que necesitas.

    // some examples npm install ejs npm install pug npm install handlebars

  2. Configura los motores para usar en tu app.js

    app.set(''view engine'', ''pug''); app.set(''view engine'', ''ejs'');

  3. Renderice su plantilla, asegúrese de establecer la extensión del archivo.

    // forces usage of the respective render engine by setting the file extension explicitly. res.render( ''about.ejs'', { title: ''About'' } ); res.render( ''about.pug'', { title: ''About'' } );

  4. Documentación para más ejemplos de uso.

Escenario : había desarrollado algunas páginas transaccionales usando Node.js , Express + Handlebars como motor de visualización y MongoDB .

Ahora el problema es que durante la integración del módulo obtuve algunas de las páginas que se basan en Express + Jade como motor de visualización.

Pregunta : ¿Cómo integrar las páginas creadas en Handlebars y algunas en Jade ?


  1. Agregue ambos motores y consolidate.js en su package.json
  2. En yourapp.js

    var engines = require (''consolidate'');

    app.engine (''jade'', engines.jade);

    app.engine (''manillares'', engines.handlebars);

Más información here


EDITAR

Después de discutir con Amol M Kulkarni a continuación los comentarios, volví y los analicé nuevamente.

Y resulta que fue bastante más fácil de lo que pensé que tengo que volver aquí y compartir mi solución. Usando consolidar, hazlo así:

Primero haz lo que necesites.

var engines = require(''consolidate'');

Entonces puedes quitar o configurar el motor y ver el motor ...
He intentado eliminar todos los app.engine y app.set(''view engine'', ''...''); y funcionó. Sin embargo, configurarlo de forma diferente a ''html'' solo funcionará para un motor. Así que solo lo he puesto para estar seguro.
Lo he puesto así:

app.engine(''html'', engines.swig); // take note, using ''html'', not ''ejs'' or ''pug''.. app.set(''view engine'', ''html''); // also ''html'' here.

Y luego, más adelante, cuando hagas la app.render , asegúrate de que tenga la extensión de archivo y que funcionará bien.

res.render( ''theme.ejs'', {}); // will render with ejs res.render( ''theme.pug'', {}); // will render with pug

Solo asegúrese de tener estos motores (pug, ejs, etc.) instalados y consolidar hará el resto.

Antigua respuesta .
con relación a la respuesta de @Sergii, no me funcionó al 100%. Hay ocasiones en que se produce un error en las plantillas que estoy usando. Pero con un mensaje de error incorrecto que dice no pudo buscar esta plantilla en este directorio.

Probé la solución de @zariah pero todavía no funcionó.

app.set(''view engine'', ''pug''); // does not make sense. app.set(''view engine'', ''ejs''); // overriding the last .set()

Lo que funcionó para mí es usar consolodate.js como se mencionó.
Se agregó app.set(''view engine'', ''pug''); como siempre.
Y luego, cada vez que llamaré render, configuro el ''view engine'' .

al igual que:

req.app.set(''view engine'', ''ejs''); res.render( ''theme'', theme );

Mi preocupación con esto es que cuando más usuarios simultáneos visiten la página con diferentes motores, no estoy seguro de si esto chocará y volverá con la búsqueda de errores que estoy teniendo.

Pero supongo que el render es tan rápido, que debería hacerse cuando se req.app.set otro req.app.set .