Что делает app.engine()? А что такое ext и callback?

Я попытался прочитать документацию, и они сказали

app.engine(добавочный, обратный вызов)

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

Мне трудно понять, что здесь означают ext и callback.


person Chandler Bing    schedule 20.08.2018    source источник


Ответы (2)


Это часть механизма просмотра/шаблона функций Экспресс. Часто ваши обработчики запросов возвращают только некоторый объект JSON. Но в других случаях вы хотите создать обычный «документ», например, полностью созданную HTML-страницу, RSS-канал и т. д. Механизмы шаблонов помогут вам в этом, хотя они ни в коем случае не являются обязательными. Вы можете использовать другие подходы (например, создавать строки вручную, если вам нравится боль), или вы можете вручную использовать библиотеку, такую ​​как pug/moustache и т. д. Функциональность механизма представления в основном интегрирует такие библиотеки, как pug/moustache, в экспресс, поэтому их проще использовать.

На связанной странице есть хороший пример того, как это можно использовать на практике:

Затем создайте маршрут для отображения файла index.pug. Если свойство механизма представления не задано, необходимо указать расширение файла представления. В противном случае вы можете его опустить.

app.get('/', function (req, res) { res.render('index', { title: 'Hey', message: 'Hello there!' }) })

Когда вы делаете запрос на домашнюю страницу, файл index.pug будет отображаться как HTML.

Express много раз знает о различных шаблонизаторах. Так что достаточно сказать express.set('view engine', 'pug'), и он будет работать правильно, пока установлен пакет pug.

В других случаях вам нужно использовать app.engine, чтобы более явно указать, что делать. Называется как app.engine('jade', require('jade').__express). Первый параметр - это просто расширение, которое нужно искать. Поэтому, когда вы говорите req.render('index', ...), он будет искать файл index.jade. Второй параметр — это функция, которая фактически выполняет интеграцию между механизмом просмотра (который, как я уже сказал, является отдельной вещью от экспресса) и самим выражением. consolidate.js — это пакет с интеграцией для многих механизмов просмотра.

Но если вы хотите увидеть, что делает эта функция, ознакомьтесь с разработкой механизмов шаблонов для Express< /а>. Параметр callback должен выглядеть как function(filePath, options, callback). filePath — это просто имя файла на диске, используемого для рендеринга, поэтому index.jade в приведенном выше примере. callback — это стандартный обратный вызов узла, вызываемый как callback(err) в случае ошибки или callback(null, renderedContent) в случае успеха. options — это объект, переданный из req.render('index.jade', /* options */ { title: 'foo', content: 'bar' }). Затем вам решать, как на самом деле выполнять рендеринг на основе предоставленных аргументов.

person Horia Coman    schedule 20.08.2018

Говоря простым языком: ext — расширение, callback — библиотека (движок), которая будет отображать файл с заданным расширением.

person aframestor    schedule 20.08.2018