как использовать как ejs, так и jade в одном проекте nodejs и express?

Я хочу использовать ejs для частичных и использовать jade для отдельных страниц, как использовать оба в одном проекте nodejs и экспресс?


person Henry Leu    schedule 28.05.2013    source источник
comment
Я думаю, что этот ответ может вам помочь: stackoverflow.com/a/15064438/1266006   -  person Elad Amsalem    schedule 28.05.2013
comment
Из любопытства, почему вы хотите это сделать?   -  person esp    schedule 29.05.2013
comment
Для частичных просто используйте обработчики для замены переменных быстро и достаточно, для сложных страниц необходим мощный механизм шаблонов. это зависит. Я разобрался и поделюсь   -  person Henry Leu    schedule 29.05.2013
comment
Эй, @HenryLeu, не мог бы ты поделиться своей мудростью, пожалуйста? Готов сделать то же самое.   -  person AmirHd    schedule 09.08.2013


Ответы (2)


Способ легко найти в документах API ExpressJS и consolidate.js на github

Ссылайтесь на фрагмент документа express.js ниже, пожалуйста


app.engine(ext, callback)

Зарегистрируйте обратный вызов данного механизма шаблонов как ext. По умолчанию будет требовать() механизм, основанный на расширении файла. Например, если вы попытаетесь отобразить файл «foo.jade», Express вызовет следующее внутри себя и кэширует require() при последующих вызовах для повышения производительности.

app.engine('jade', require('jade').__express);

Для движков, которые не предоставляют .__express из коробки, или если вы хотите «сопоставить» другое расширение с движком шаблонов, вы можете использовать этот метод. Например, сопоставление механизма шаблонов EJS с файлами «.html»:

app.engine('html', require('ejs').renderFile);

В этом случае EJS предоставляет метод .renderFile() с той же сигнатурой, которую ожидает Express: (путь, параметры, обратный вызов), хотя обратите внимание, что внутри он использует псевдоним этого метода как ejs.__express, поэтому, если вы используете расширения «.ejs». вам не нужно ничего делать.

Некоторые механизмы шаблонов не следуют этому соглашению, библиотека консолидации.js была создана для сопоставления всех популярных механизмов шаблонов узла с соблюдением этого соглашения, что позволяет им без проблем работать в Express.

var engines = require('consolidate');
app.engine('haml', engines.haml);
app.engine('html', engines.hogan);
person Henry Leu    schedule 10.08.2013
comment
Но разве мне не нужно где-то использовать express.set('view engine', 'ext');? - person theonlygusti; 03.09.2016
comment
@theonlygusti Можете ли вы рассказать об этом подробнее? Я пытаюсь заставить это работать и не уверен, требуется ли view engine по умолчанию, когда используется consolidate? Я в документах, поэтому указатель на ссылку будет оценен, если он у вас есть. Спасибо. - person tim.rohrer; 25.02.2018

Это работает для моего:

  1. добавить pug и ejs в качестве рендеринга

index.js

const express = require('express');
const path = require('path');
const app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.set('view engine', 'ejs');
  1. вызовите рендер с именем файла.fileext.

маршруты/пользователи

const express = require('express');
const router = express.Router();
router.get('/', function (req, res, next) {
  res.render('users.ejs');
});
module.exports = router;

маршруты/о

const express = require('express');
const router = express.Router();
router.get('/', function (req, res, next) {
  res.render('about.pug');
});
module.exports = router;
person joseAndresGomezTovar    schedule 24.02.2018
comment
Благодарим вас за использование нового имени pug. Я новичок в этом деле. Вы проводили тесты с consolidate.js? Я думаю, что это путь, который мне нужно выбрать, так как я пытаюсь предоставить одну переменную интерфейсу, используя ejs. - person tim.rohrer; 25.02.2018
comment
я тестировал с mocha+assert - person joseAndresGomezTovar; 26.02.2018
comment
Я посмотрел на consolidate.js, но лучше всего могу сказать, что он не позволяет мне смешивать подходы к рендерингу на одной странице. Поскольку я уже использовал PUG, я пошел по пути AJAX, чтобы получить свои данные. Излишество.... - person tim.rohrer; 27.02.2018
comment
Это обновленный ответ, возможно, ответ следует обновить для корректности. - person kabuto178; 21.09.2018