Подтвердить что ты не робот

app.set и app.engine в Express

Я следую учебнику Node.js.

Две строки, для которых я не уверен:

app.set('view engine', 'html');
app.engine('html', hbs.__express);

Я проверил документацию для app.set и он только говорит мне:

Присваивает значение имени параметру.

Но мой вопрос заключается в том, насколько актуальным является использование этого. Я googled это и везде, где app.engine используется app.set вызывается раньше.

Позвольте мне знать значение использования app.set перед app.engine.

РЕДАКТИРОВАТЬ

Я нашел следующую строку, но я все еще не понимаю, как я использую механизм шаблонов в первый раз:

Но мы можем сказать, что Express обрабатывает HTML файлы как динамические, используя директиву view engine, как вы видите выше.

4b9b3361

Ответ 1

Первая строка, app.set сообщает Express, какой механизм шаблонов использовать: В этом случае html. Для этого требуется, чтобы с этим именем был установлен механизм шаблонов, и этот механизм шаблонов чувствует ответственность за файлы с расширением .html.

Если вы используете ejs, например, эта единственная строка достаточно (хотя обычно у вас также есть второй вызов app.set который определяет каталог, где искать файлы вида):

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

Предположим, вы хотели бы использовать механизм шаблонов для другого расширения файла, например, вы хотели бы, ejs движок ejs не только заботился о файлах .ejs, но и о файлах .html.

В этом случае вы можете использовать вторую строку, которая сообщает Express, что для файлов с расширением html вы хотели бы вызвать функцию hbs.__express для их рендеринга (так как на самом деле нет механизма шаблонов под названием html). Это по существу означает, что вы хотите, чтобы движок hbs отображал файлы .html.

Функция __express является стандартом де-факто для движков шаблонов под Node.js для обеспечения совместимости с Express: что должна быть вызвана их функция рендеринга, чтобы Express мог легко ее найти (если у него другое имя, вы также можете настроить это, но это другая история).

Надеюсь это поможет.