Рамковата експресна - Ръководство за потребителя

възможности

  • ясен маршрута
  • Помощници пренасочване (пренасочи помощници)
  • Динамични помощници представителства
  • Опции концепции на ниво приложение
  • Ангажирайте се със съдържанието си
  • приложения за монтиране
  • Съсредоточете се върху производителността
  • Оказване на шаблони и подкрепа на фрагменти модели (вижте частични)
  • Конфигурация бързо превключване на различни задачи (развитие. Производство., И т.н.)
  • Съхранява се в изскачащите съобщения на сесията (бързи съобщения)
  • Направени въз основа на Connect
  • експресна скрипт за бързо генериране на заявление скелет
  • високо тест покритие

или да имат достъп до изричното команда, определени в световен мащаб:

за бърз старт

Най-лесният начин да започнете с изричното да стартирате команда Express. който ще генерира приложение:

Създаване на сървъра

За да създадете express.HTTPServer инстанция. просто се обадете метод createServer (). С нашата молба Например, можем да определим маршрути въз основа на HTTP-методи, в този пример app.get ().

Създаване на HTTPS сървър

За да нулирате express.HTTPSServer. извършваме същите стъпки, както по-горе, но от де опции пропуск обект, който съдържа ключ, сертификат и други параметри, които са написани в модула за документация HTTPS NodeJS.

Конфигуриране

Express поддържа произволни среда (среди), например, производство и развитие. Разработчиците могат да използват метода на конфигуриране (). За да добавите желаната функция за дадена среда. Когато конфигурирате () се нарича без заобикалящата името, тя ще работи във всякаква среда, преди всяка работа, конфигуриране. където определената среда.

В следващия пример, ние просто използвайте dumpExceptions опция в режим на проектиране, изключителен клиент отговор изключение на стека. И в двата режима, ние използваме същия слой и methodOverride bodyParser. Обърнете внимание на използването на app.router. което само по себе си го прави възможно да се монтира на маршрутите - в противен случай те се монтират на първия app.get повикване (). app.post () и т.н.

За да се обграждат с подобни настройки, можете да прехвърлите няколко имена среди:

За вътрешни и произволни настройки в експрес има методи, (ключови [, Вал]). даде възможност (ключ). забраните (ключ):

За да зададете можем да зададем променлива NODE_ENV заобикалящата среда. Например:

Това е много важно, защото много от механизмите за кеширане се активира само в производствената среда.

Изразете от кутията поддържа следните настройки:

  • Начало - основния начин на прилагане, който се използва за res.redirect (), както и за подпомагане на монтирани прозрачни приложения.
  • Изглед към главната директория. По подразбиране tekuschaya_papka / изгледи
  • изглед на двигателя - стандартния шаблон за представяне причинени без разширението на файла.
  • който виждате на екрана - един обект, който отразява глобалните опции за преглед
  • изглед кеш - даде възможност за кеширане представителства (включени в производствената среда)
  • чувствителни маршрути - начини включват, чувствителни
  • строга маршрутизация - ако е разрешена, наклонени черти вече не са ignnoriruyutsya
  • JSONP обаждане - res.send решава () метод на прозрачен носещ JSONP

маршрутизация

Express използва методи HTTP-базирана да се гарантира, смислен, изразителни маршрутизация API. Например, ние искаме да направим на разположение при поискване / потребител / 12 дисплеи профила на потребителя, с идентификатор = 12. За да направите това, ще дефинираме priveldenny маршрут. Стойностите, свързани с именувани области са на разположение в res.params обекта.

Маршрутът е просто низ, който е вграден в двигателя се съставя в един регулярен израз. Например, при съставянето / потребител /: идентификатор. Оказва регулярен израз по този начин:

Също така, можете веднага да прехвърлят регулярния израз. Но като група в регулярен израз не е име, те може да се стигне req.params номера. Тъй като първата група получава в req.params [0]. втори req.params [1], и т.н.

Сега да къдри, и ще изпрати искане до горепосочения маршрут:

По-долу са някои примери за пътища и пътеки, които могат да ги изпълняват:

Например, можем да изпратим POST-OM някои JSON и да отговори на същите JSON-ома, с помощта на слой bodyParser. който знае как да се направи разбор искане JSON (както и други искания) и поставете в отговор req.body:

Като правило, ние използваме "глупави" поле (например / потребител /: ID), която няма граници. Но ако, например, искате да ограничите идентификатора на потребителя само цифри, можете да използвате / потребител /: ID ([0-9] +). Този дизайн няма да стрелят, ако стойността на поле съдържа не-цифрови символа.

Прехвърлянето на контрол на друг маршрут

Задействане на трети аргумент - следващата (). контрол може да се прехвърля към следващия маршрут. Ако не се намери мач, управлението се връща на Свързване и продължава да бъде един слой в реда, в който са включени чрез използване (). Просто пуснете няколко маршрута с един и същи начин. Те току що се обади един по един, до момента, когато един от тях ще отговори вместо да се обадя следващата ().

app.all () метод е полезен, ако имате нужда да изпълнява същата логика за всички HTTP-методи. По-долу се използва този метод за извличане на потребителя от базата данни и нейната цел в req.user.

Свързване рамка слой може да бъде прехвърлена към express.createServer () по същия начин, както ако се използва конвенционален Connect сървър. Например:

Можете да използвате употреба (). Тя е по-удобно, добавяйки, конфигуриране на междинен слой вътре в блока (). по-постепенно.

Обикновено с пластове от Connect можем да свържем Connect, както следва:

Това не е много удобно, така че реекспорт Express Connect-роден-слой:

Редът на слоя е важно. Така че, когато Connect получи искане удовлетворява първия слой добавя чрез createServer () или да използвате (). Тя се нарича с три параметъра: поискване. отговор и обратно повикване функция, често се нарича по-нататък. когато ти се обадя следващата (). контрол се прехвърля на втория слой и т.н. Това е важно, защото толкова много слоеве зависят един от друг. Например methodOverride () се отнася до req.body.method за HTTP-метод претоварване и bodyParser () разбор тялото на молба за участие req.body. Друг пример - разбор бисквитки и сесия подкрепа - първо трябва да се обадя на употребата () за cookieParser (). След това в продължение на сесията ().

Експрес-различни приложения може да има ред app.use (app.router). Може да изглежда странно, но това е просто, за да укажете изрично слой, който включва всички маршрути, които сме създали. Този слой може да бъде включен в произволен ред, въпреки че той е включен по подразбиране в края. Промяна на позицията си, че можете да контролирате предимството на неговото прилагане. Например, ние се нуждаем манипулатор грешка, която ще се задейства, след като всички останали слоеве и да покаже никакво изключение преминали към него от следващата (). Или може да е необходимо да се намали от порядъка на над слоя, обслужващи статични файлове, за да позволи на други маршрути, за да се намеси искания за такива файлове и, например, да преброи от интернет и т.н. Ето как може да изглежда:

Маршрути слой

Маршрути могат да използват маршрутизация слой чрез предаване допълнителен метод обаждане (или масив). Това е полезно, ако искате да ограничите достъпа или да качите всички данни, преди да използвате по маршрута, и т.н.

Обикновено, асинхронен извличане на данни може да изглежда по следния начин (тук ние приемаме: идентификатор параметър и достави данните на потребителя).

За да се придържа към принципа на сухо и подобряване на разбираемостта на кода, е възможно да се организира такава логика използването на слоеве. Както можете да видите, абстрахиране логиката на използването на слоеве, е възможно както да се постигне повторно използване на слоеве, и да направи кода по-красив маршрут.

Като се има предвид факта, че слой - това е просто функция, е възможно да се напише функция, която връща слой (да се осигури още по-изразителен и гъвкаво решение), както е показано по-долу.

Често използваните "комини" пластове могат да се подават като масиви от произволна дълбочина и дърво (те ще се прилага рекурсивно):

Пълна например може да се намери в хранилището.

Има моменти, когато трябва да пропусне останалата част от маршрута слой в стека, а да се продължи изпълнението на следните маршрути. За да направите това, обадете се на следващия () за маршрут на аргумента. Следващата ( "маршрут"). Ако се остави да тече маршрути, Express отговор 404 Не е намерено.

HTTP-методи

Ние многократно използван app.get (). но Express също така осигурява и други HTTP-методи - app.post (). app.del () и т.н.

Най-често срещаният пример за използване на POST - е да изпрати форма. В примера по-долу, ние просто правим HTML форма. След контрол се прехвърля на маршрута, които се определят в следния пример.

По подразбиране Express не знае какво да прави с тялото на искането, така че ние трябва да добавите слой bodyParser (). която ще се анализира искане тяло кодирани прилагане / х-WWW-форма-urlencoded или прилагане / JSON. и сложи req.body на Анализ на резултатите. За да направите това, трябва да кажем, ползване (). както е показано по-долу:

Сега по-долу маршрута ще има достъп до req.body.user обект. който ще бъде името на собственост и електронната поща:

Ако използвате форма на методи като казано, можете да използвате скрити INPUT име _method. която ви позволява да промените HTTP-метод. За да се постигне това, трябва първо да активирате слой methodOverride (). да се поставят след bodyParser (). което му позволява да използва req.body. Полето съдържа пропусната форма.

Тези подгрупи не са активирани по подразбиране, защото Express не трябва да има незабавно пълна функционалност. В зависимост от нуждите за приложение, и не можете да ги използвате. Тогава методи Фут и ИЗТРИЙ все още да са на разположение, но директно. В същото vreyam methodOverride - идеалното решение за HTML-форми. По-долу е пример за използване на метода PUT:

Работа грешка

В експрес има метод app.error (). който получава всички изключения хвърлени маршрути, или предавани под формата на следващия (заблуждават). По-долу е пример за това как да служи на няколко страници с помощта на импровизирани изключения NOTFOUND:

Може да причини app.error () няколко пъти, както е показано по-долу. Тук ние се провери instanceof NOTFOUND и да се покаже на страница 404, или да преминете към следващата манипулатор грешка.

Имайте предвид, че тези манипулатори могат да бъдат дефинирани навсякъде, тъй като те все още ще бъде поставен под манипулатор маршрути слушат (). Това им позволява да се определят в рамките на блока конфигуриране (). така че можем да се справим изключения по различни начини, в зависимост от конкретните условия.

За простота приемем тук, че всички грешки са код 500, но можете да го промените, колкото искате. Например, когато възел прави операции на файловата система, е възможно да се получи грешка поле обект error.code = ENOENT. което означава "не е открит файл или директория", можем да използваме това в манипулатор грешка и показва съответната страница.

Заявленията могат да бъдат използвани, за да се справят с изключения Connect-ovsky слой errorHander. Например, ако искате да се покаже развитието в изключение среда да STDERR. можете да го направите:

Също така в хода на развитие, може да се наложи да се охлади HTML-страници, които показват изпратено или хвърлен изключение. В този случай, трябва да инсталирате showStack настроен да е вярно:

errorHandler слой и в отговор на JSON, ако клиентът изпраща заглавната Accept: заявление / JSON. което е полезно за развитието на AJAX-приложения.

Предварителна обработка на параметрите на маршрута,

Предварителна обработка на параметрите на маршрута, може значително да подобри яснотата на заявлението чрез ясно зареждане на данни и потвърждаване на URL адреса на поискване. Например, ако сте постоянно проверка някои данни за конкретни искания (например потребителски данни за кораба за / потребител /: Идентификационният номер), можете да направите нещо подобно:

С предварителните условия на нашите параметри на заявката могат да бъдат окачени-функцията обаждане, че ще извърши проверка, ограниченията за достъп, или дори изтегляне на данни от базата данни. В примера по-долу, ние наричаме app.param () с името на параметъра, за които искаме да бъдем обаждане. Както можете да видите стигнем аргумент номер. който съдържа името на полето. Така че ние се зареди потребителски обект и да изпълнява нормалната обработка на грешки и просто покана следващата (). за прехвърляне на контрол на следните предварителни условия са или вече на процесора за обработка на маршрут.

Посочените по-горе действия, както вече бе посочено, значително подобряване на четливостта на кода и го правят лесен за използване същата логика в друго приложение места:

рендиране представителства

Вижте имената на файлове, генерирани от схемата <имя>. <движок>. където <движок> - е името на един модул шаблон, който трябва да бъде свързан. Например представителство layout.ejs каза системни концепции, които трябва да се нуждаят ( "EJS"). За да се интегрират в експрес, зареждаем модул трябва да изнася exports.compile метод (ул, опции). и да се върнете функция. За да промените това поведение, можете да използвате метод app.register () - това позволява с свързаните с нея файлови разширения със специален двигател. Например можете да направите, за да foo.html оказване двигатели EJS.

По-долу - пример с помощта на Джейд да оказват index.html. И тъй като ние не използваме оформление: невярно. Топено съдържание index.jade представяне ще бъде по-нататък локална променлива в layout.jade на представителство на тялото.

Създаване изглед на двигателя позволява да посочите шаблона по подразбиране. Например с помощта на Джейд да направите това:

която ще ни позволи да направи това: