1. Установка
Скопируйте код следующим образом: $ npm install Express
Или используйте исполняемый Express (1) в любом месте для установки:
Скопируйте код следующим образом:/# Переводчик Примечание: этот метод настоятельно рекомендуется
$ npm install -g Express
2. Начните быстро
Самый быстрый способ начать работу с Express - использовать исполняемый Express (1) для создания приложения, как показано ниже:
Создайте приложение:
Кода -копия выглядит следующим образом:
$ npm install -g Express
$ Express /tmp /foo && cd /tmp /foo
Установите пакет зависимости:
Кода -копия выглядит следующим образом:
$ npm install -d
Запустить сервер:
Кода -копия выглядит следующим образом:
$ node app.js
3. Создать сервер
Чтобы создать экземпляр Express.httpserver, просто вызовите метод CreateServer (). Для этого примера приложения мы можем определить маршрут на основе HTTP Actions (HTTP -глаголы), чтобы принять app.get () в качестве примера:
Кода -копия выглядит следующим образом:
var app = require ('express'). createServer ();
app.get ('/', function (req, res) {
res.send («Привет, мир»);
});
app.listen (3000);
4. Создать сервер HTTPS
Инициализируйте экземпляр Express.httpsserver, как указано выше. Затем мы передаем ему объект конфигурации, принимая ключ, сертификат и другие (свойства/методы), упомянутые в документации HTTPS.
Кода -копия выглядит следующим образом:
var app = require ('Express'). CreateServer ({key: ...});
V. Конфигурация
Express поддерживает любую среду, такую как этап продукта и этап разработки. Разработчики могут использовать метод configure () для установки текущей необходимой среды. Если вызов Configure () не содержит никакого имени среды, он будет работать на обратном вызове, указанном во всех средах.
Примечание переводчика: псевдонимы, такие как производство/разработка/стадия, могут быть приняты сами по себе, как показано в App.configure в Application.js. Смотрите следующий пример для фактического использования.
В следующем примере только Dillsexceptions (бросание ошибок) на стадии разработки и возвращает исключение стека. Тем не менее, в обеих средах мы используем методикрид и тела. Обратите внимание на использование App.Router, который может (необязательно) использоваться для загрузки маршрута программы. Кроме того, маршрут также будет загружен путем вызова app.get (), app.post () и т. Д. Впервые.
Кода -копия выглядит следующим образом:
app.configure (function () {
app.use (express.methodoverride ());
app.use (express.bodyParser ());
app.use (app.router);
});
app.configure ('разработка', function () {
app.use (express.static (__ dirname + '/public'));
app.use (Express.ErrorHandler ({dilmbelExceptions: true, showStack: true}));
});
app.configure ('Production', function () {
var Oneyear = 31557600000;
app.use (express.static (__ dirname + '/public', {maxage: oneyear}));
app.use (Express.ErrorHandler ());
});
Для аналогичных среду вы можете пройти несколько строк среды:
Кода -копия выглядит следующим образом:
app.configure ('stare', 'prod', function () {
// config
});
Для любых внутренних настроек (#) Express предоставляет SET (ключ [, val]), включить (ключ) и отключить (ключ) методы:
Примечание переводчика: для получения подробной информации, пожалуйста, см.
Кода -копия выглядит следующим образом:
app.configure (function () {
app.set ('views', __dirname + '/views');
app.set ('views');
// => "/absolute/path/to/views"
app.Enable («Некоторая функция»);
// эквивалентно: app.set («Некоторая функция», true);
app.disable («Некоторая функция»);
// эквивалентно: app.set («Некоторая функция», false);
app.enabled ('некоторые функции')
// => false
});
Чтобы изменить среду, мы можем установить переменные среды node_env, такие как:
Кода -копия выглядит следующим образом:
$ Node_env = production node app.js
Это очень важно, потому что большинство механизмов кэширования включаются только на этапе продукта.
6. Настройки
Express поддерживает следующие настройки ярлыка (из коробки):
1. Basepath используется для базового пути применения Res.redirect (), который явно обрабатывает монтируемые приложения.
2. Просмотр просмотра по умолчанию корневой каталог - CWD/представления
3. Просмотр двигателя. Просмотр движения по умолчанию (просмотр файлов) не требует использования суффиксов
4. Кэш просмотра Включает кеш просмотра (включен на стадию продукта)
5. Кодирование кодировки кодировки, по умолчанию UTF-8
6. Слушайте чувствительные маршруты.
7. После включения маршрутизации Strit (в маршруте) окончание/не будет проигнорировано (Перевод Примечание: то есть, app.get ('/sofish') и app.get ('/sofish/') будет другим)
8.json обратный вызов enable res.send () / res.json () явная поддержка JSONP (прозрачная поддержка JSONP)
7. Маршрутизация
Express использует HTTP -действия для обеспечения набора API -интерфейсов быстрого и выразительного маршрутизации. Например, если вы хотите иметь дело с учетной записью с путем /пользователя /12, мы можем определить маршрут следующим образом. Стоимость, связанная с названными заполнителями, доступна REQ.Params.
Кода -копия выглядит следующим образом:
app.get ('/user/: id', function (req, res) {
res.send ('user' + req.params.id);
});
Маршрут - это строка, которая складывается внутри страны. Например, когда /user /: id скомпилируется, упрощенная версия регулярного выражения примерно следующая:
Кода -копия выглядит следующим образом:
// Измените официальную строку
/// пользователь // ([^//]+) //?/
Регулярные выражения могут быть переданы и применены к сложным сценариям. Поскольку группы контента, захваченные буквальными регулярными выражениями, являются анонимными, мы можем получить к ним доступ непосредственно через REQ.Params. Следовательно, первый набор контента, который мы захватываем, будет req.params [0], в то время как второй набор сразу же следует req.params [1].
Кода -копия выглядит следующим образом:
app.get (/^// пользователи? (?: // (/d+) (?: /./. (/d+))?)?/, function (req, res) {
res.send (req.params);
});
Запросы на скручивание на указанный выше маршрут:
Кода -копия выглядит следующим образом:
$ curl http: // dev: 3000/user
[NULL, NULL]
$ curl http: // dev: 3000/пользователи
[NULL, NULL]
$ curl http: // dev: 3000/users/1
["1", null]
$ curl http: // dev: 3000/users/1..15
["1", "15"]
Вот несколько примеров маршрутов, связанных с путями, которые они могут использовать:
Кода -копия выглядит следующим образом:
"/ID пользователя"
/пользователь/12
"/пользователи/: идентификатор?"
/пользователи/5
/пользователи
"/files/*"
/files/jquery.js
/files/javascripts/jquery.js
"/файл/*.*"
/files/jquery.js
/files/javascripts/jquery.js
"/Пользователь/: ID/: Операция?"
/пользователь/1
/user/1/edit
"/Products.: формат"
/products.json
/products.xml
"/Products.: format?"
/products.json
/products.xml
/продукты
"/User/:ID.: формат?"
/пользователь/12
/Ouser/12.json
Например, мы можем использовать Post для отправки данных JSON и использовать BodyParser, промежуточное программное обеспечение, которое может анализировать контент запроса JSON (или другое контент) для возврата данных и сохранить результат возврата в req.body:
Кода -копия выглядит следующим образом:
var Express = require ('Express')
, app = express.createserver ();
app.use (express.bodyParser ());
app.post ('/', function (req, res) {
res.send (req.body);
});
app.listen (3000);
Обычно мы можем использовать заполнителя «дурака», как пользователь/: ID, без (имени) ограничений. Однако, например, если мы хотим ограничить идентификатор пользователя только числом, то мы могли бы использовать /user /: id ([0-9]+), что вступит в силу только в том случае, если заполнитель содержит как минимум одно число (адаптация, совпадение).
8. Проходящее управление маршрутом
Мы можем управлять следующим адаптированным маршрутом, вызывая третий параметр, Next () функция. Если адаптация не будет найдена, управление будет передано обратно для подключения, а промежуточное программное обеспечение будет вызвано последовательно в порядке, добавленном в использовании (). Принцип также применяется к нескольким маршрутам, определенным к одному и тому же пути, и они будут вызваны по очереди, пока один из них не вызовет следующий () и не решит сделать ответ на запрос.
Кода -копия выглядит следующим образом:
app.get ('/users/: id?', function (req, res, next) {
var id = req.params.id;
if (id) {
// что -нибудь делай
} еще {
следующий();
}
});
app.get ('/users', function (req, res) {
// Сделай что -нибудь еще
});
Метод app.all () может легко передавать одну и ту же логику на все действия HTTP, позвонив один раз. Затем мы используем его для извлечения пользователя из псевдодат и назначить его req.user.
Кода -копия выглядит следующим образом:
var Express = require ('Express')
, app = express.createserver ();
var users = [{name: 'tj'}];
app.all ('/user/: id/: op?', function (req, res, next) {
req.user = users [req.params.id];
if (req.user) {
следующий();
} еще {
Далее (новая ошибка («не может найти пользователя» + req.params.id));
}
});
app.get ('/user/: id', function (req, res) {
res.send ('просмотр' + req.user.name);
});
app.get ('/user/: id/edit', function (req, res) {
res.send ('Редактирование' + req.user.name);
});
app.put ('/user/: id', function (req, res) {
res.send ('обновление' + req.user.name);
});
app.get ('*', function (req, res) {
res.send (404, 'Что ???');
});
app.listen (3000);
9. промежуточное программное обеспечение
Используемое промежуточное программное обеспечение Connect (свойства) обычно сопровождается обычным сервером Connect, который передается в Express.createserver (). нравиться:
Кода -копия выглядит следующим образом:
var Express = require ('Express');
var app = express.createserver (
Express.logger ()
, Express.BodyParser ()
);
Кроме того, в блоке configure () - этот прогрессивный дворец (примечание переводчика: смеется ^^, прогрессивным образом), мы также можем удобно использовать use () для добавления промежуточного программного обеспечения.
Кода -копия выглядит следующим образом:
app.use (express.logger ({format: ': method: url'}));
Обычно используя промежуточное программное обеспечение Connect, которое вы можете использовать («Подключить»), например, это:
Кода -копия выглядит следующим образом:
var connect = require ('connect');
app.use (connect.logger ());
app.use (connect.bodyparser ());
Это в некоторой степени неприятно, поэтому выражает реэкспорт этих свойств промежуточного программного обеспечения, хотя они одинаковы:
Кода -копия выглядит следующим образом:
app.use (express.logger ());
app.use (express.bodyParser ());
Порядок промежуточного программного обеспечения очень важен. Когда Connect получает запрос, первое промежуточное программное обеспечение, которое мы передаем в createServer () или use (), будет сопровождаться тремя параметрами, запросом, ответом и функцией обратного вызова (обычно следующим). Когда будет вызван Next (), это будет второй поворот промежуточного программного обеспечения и так далее. Это стоит отметить, потому что многие средние войны зависят друг от друга. Например, MethodOverride () запросит метод REQ.Body для обнаружения перегрузки метода HTTP. С другой стороны, BodyParser () анализирует запрошенный контент и хранит его в req.body. Другим примером является анализ cookie и поддержка сеанса. Сначала мы должны использовать () cookieParser (), а затем Session ().
Многие экспресс -приложения включают такую линию app.use (app.router), которая может показаться немного странной. Фактически, это просто промежуточная функция, которая содержит все определенные правила маршрутизации и выполняет поиск по маршрутизации на основе существующих запросов URL и методов HTTP. Express позволяет решать его положение, но по умолчанию он помещается внизу. Изменяя местоположение маршрута, мы можем изменить приоритет промежуточного программного обеспечения, например, мы хотим использовать отчет об ошибках в качестве последнего промежуточного программного обеспечения, чтобы через него можно было обработать любое исключение, переданное к следующему (); Или мы хотим, чтобы служба статического файла была более низкой приоритетом, чтобы позволить нашему маршруту прослушать загрузки одного запроса на статический файл и т. Д. Это выглядит следующим образом:
Кода -копия выглядит следующим образом:
app.use (express.logger (...));
app.use (Express.BodyParser (...));
app.use (Express.cookieParser (...));
app.use (Express.session (...));
app.use (app.router);
app.use (express.static (...));
app.use (Express.ErrorHandler (...));
Сначала мы добавляем logger (), который может содержать метод Node's req.end (), предоставляя данные о нашем времени ответа. Содержание запроса будет проанализировано (если есть данные), за которыми следует разрешение cookie и поддержка сеанса. В то же время, Treq.session будет определен, когда маршрут в App.Router будет запускается. В настоящее время мы не вызовываем следующий (), поэтому промежуточное программное обеспечение Static () не узнает об этом запросе. Если был определен следующий маршрут, мы можем записать различные состояния, отказываться от загрузки и употреблять точки загрузки и т. Д.
Кода -копия выглядит следующим образом:
var Downloads = {};
app.use (app.router);
app.use (express.static (__ dirname + '/public'));
app.get ('/*', function (req, res, next) {
var file = req.params [0];
Загрузки [file] = Загрузки [файл] || 0;
Загрузки [файл] ++;
следующий();
});
10. Маршрутизация промежуточного программного обеспечения
Маршрутизация может использовать промежуточное программное обеспечение маршрутизатора для передачи более одной функции обратного вызова (или массива) в свои методы. Эта функция очень полезна для ограничения доступа, загрузки данных с помощью маршрутизации и т. Д.
Обычно асинхронное поиск данных может выглядеть как следующий пример, мы используем параметр: ID и пытаемся загрузить пользователя:
Кода -копия выглядит следующим образом:
app.get ('/user/: id', function (req, res, next) {
LoadUser (req.params.id, function (err, user) {
if (err) return next (err);
res.send («Просмотр пользователя» + user.name);
});
});
Чтобы обеспечить сухие принципы и улучшить читаемость, мы можем применить эту логику к промежуточному программному обеспечению. Как показано ниже, абстрагирование этой логики в промежуточное программное обеспечение позволит вам повторно использовать ее при обеспечении простоты нашей маршрутизации.
Кода -копия выглядит следующим образом:
function LokeSer (req, res, Next) {
// вы бы извлекли пользователя из DB
var user = users [req.params.id];
if (user) {
req.user = user;
следующий();
} еще {
Next (New Error ('не удалось загрузить пользователя' + req.params.id));
}
}
app.get ('/user/: id', loadUser, function (req, res) {
res.send («Просмотр пользователя» + req.user.name);
});
Несколько маршрутизаций могут быть применены к более глубокому слою логики в порядке, например, ограничение доступа к учетной записи пользователя. Следующий пример позволяет только пользователям, которые прошли аутентификацию для редактирования своих (ее) учетных записей.
Кода -копия выглядит следующим образом:
Функция Andrestricttoself (req, res, Next) {
req.authenticatedUser.id == req.user.id
? следующий()
: Next (новая ошибка ('неавторизованный'));
}
app.get ('/user/: id/edit', loaduser, andrestricttoself, function (req, res) {
res.send ('Редактирование пользователя' + req.user.name);
});
Всегда помните, что маршрутизация - это просто простая функция, как показано ниже, мы можем определить функции, которые возвращают промежуточное программное обеспечение для создания более выразительного и гибкого решения.
Кода -копия выглядит следующим образом:
функция Andrestrictto (роль) {
возврат функции (req, res, next) {
req.authenticatedUser.role == Роль
? следующий()
: Next (новая ошибка ('неавторизованная'));
}
}
app.del ('/user/: id', loaduser, andrestritto ('admin'), function (req, res) {
res.send ('удаленный пользователь' + req.user.name);
});
Обычно используемый промежуточный «стек» может проходить через массив (который будет применяться рекурсивно), который может быть смешан и сопоставлен в любой степени.
Кода -копия выглядит следующим образом:
var a = [Middleware1, Middleware2]
, b = [Middleware3, Middleware4]
, all = [a, b];
app.get ('/foo', a, function () {});
app.get ('/bar', a, function () {});
app.get ('/', A, Middleware3, Middleware4, function () {});
app.get ('/', a, b, function () {});
app.get ('/', all, function () {});
Для полного кода этого экземпляра см. Пример репозитория промежуточного программного обеспечения маршрута.
У нас может быть несколько раз, чтобы «пропустить» оставшееся промежуточное программное обеспечение и продолжать соответствовать последующим маршрутам. Для этого нам просто нужно позвонить по следующему () с помощью строки «маршрут» - Next ('route'). Если оставшиеся маршруты не соответствуют запрошенному URL -адресу, Express вернет 404, не найденный.
11. HTTP Метод
До сих пор я был подвержен App.get () несколько раз. Кроме того, Express также предоставляет другие общие действия HTTP, такие как app.post (), app.del () и т. Д.
Общим примером использования поста является отправка формы. Затем мы просто устанавливаем атрибут метода формы для публикации в HTML, и управление будет назначено маршруту, определенному ниже.
Кода -копия выглядит следующим образом:
<form method = "post" action = "/">
<input type = "text" name = "user [name]" />
<input type = "text" name = "user [email]" />
<input type = "Отправить" value = "pospent" />
</form>
По умолчанию Express не знает, как обрабатывать содержание этого запроса, поэтому мы должны добавить промежуточное программное обеспечение BodyParser, которое проанализирует содержание приложения/X-WWW-Form-Urlencode и Application/JSON и хранит переменные в REQ.Body. Мы можем использовать это промежуточное программное обеспечение, как следующий пример:
Кода -копия выглядит следующим образом:
app.use (express.bodyParser ());
Приведенным ниже, наш маршрут будет иметь доступ к объекту req.body.user, и когда определено имя и электронная почта, он будет содержать эти два свойства (перевод Примечание: если содержимое, отправленное формой, не является пустым).
Кода -копия выглядит следующим образом:
app.post ('/', function (req, res) {
console.log (req.body.user);
res.redirect ('Back');
});
Если вы хотите использовать метод, подобный Pul в форме, мы можем использовать скрытый ввод с именем _method, который можно использовать для изменения методов HTTP. Чтобы сделать это, нам сначала нужна промежуточное программное обеспечение Methodoverride, которое должно появиться после BodyParser, чтобы использовать значение формы, содержащиеся в его req.body.
Кода -копия выглядит следующим образом:
app.use (express.bodyParser ());
app.use (express.methodoverride ());
Почему эти методы не принадлежат по умолчанию? Проще говоря, это просто потому, что в этом нет необходимости для полной функциональности, требуемой Express. Использование методов зависит от вашего приложения, вам может не понадобиться, и клиент все еще может использовать методы, такие как Put and Delete, и вы можете использовать их напрямую, потому что MethodOverride предоставляет очень хорошее решение для формы. Вот демонстрация того, как использовать пут, который может выглядеть как:
Кода -копия выглядит следующим образом:
<form method = "post" action = "/">
<input type = "hidden" name = "_ method" value = "put" />
<input type = "text" name = "user [name]" />
<input type = "text" name = "user [email]" />
<input type = "Отправить" value = "pospent" />
</form>
app.put ('/', function () {
console.log (req.body.user);
res.redirect ('Back');
});
12. Обработка ошибок
Express предоставляет метод app.error () так, чтобы полученное исключение было выброшено по маршруту или перенесено на следующий (ERR). Следующий пример будет обрабатывать разные страницы на основе определенного исключения с необработанным:
Кода -копия выглядит следующим образом:
Функция NotFound (MSG) {
this.name = 'notfound';
Error.call (это, msg);
Error.captUrestacktrace (это, arguments.callee);
}
Notfound.protototype .__ Proto__ = error.prototype;
app.get ('/404', function (req, res) {
бросить новое нефалочное;
});
app.get ('/500', function (req, res) {
Бросьте новую ошибку ('Chekboard Cat!');
});
Как описано ниже, мы можем позвонить в app.error () несколько раз. Здесь мы обнаруживаем неразрешимый экземпляр и отобразим страницу 404 или переходим к следующему обработчику ошибок. Стоит отметить, что эти процессоры могут быть определены в любом месте, потому что они будут размещены под процессором маршрутизации, когда слушает (). Это позволяет определения в блоке configure (), чтобы мы могли использовать различные методы обработки исключений на основе среды.
Кода -копия выглядит следующим образом:
app.error (function (err, req, res, next) {
if (err ancessionof notfound) {
res.render ('404.jade');
} еще {
Next (err);
}
});
Для простоты, здесь мы предполагаем, что все ошибки этой демонстрации 500, и, конечно, вы можете выбрать то, что вам нравится. При выполнении системных вызовов в файловую систему, такую как Node, вы можете получить error.code с помощью enoEnt, что означает «нет такого файла или каталога», который мы можем использовать в обработчике ошибок или при необходимости отобразить указанную страницу.
Кода -копия выглядит следующим образом:
app.error (function (err, req, res) {
res.render ('500.jade', {
Ошибка: ошибка
});
});
Наше приложение также может использовать промежуточное программное обеспечение Connect ErrorHandler для сообщений о исключениях. Например, когда мы хотим вывести исключение Stderr в среде «разработки», мы можем использовать:
Кода -копия выглядит следующим образом:
app.use (express.errorhandler ({dilmbelexceptions: true}));
В то же время, на этапе разработки, нам может потребоваться отобразить исключения, которые мы проходим и добавляем на модную страницу HTML, для которой мы можем установить ShowStack на True.
Кода -копия выглядит следующим образом:
app.use (express.errorhandler ({showstack: true, dilmberexceptions: true}));
Промежуточное программное обеспечение ErrorHandler также может вернуть JSON, когда принять: Application/JSON существует, что очень полезно для разработки приложений, которые в значительной степени зависят от клиентского JavaScript.
13. Предварительная обработка параметра маршрута
Предварительная обработка параметров маршрутизации посредством неявной загрузки данных и проверки запросов может значительно улучшить читаемость вашей программы. Например, вам обычно нужно постоянно получать основные данные из нескольких маршрутов. Например, загрузка пользователя с /пользователем /: id, мы могли бы сделать это:
Кода -копия выглядит следующим образом:
app.get ('/user/: userid', function (req, res, next) {
User.get (req.params.userid, function (err, user) {
if (err) return next (err);
res.send ('user' + user.name);
});
});
Благодаря предварительной обработке наши параметры могут быть сопоставлены с обратными обращениями, которые выполняют проверку, управление и даже загружают данные из базы данных. Следующим образом, мы называем app.param () с именами параметров и надеемся отобразить его с каким -то промежуточным программным обеспечением. Как вы можете видеть, мы принимаем параметр ID, представляющий значение заполнителя. Используя это, мы загружаем пользователя как обычно и обрабатываем ошибку и просто вызовом следующему (), чтобы передать управление следующему препроцессору или процессору маршрутизации.
Кода -копия выглядит следующим образом:
app.param ('userid', function (req, res, next, id) {
User.get (id, function (err, user) {
if (err) return next (err);
if (! user) return next (new Error ('не удалось найти пользователя));
req.user = user;
следующий();
});
});
Как только это будет сделано, вышеизложенное улучшит читаемость маршрута и позволит нам легко делиться логикой на протяжении всей программы:
Кода -копия выглядит следующим образом:
app.get ('/user/: userid', function (req, res) {
res.send ('user' + req.user.name);
});
14. Просмотреть обработку
В файле представления используется формат <mame>. <Engine>, где <Engine> является названием требуемого модуля. Например, Mayout.ejs сообщит системе представления о необходимости ('ejs'), а загруженный модуль должен (экспорт) метод exports.compile (str, опции) и вернуть функцию для адаптации к экспрессу. app.register () может использоваться для изменения этого поведения по умолчанию для карты расширений файлов на определенные двигатели. Например, «foo.html» может быть обработан с помощью EJS.
В следующем примере используется Jade для обработки index.html. Поскольку мы не используем макет: ложь, содержание, обработанное index.jade, будет передаваться в локальную переменную, называемую телом в макете. Jade.
Кода -копия выглядит следующим образом:
app.get ('/', function (req, res) {
res.render ('index.jade', {title: 'my site'});
});
Новый настройка двигателя View позволяет нам указать механизм шаблона по умолчанию, например, когда мы используем Джейд, вы можете установить его так:
Кода -копия выглядит следующим образом:
app.set ('view Engine', 'Jade');
Позвольте нам справиться с этим:
Кода -копия выглядит следующим образом:
res.render ('index');
Соответствует:
Кода -копия выглядит следующим образом:
res.render ('index.jade');
Когда двигатель просмотра установлен, расширение является необязательным, но мы все еще можем смешать соответствующий шаблонный двигатель:
Кода -копия выглядит следующим образом:
res.render ('ore-page.ejs');
Express также предоставляет параметры параметров просмотра, которые будут применяться к представлению каждый раз, когда он отображается, например, если вы не хотите использовать макеты:
Кода -копия выглядит следующим образом:
app.set ('options wormes', {
макет: ложь
});
Это может быть перегружено внутри звонка res.render () при необходимости:
Кода -копия выглядит следующим образом:
res.render ('myview.ejs', {mayout: true});
Когда необходимо изменить макет, нам обычно нужно указать другой путь. Например, когда мы устанавливаем Engine Engine на Джейд, а файл назван ./views/mylayout.jade, мы можем просто передать параметры:
Кода -копия выглядит следующим образом:
res.render ('page', {mayout: 'mylayout'});
В противном случае (Примечание переводчика: когда двигатель просмотра не установлен на нефрит или другой двигатель), мы должны указать расширение:
Кода -копия выглядит следующим образом:
res.render ('page', {mayout: 'mylayout.jade'});
Они также могут быть абсолютными путями:
Кода -копия выглядит следующим образом:
res.render ('page', {mayout: __dirname + '/../../mylayout.jade'});
Есть хороший пример этого - настроить начало и закрытие тегов EJS:
Кода -копия выглядит следующим образом:
app.set ('options wormes', {
открыть: '{{',
закрывать: '}}'
})
15. Просмотреть части
Система просмотра Express имеет встроенную поддержку деталей и коллекций, что эквивалентно замене фрагмента документа на «мини-». Пример, рендеринг неоднократно в представлении для отображения комментариев, мы можем использовать набор деталей:
Кода -копия выглядит следующим образом:
Partial ('Comment', {Collection: Comments});
Если никаких других вариантов или локальных переменных не требуется, мы можем опустить весь объект и просто передать его в массив, что эквивалентно вышеизложенному:
Кода -копия выглядит следующим образом:
частично («Комментарий», комментарии);
При использовании набор компонентов предоставляет некоторую «волшебную» поддержку для локальных переменных бесплатно:
1. Перестерна
2. Индексноллекция в объекте сбора
3. LastIncollection True, когда это последний объект
4. Коллекционная длина объекта сбора
Передача (генерирование) локальных переменных имеет более высокий приоритет. В то же время локальные переменные, передаваемые родительскому мнению, также подходят для детей. Например, когда мы используем Partial ('blog/post', post), чтобы отобразить сообщение в блоге, он будет генерировать местную переменную. В представлении есть локальная переменная пользователя, которая вызывает эту функцию, которая также будет действительна для блога/сообщения. (Примечание переводчика: здесь частично больше похож на метод включения в PHP).
ПРИМЕЧАНИЕ. Осторожно используйте сбор деталей, адаптация коллекций деталей по длине 100 эквивалентна 100 просмотрам, которые нам необходимы для обработки. Для простых коллекций лучше всего повторить встроенный, а не использовать сборщик компонентов, чтобы избежать чрезмерных накладных расходов.
16. Просмотреть поиск
Поиск выполняется по сравнению с родительским представлением (путь). Если у нас есть страница просмотра под названием Views/user/list.jade, а Partial ('Edit') записана внутри нее, она попытается загрузить виды/user/edit.jade, а Partial ('../ Сообщения') загрузит представления/сообщения. Jade.
Система представления также поддерживает индексацию шаблона, позволяя использовать каталог с тем же именем, что и представление. Например, в маршруте, Res.Render («Пользователи») получает non views/users.jade, то есть представления/пользователи/index.jade. (Примечание переводчика: сначала обработайте ситуацию <Tape>. <Engine>, затем обработайте ситуацию <taft>/<index. <Engine>. Подробнее см. View.js.)
При использовании приведенного выше индекса представления мы используем Partial («пользователи») для обращения к представлениям/пользователям/index.jade в том же каталоге, что и представление. В то же время система представления будет пытаться индексировать ../ Пользователи/Индекс без того, чтобы мы не вызовывали Partial («Пользователи»).
17. Шаблонные двигатели
Ниже приведены наиболее часто используемые шаблонные двигатели для экспресса:
1.haml: реализация HAML
2. Джейд: Haml.js преемник
3.EJS: встроенный JavaScript
4.coffeekup: шаблон на основе кофериста
5. JQuery Шаблоны
18. Поддержка сессии
Поддержка сеанса может быть получена с помощью промежуточного программного обеспечения Connect's Session. По этой причине нам обычно нужно предварительно предварительно его с помощью промежуточного программного обеспечения CookieParser, которое будет анализировать и хранить данные cookie в req.cookies.
Кода -копия выглядит следующим образом:
app.use (express.cookieParser ());
app.use (express.session ({секрет: "клавишная кошка"}));
По умолчанию промежуточное программное обеспечение сеанса использует встроенное хранилище памяти Connect, но есть много других реализаций. Например, Connect-Redis предоставляет хранилище сеанса Redis, которое можно использовать как следующее:
Кода -копия выглядит следующим образом:
var redisstore = require ('connect-redis') (Express);
app.use (express.cookieParser ());
app.use (express.session ({секрет: "Клавиатура", магазин: новый Redisstore}));
На этом этапе свойства req.session и req.sessionstore будут использоваться всеми маршрутами и последующим промежуточным программным обеспечением. Все свойства на req.session будут автоматически сохранены в ответе, например, когда мы хотим добавить данные в корзину покупок:
Кода -копия выглядит следующим образом:
var redisstore = require ('connect-redis') (Express);
app.use (express.bodyParser ());
app.use (express.cookieParser ());
app.use (express.session ({секрет: "Клавиатура", магазин: новый Redisstore}));
app.post ('/add-cart', function (req, res) {
// мы можем опубликовать несколько элементов через одну форму
// (в некоторых случаях используется промежуточное программное обеспечение BodyParser ())
var elects = req.body.items;
req.session.items = элементы;
res.redirect ('Back');
});
app.get ('/add-cart', function (req, res) {
// при возвращении, страница get /add-to-cart
// Мы можем проверить req.session.items && req.session.items.length
// распечатать подсказку
if (req.session.items && req.session.items.length) {
req.notify («info», «У вас есть проценты S -элементы в вашей корзине», req.session.items.length);
}
Res.Render ('Shopping Cart');
});
Для Treq.session он также имеет такие методы, как сеанс#touch (), сеанс#destong (), сеанс#Regenerate () и т. Д. Для поддержания и эксплуатации сеансов. Для получения более подробной информации, пожалуйста, обратитесь к документации Sonnect Session.
19. Руководство по обновлению
Для студентов, использующих Express 1.x, если у вас есть важные программы, которые необходимо обновить до 2.x для лучшей поддержки, см. Официальное очень подробное руководство по миграции: http://expressjs.com/guide.html#migration-guide