После установки узла (загрузка) создайте каталог на вашем компьютере и запустите свое первое приложение.
$ mkdir Hello-World
В этом каталоге вы определите приложение «пакет», который ничем не отличается от любого другого пакета узлов. Файл JSON в файловом каталоге четко определяет зависимость. Вы можете использовать команду NPM, чтобы получить последнюю версию Express, которую вам нравится делать, вместо установки версии, отличной от «3.x», чтобы предотвратить любые неизвестные сюрпризы.
{"name": "Hello-World", "Описание": "Hello World Test App", "версия": "0.0.1", "private": true, "зависимости": {"Express": "3.x"}}Теперь у вас есть пакет. В этом каталоге вы можете использовать NPM (1) для установки этой зависимости, в этом случае вам нужно только ввести:
$ npm установка
Как только NPM будет закончен, у вас будет Express 3.x, от которого вы зависят в каталоге /node_modules. Вы можете проверить это с помощью NPM LS, как и Express Tree и его собственные зависимости, показанные в следующем фрагменте кода.
$ npm [email protected] /private /tmp└ack [email protected] ├½ [email protected] ├½ [email protected] │ ├ ├мобил [email protected] │ ├ описание [email protected] ├ ├ ├ │ │ │ │ │ │ │ │ ├ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├ │ │ │ │ │ │ │ ├ │ ├ │ │ ├ │ │ │ ├ │ │ │ │ │ │ ├ │ │ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ ├ └ack [email protected] ├½ [email protected] ├~ ─ [email protected] ├í@ [email protected] ├í@ [email protected] ├½ [email protected] ├ описано [email protected] ├ ├-Send @0.0.1 ├ └ └ └ °20.0.0.0.0.4 ├ └- Соглассы [email protected] └acks [email protected]
Теперь создайте само приложение! Создайте файл с именем app.js или server.js, независимо от того, какой из них вам нравится, представьте Express, а затем используйте Express () для создания нового приложения:
var Express = require ('Express'); var app = express ();Новые экземпляры приложения могут начать определение маршрутов через app.verb (), и в этом случае ответить на запрос «get/» через строку «Hello World». REQ и RES - это то же самое, что вам объекты узла, так что вы можете вызвать Res.pipe (), req.on («Данные», обратный вызов) и другие вещи, которые вы бы сделали, которые не имеют ничего общего с Express.
Express улучшает эти объекты, чтобы предоставить вам интерфейсы более высокого уровня, такие как res.send (), в дополнение к добавлению длины контента:
app.get ('/hello.txt', function (req, res) {res.send ('hello world');});Теперь вызовите метод app.listen () для соединения для связывания и прослушивания, принимая те же параметры, что и Net.server #Listen ():
var server = app.listen (3000, function () {console.log ('прослушивание на порту %d', server.address (). port);});Используйте Express (1) для создания приложения
Команда Express поддерживает удобный генератор проектов под названием Express Generator (1). Если вы установите экспресс-генератор по всему миру с помощью NPM, вы можете получить доступ к нему из любого места на своем компьютере:
$ npm install -g Express -Generator
Этот инструмент предоставляет простой способ получить структуру приложения, но, например, с ограниченным объемом, он поддерживает лишь несколько шаблонных двигателей и выражает себя фактически поддерживает создание любых шаблонов кадров веб -сайта для узла. Вы можете просмотреть это через помощь:
Использование: Express [Options] Параметры: -h, -help
Если вы хотите сгенерировать приложение, которое поддерживается в любом случае, вам просто нужно просто выполнить ::
$ Express -CSS Stylus myAppCreate: myAppCreate: myApp/package.jsonCreate: myApp/app.jscreate: myApp/publicCreate: myApp/public/javascriptScreate: myApp/public/imageCreate: myApp/public/stylesheetscrete: myApp/public/styles/styleceetcretcretcretcretceete: myApp/stylesheetcretceete: myApp/stylsheetcrete. myApp/routes/index.jscreate: myApp/views/index.jadecReate: myApp/views/layout.jadeinstall зависимости: $ cd myApp && npm installrun Приложение: $ debug = myApp
Как и любое другое приложение узла, необходимо установить следующие зависимости:
Тогда давайте начнем.
$ npm Start
Это все, что вам нужно, чтобы получить простое приложение. Помните, что Express не связан с какой -либо конкретной структурой каталогов, это всего лишь руководство для вас. Выбор структуры приложения можно просматривать в репозитории GitHub.
Обработка ошибок
Обработка ошибок Определения промежуточного программного обеспечения похожи на обычное промежуточное программное обеспечение, но должны быть определены 4 параметра, что является подписью функции (ERR, REQ, RES, NEXT):
app.use (function (err, req, res, next) {console.error (err.stack); res.send (500, 'что -то сломано!');});Хотя принудительная обработка ошибок промежуточное программное обеспечение обычно не определяется в конце, после другого app.use (), его вызов выглядит следующим образом:
var bodyparser = require ('body-parser'); var methodoverride = require ('method-override'); app.use (bodyparser ()); app.use (methodoverride ()); app.use (app.router); app.use (function (err, req, res, next) {// logic});Ответ в этом промежуточном программном обеспечении является совершенно произвольным. Вы можете ответить на страницу ошибок HTML, простое сообщение, строку JSON или любой другой ответ, который вам нравится.
Чтобы построить организованную и более высокую структуру, вы можете определить несколько из этих ошибок, обработанных промежуточным программным обеспечением, точно так же, как вы определили бы нормальное промежуточное программное обеспечение. Например, предположим, что вы хотите определить обработчик ошибок для запроса XHR, в дополнение к этому, вы можете сделать следующее:
var BodyParser = require ('body-parser'); var methodoverride = require ('method-override'); app.use (bodyparser ()); app.use (methodOverride ()); app.use (app.router); app.use (logerrors); app.use (clienterrorhandler); app.use (errorhandler);В более общих логиках вы можете записать запросы и сообщения об ошибках в STDERR, LOGGLY или аналогичные службы:
function LogErrors (err, req, res, next) {console.error (err.stack); Next (err);}Определение ClientErrorHandler показано ниже, обратите внимание, что эта ошибка будет явно передана следующему.
Function clientErrorHandler (err, req, res, next) {if (req.xhr) {res.send (500, {error: 'что -то взорвалось!'}); } else {Next (err); }}Следующая реализация ошибок «всесторонняя» может быть определена как:
функция errorHandler (err, req, res, next) {res.status (500); res.render ('error', {error: err});}Подсчет пользователей онлайн
В этом разделе подробно объясняется (небольшое) приложение и использует Redis для отслеживания количества пользователей в Интернете. Сначала создайте пакет. Файл JSON содержит два вложения, одно для клиента Redis, а другое для самого экспресса. Также убедитесь, что вы обернули Redis и пробежали через $ redis-server.
{"name": "app", "version": "0.0.1", "Зависимости": {"Express": "3.x", "Redis": "*"}}Далее вам нужно создать приложение и соединение с Redis:
var Express = require ('express'); var redis = require ('redis'); var db = redis.createclient (); var app = express ();Следующее промежуточное программное обеспечение отслеживает онлайн -пользователей. Здесь мы будем использовать отсортированный набор, чтобы мы могли запросить пользователей онлайн -пользователей Redis, который занимает только Milliseconds. Мы используем временные метки в качестве «онлайн -стандарта» для участников. Обратите внимание, что здесь мы используем строку пользователя-агента вместо обычного идентификатора пользователя.
app.use (function (req, res, next) {var ua = req.headers ['user-agent']; db.zadd ('online', date.now (), ua, затем);});Следующее промежуточное программное обеспечение состоит в том, чтобы использовать ZrevrangeByscore в последнюю минуту, чтобы получить максимальное количество онлайн -пользователей, мы всегда получаем самые последние онлайн -пользователи, а его верхний предел - текущая метка времени минус 60000 миллисекунд.
app.use (function (req, res, next) {var min = 60 * 1000; var Ago = date.now () - min; db.zrevrangebyscore ('online', '+inf', oud, function (err, users) {if (err) return next (err); req.online = users; next ();});});Наконец, мы используем его через URL и связываем его с портом! Вот и все, доступ к этому приложению в новом браузере, и вы увидите увеличение количества людей в Интернете.
app.get ('/', function (req, res) {res.send (req.online.length + 'пользователи онлайн');}); app.listen (3000);Обратный прокси для экспресса
Использование Express за обратным прокси, таким как лак или Nginx, является тривиальным, однако это требует конфигурации. Включив «Trust Proxy» настройки app.enable («Доверие доверия»), Express имеет некоторые уловки для обратного прокси, поля заголовка X-Forwarded-* могут быть заслуживающими доверия, иначе они могут быть легко обмануты.
Включение этой настройки имеет некоторые тонкие эффекты. Во-первых, X-Forwarded-Proto может быть установлен обратным прокси, сообщая приложению, что это HTTPS или просто простой HTTP. Это значение отражается на REQ.Protocol.
Второе изменение состоит в том, что значения REQ.IP и REQ.IPS заполнят список адресов X-Forwarded-для.
Debug Express
Express использует модуль отладки внутренне для записи информации о сопоставлении пути и шаблонах приложений. Чтобы увидеть это сообщение, просто установите переменную среды отладки для выражения:*, и после начала приложения вы увидите информацию отладки в консоли.
$ Debug = express:* node ./bin/www
Запуск этого примера Hello World напечатает следующее:
Express: загрузка приложений в режиме разработки +0MSEXPRESS: маршрутизатор определен GET /Hello.txt +0MSEXPRESS: ROUTER определен GET /Hello.txt +1MS
Кроме того, программа, сгенерированная экспрессией исполняемого файла (генератор), также использует модуль отладки, а область по умолчанию является пространством имен отладки my-применения.
Вы можете включить эти заявления отладки со следующей командой
$ Debug = my-application node ./bin/www
Для получения дополнительной информации о отладке см. Руководство по отладки