Express Framework - Ghidul utilizatorului
oportunități
- rutare clară
- Helpers de redirecționare (redirecționare ajutoare)
- asistenți dinamice reprezentări
- Opțiuni concepte la nivel de aplicație
- Interacționați cu conținutul
- aplicații de montare
- Focus pe performanță
- Rendering șabloane și susținerea modelelor fragmentelor (vezi amprente parțiale)
- Configurarea comuta rapid pentru diferite sarcini (de dezvoltare. Producție., Etc.)
- Stocate în mesajele pop-up sesiune (mesaje instantanee)
- Realizat pe baza Connect
- script expres pentru generarea rapidă aplicație schelet
- Gradul de acoperire ridicat de testare
sau de a avea acces la comanda expres, set global:
Pornire rapidă
Cel mai simplu mod de a începe cu Express poate rula expres comanda. care va genera o cerere:
Creați un server
Pentru a crea express.HTTPServer instanță. pur și simplu apel metoda createServer (). Cu exemplu cererea noastră, putem defini trasee bazate pe HTTP-metode, în acest exemplu app.get ().
Crearea HTTPS-server
Pentru a inițializa express.HTTPSServer. vom efectua aceiași pași ca mai sus, dar de opțiuni de trecere DE obiect care conține cheie, certificat, și alți parametri, care sunt scrise în modulul de documentare https NodeJS.
Configurarea
Express suportă medii arbitrare (medii), de exemplu, producție și dezvoltare. Dezvoltatorii pot utiliza metoda de configurare (). Pentru a adăuga funcția dorită pentru un mediu dat. Când Configure () este apelată fără înconjoară numele, se va lucra în orice mediu de lucru înainte de orice configurare. în care mediul specificat.
În exemplul următor, vom folosi pur și simplu opțiunea dumpExceptions în modul de proiectare, remarcabil de răspuns a clientului excepție stiva urme. În ambele moduri, folosim același strat și methodOverride bodyParser. De notat utilizarea app.router. care, în sine, face posibilă montarea traseelor - în caz contrar acestea sunt montate pe primul app.get apel (). app.post () etc.
Pentru a înconjura cu setări similare, puteți transfera mai multe nume medii:
Pentru setări interne și arbitrare în Express există metode stabilite (cheie [Val]). activați (cheie). dezactiva (cheie):
Pentru a seta putem seta un mediu înconjurător NODE_ENV variabilă. De exemplu:
Acest lucru este foarte important, deoarece o mulțime de mecanisme de caching sunt activate numai în mediul de producție.
Express din caseta acceptă următoarele setări:
- acasă - modul de bază de aplicare, care este folosit pentru res.redirect (), precum și pentru a sprijini aplicațiile transparente montate.
- vizualizări vizualiza directorul rădăcină. Implicit tekuschaya_papka / vizualizări
- motor de vizualizare - șablonul implicit pentru depuneri cauzate fără extensia de fișier.
- opțiunile de vizualizare - un obiect care să reflecte opțiunile de vizualizare la nivel mondial
- vedere din cache - permite reprezentări de cache (incluse în mediul de producție)
- trasee sensibile caz - rute includ, caz sensibile
- rutare stricte - dacă este activată, slash-uri rămase în urmă nu mai sunt ignnoriruyutsya
- JSONP callback - rezolva res.send () metoda suportului transparent JSONP
rutare
Express utilizează metode bazate pe HTTP pentru a asigura sens, API-ul de rutare expresivă. De exemplu, vrem să pună la dispoziție, la cerere / utilizator / 12 afișează profilul utilizatorului cu id = 12. Pentru a face acest lucru, vom defini mai jos traseu priveldenny. Valorile asociate cu câmpurile numite sunt disponibile în res.params obiect.
Traseul este doar un șir de caractere, care este în interiorul motorului este compilat într-o expresie regulată. De exemplu, atunci când compilarea / utilizator /: id. se transformă o expresie regulată ca aceasta:
De asemenea, puteți transfera imediat expresia regulată. Dar, ca un grup într-o expresie regulată nu este un nume, ele pot fi atinse într-un număr req.params. Deoarece primul grup devine din req.params [0]. un al doilea req.params [1], etc.
Acum, ia curbarea, și va trimite cererea de pe ruta menționată mai sus:
Mai jos sunt câteva exemple de trasee și căi pe care le pot întâlni:
De exemplu, putem trimite un post-om unele JSON și să răspundă la aceleași JSON-ohmi, folosind un bodyParser strat. care știe cum pentru a analiza cererea JSON (precum și alte cereri) și puneți răspunsul în req.body:
Ca regulă, folosim câmpul „prost“ (de exemplu, / utilizator /: ID), care nu are limite. Dar dacă noi, de exemplu, doresc să limiteze ID-ul de utilizator numai caractere numerice, puteți utiliza / utilizator /: id ([0-9] +). Acest design nu se va declanșa în cazul în care valoarea câmp conține caractere non-numerice.
Transferul controlului la o altă rută
Declanșarea al treilea argument - următor (). control poate fi transferat la următoarea rută. În cazul în care nu se potrivesc este găsit, se trece înapoi la Connect, și continuă să fie un strat în ordinea în care au fost incluse prin utilizare (). Trebuie doar să rulați câteva rute cu același mod. Tocmai au chemat unul câte unul, până în momentul în care unul dintre ei va răspunde în loc de a apela următor ().
app.all () metoda este utilă în cazul în care aveți nevoie pentru a efectua aceeași logică pentru toate HTTP-metode. Mai jos, vom folosi această metodă pentru a prelua utilizatorul din baza de date și scopul său în req.user.
Strat cadru Conectați poate fi transferat la express.createServer () în același mod ca și în cazul convențional Connect-server utilizat. De exemplu:
Puteți folosi de utilizare (). Este mai convenabil adăugarea Configureaza straturi intermediare din interiorul blocurilor (). mai mult progresiv.
De obicei, cu straturi de Connect ne putem conecta Connect după cum urmează:
Nu este foarte convenabil, astfel încât re-export Express Connect-nativ-strat:
Ordinea straturilor este importantă. Deci, atunci când Connect primește o cerere îndeplinește primul strat adăugat prin createServer () sau utilizare (). Este numit cu trei parametri: cerere. de răspuns, și de apel invers-funcție, denumit în mod obișnuit următoare. atunci când apelați următoarea (). controlul este transferat la al doilea strat, etc. Acest lucru este important, deoarece atât de multe straturi depind unul de altul. De exemplu, methodOverride () se referă la req.body.method suprasarcină HTTP metodă și bodyParser () parses organismul cerere pentru a umple req.body. Un alt exemplu - parsare cookie-uri și sesiuni de sprijin - trebuie să apelați mai întâi utilizarea () pentru cookieParser (). apoi pentru sesiunea ().
Express-varietate de aplicații ar putea avea o linie app.use (app.router). Poate părea ciudat, dar acest lucru este pur și simplu pentru a specifica în mod explicit stratul, care include toate rutele pe care le-am creat. Acest strat poate fi inclus în orice ordine, deși este inclusă în mod implicit în cele din urmă. Schimbarea poziției sale, puteți controla prioritatea punerii sale în aplicare. De exemplu, avem nevoie de o tratare a erorilor, care va fi declanșat după ce toate celelalte straturi și afișa orice excepție a trecut de către următoarea (). Sau poate fi necesar pentru a reduce ordinea stratului de mai sus, livrând fișiere statice, pentru a permite alte rute pentru a intercepta cererile de astfel de fișiere și, de exemplu, numărul de numărul de download-uri, etc. Iată cum ar putea arăta:
Rutele strat
Rutele pot folosi strat de rutare prin transmiterea metoda callback suplimentare (sau matrice). Acest lucru este util dacă doriți să restricționați accesul sau încărca date înainte de a utiliza ruta, etc.
De obicei, recuperarea de date asincrone ar putea arata ceva de genul asta (aici ne ia: id parametrul și va expedia datele utilizatorului).
Pentru a adera la principiul DRY și de a îmbunătăți lizibilitatea codului, este posibil să se organizeze o astfel de logică folosind straturi. După cum puteți vedea, abstractizare logica folosind straturi, este posibil să se realizeze o straturi de re-utilizare, și de a face ruta codul mai frumos.
Ținând cont de faptul că stratul - este doar o funcție, este posibil să se scrie o funcție care returnează un strat (pentru a oferi chiar și o soluție mai expresivă și mai flexibilă), așa cum se arată mai jos.
utilizate în mod frecvent „stive“ straturi pot fi transmise ca matrici de adâncime și copac (acestea vor fi aplicate recursiv) arbitrar:
exemplu complet poate fi găsit în depozit.
Sunt momente când trebuie să pierdeți restul stratului traseu în stivă, dar să continue executarea următoarelor rute. Pentru a face acest lucru, apelați următoarea () pentru a ruta argumentul. următor ( "rută"). În cazul în care stânga pentru a rula rute, răspunsul Express 404 nu a fost găsit.
HTTP-metode
Am folosit în mod repetat app.get (). dar Express oferă, de asemenea, alte metode HTTP - app.post (). app.del () etc.
Cel mai comun exemplu folosind POST - se trimite un formular. In exemplul de mai jos, vom face pur și simplu HTML-formă. Apoi, controlul este transferat pe traseu, pe care îl definim în exemplul următor.
În mod implicit Express nu știe ce să facă cu corpul cererii, așa că trebuie să adăugați un strat bodyParser (). care va analiza cererea corp codificate application / x-www-form-urlencoded sau application / json. și a pus req.body rezultate parsare. Pentru a face acest lucru, trebuie să spunem utilizare (). așa cum se arată mai jos:
Acum, itinerariul de mai jos va avea acces la obiect req.body.user. care va fi numele proprietății și e-mail:
Dacă utilizați o formă de metode, cum ar fi PUT, puteți utiliza un INPUT numit _method ascunse. care vă permite să schimbați HTTP-metoda. Pentru a realiza acest lucru, trebuie să activați mai întâi un strat methodOverride (). să fie plasate după bodyParser (). permițându-i să utilizeze req.body. Câmpul conține formă transmisă.
Aceste straturi nu sunt activate în mod implicit, deoarece Express nu trebuie să aibă imediat funcționalitate completă. În funcție de necesitățile aplicației, și nu le pot folosi. Apoi, metodele PUT și DELETE în continuare să fie disponibile, dar în mod direct. În același methodOverride vreyam - soluția perfectă pentru HTML-forme. Mai jos este un exemplu folosind metoda PUT:
eroare de manipulare
La Express se app.error metoda (). care primește toate excepțiile aruncate rute, sau transmisă ca următoarea (ERR). Mai jos este un exemplu de modul de a servi mai multor pagini utilizând excepții improvizate Not Found:
Poate provoca app.error () de mai multe ori, așa cum se arată mai jos. Aici vom verifica și Not Found instanceof arată o pagină 404, sau până la următoarea tratare a erorilor.
Rețineți că aceste rutine de tratare pot fi definite oriunde, deoarece acestea vor fi în continuare plasat sub handler rute asculta (). Aceasta le permite să se definească blocuri din cadrul Configure (). astfel încât să ne putem ocupa de excepții în moduri diferite, în funcție de mediul actual.
Pentru simplificare presupunem aici că toate bug-uri sunt cod 500, dar o puteți modifica după cum doriți. De exemplu, atunci când Nodul face operațiunile de sistem de fișiere, este posibil să primiți câmpul obiect de eroare error.code = ENOENT. ceea ce înseamnă „fișier nu a fost găsit sau director“, putem folosi acest lucru în handler de eroare și va afișa pagina corespunzătoare.
Cererile pot fi de asemenea folosite pentru a gestiona excepțiile Connect-ovsky strat errorHander. De exemplu, dacă doriți să arate dezvoltarea într-o excepție de mediu la stderr. puteți face acest lucru:
De asemenea, în cursul dezvoltării, poate fi necesar să se răcească HTML-pagini, care arată trimis sau aruncat o excepție. În acest caz, trebuie să instalați showStack setat la true:
strat ErrorHandler, de asemenea, răspunde la JSON, în cazul în care clientul trimite antet Accept: application / JSON. care este util pentru dezvoltarea de AJAX-aplicații.
Pre-procesare a parametrilor de rută,
Pre-procesare a parametrilor de rută, poate îmbunătăți foarte mult lizibilitatea cererii printr-o încărcare de date clare și de validare a adresei URL cerere. De exemplu, dacă sunteți în mod constant verifica anumite date pentru cereri specifice (de exemplu, datele de utilizator pentru nava / utilizator /: id), poti face ceva de genul:
Cu pre-condițiile de parametrii noștri de interogare pot fi agățate-funcția de apel invers, care ar efectua validarea, restricții de acces, sau chiar date descărcarea din baza de date. In exemplul de mai jos, noi numim app.param () cu numele parametrului, pentru care vrem să stea un apel invers. După cum puteți vedea vom obține argumentul id. care conține numele câmpului. Deci, noi încărcăm obiectul de utilizator și de a efectua normale de manipulare eroare și simplu apel următoare (). pentru a transfera controlul următoarelor condiții prealabile sunt fie deja pe procesorul traseu.
Acțiunile de mai sus, după cum sa menționat deja, spori foarte mult cod de lizibilitate și de a face mai ușor de utilizat aceeași logică în diferite aplicații locuri:
reprezentări de redare
Vizualizarea numelor de fișiere generate de schema <имя>. <движок>. unde <движок> - este numele unui modul șablon, care trebuie să fie conectat. De exemplu, layout.ejs de reprezentare a spus concepte de sistem care trebuie să le necesită ( „Ejs“). Pentru a se integra în Express, un modul de încărcare trebuie să exporte exports.compile (str, opțiuni) metoda. și să se întoarcă funcția. Pentru a schimba acest comportament, puteți utiliza metoda app.register () - permite cu extensiile sale de fișier asociat cu un anumit motor. De exemplu, puteți face pentru a foo.html de redare motoare Ejs.
Mai jos - un exemplu folosind Jade pentru a face index.html. Și, din moment ce nu folosim aspect: fals. Conținutul de prezentare index.jade randat va fi menționată ca o variabilă locală în layout.jade de reprezentare a corpului.
Setarea motorului de vizualizare va permite să specificați șablonul implicit. De exemplu, folosind Jade poate face acest lucru:
care ne va permite să facă acest lucru: