Tytuł oryginału: Pro Express.js: Master Express.js: The ...

24

Transcript of Tytuł oryginału: Pro Express.js: Master Express.js: The ...

Page 1: Tytuł oryginału: Pro Express.js: Master Express.js: The ...
Page 2: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

Tytuł oryginału: Pro Express.js: Master Express.js: The Node.js Framework For Your Web Development

Tłumaczenie: Robert Górczyński

ISBN: 978-83-283-1664-5

Original edition copyright © 2014 by Azat Mardan.All rights reserved.

Polish edition copyright © 2016 by HELION SA.All rights reserved.

All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher.

Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji.

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.

Wydawnictwo HELIONul. Kościuszki 1c, 44-100 GLIWICEtel. 32 231 22 19, 32 230 98 63e-mail: [email protected]: http://helion.pl (księgarnia internetowa, katalog książek)

Drogi Czytelniku!Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/expresMożesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.

Printed in Poland.

• Kup książkę• Poleć książkę • Oceń książkę

• Księgarnia internetowa• Lubię to! » Nasza społeczność

Page 3: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

Spis tre ci

O autorze ........................................................................................................ 11

O recenzentach technicznych .......................................................................... 13

Wst p .............................................................................................................. 15

Wprowadzenie ................................................................................................ 17Dlaczego napisałem tę książkę? ................................................................................................ 17Dla kogo jest przeznaczona ta książka? ................................................................................... 18O czym jest ta książka? ............................................................................................................... 18O czym nie jest ta książka? ........................................................................................................ 18Przykłady ..................................................................................................................................... 19Errata i dane kontaktowe .......................................................................................................... 19

Podzi kowania ................................................................................................ 21

Cz I Rozpocz cie pracy ............................................................................ 23Rozdzia 1. Rozpocz cie pracy z Express.js ........................................................................ 25

Jak działa Express.js? .................................................................................................................. 26Zależności firm trzecich ...................................................................................................... 27Utworzenie egzemplarza ..................................................................................................... 27Nawiązanie połączenia z bazą danych .............................................................................. 27Konfiguracja ustawień aplikacji Express.js ....................................................................... 28Zdefiniowanie oprogramowania pośredniczącego ......................................................... 28Zdefiniowanie tras ............................................................................................................... 28Uruchomienie aplikacji ....................................................................................................... 28

Instalacja Express.js .................................................................................................................... 29Instalacja Express.js Generator ................................................................................................. 32Podsumowanie ............................................................................................................................ 34

Poleć książkęKup książkę

Page 4: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SPIS TRE CI

4

Rozdzia 2. Witaj, wiecie .................................................................................................. 35Rozpoczęcie pracy ...................................................................................................................... 35

Użycie procedur obsługi żądań .......................................................................................... 36Wyświetlanie komunikatów w powłoce ........................................................................... 37Usprawnienie aplikacji ........................................................................................................ 38

Polecenia generatora .................................................................................................................. 39Wygenerowanie szkieletu aplikacji Express.js ................................................................. 40Przegląd struktury aplikacji ................................................................................................ 41Plik app.js .............................................................................................................................. 41

Moduły i architektura MVC ..................................................................................................... 45Monitorowanie pod kątem zmian w plikach .......................................................................... 46Podsumowanie ............................................................................................................................ 47

Cz II Dok adne omówienie API ................................................................. 49Rozdzia 3. Konfiguracja, ustawienia i rodowiska ........................................................... 51

Konfiguracja ................................................................................................................................ 51app.set() i app.get() .............................................................................................................. 52app.enable() i app.disable() ................................................................................................ 52app.enabled() i app.disabled() ............................................................................................ 53

Ustawienia ................................................................................................................................... 53env .......................................................................................................................................... 54view cache ............................................................................................................................. 54view engine ........................................................................................................................... 55views ....................................................................................................................................... 55trust proxy ............................................................................................................................. 56jsonp callback name ............................................................................................................. 56json replacer i json spaces ................................................................................................... 57case sensitive routing ........................................................................................................... 58strict routing ......................................................................................................................... 59x-powered-by ........................................................................................................................ 60etag ......................................................................................................................................... 60query parser .......................................................................................................................... 61subdomain offset .................................................................................................................. 62

Środowiska .................................................................................................................................. 62Podsumowanie ............................................................................................................................ 65

Rozdzia 4. Praca z oprogramowaniem po rednicz cym ................................................... 67Zastosowanie oprogramowania pośredniczącego .................................................................. 68Najważniejsze oprogramowanie pośredniczące ..................................................................... 71

compression .......................................................................................................................... 72morgan .................................................................................................................................. 74body-parser ........................................................................................................................... 75urlencoded() ......................................................................................................................... 76cookie-parser ........................................................................................................................ 77express-session ..................................................................................................................... 77csurf ........................................................................................................................................ 78

Poleć książkęKup książkę

Page 5: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SPIS TRE CI

5

express.static() ...................................................................................................................... 79connect-timeout ................................................................................................................... 80errorhandler .......................................................................................................................... 82method-override .................................................................................................................. 82response-time ....................................................................................................................... 83serve-favicon ......................................................................................................................... 84serve-index ............................................................................................................................ 85vhost ....................................................................................................................................... 87connect-busboy .................................................................................................................... 87

Inne oprogramowanie pośredniczące ...................................................................................... 88Podsumowanie ............................................................................................................................ 89

Rozdzia 5. Silniki szablonów i Consolidate.js ................................................................... 91Jak używać silników szablonów? .............................................................................................. 92

app.engine() .......................................................................................................................... 93Rzadziej stosowane biblioteki ............................................................................................ 94

Dostępne silniki szablonów ....................................................................................................... 97Jade ......................................................................................................................................... 97Haml.js ................................................................................................................................... 97EJS .......................................................................................................................................... 97Handlebars.js ........................................................................................................................ 97Adaptery Hogan.js ............................................................................................................... 97Combyne.js ........................................................................................................................... 98Swig ........................................................................................................................................ 98Whiskers ................................................................................................................................ 98Blade ...................................................................................................................................... 98Haml-Coffee ......................................................................................................................... 98Webfiller ................................................................................................................................ 98

Consolidate.js .............................................................................................................................. 98Podsumowanie .......................................................................................................................... 100

Rozdzia 6. Parametry i routing ....................................................................................... 101Parametry .................................................................................................................................. 101

app.param() ........................................................................................................................ 105Routing ....................................................................................................................................... 108

app.NAZWA() ................................................................................................................... 108app.all() ................................................................................................................................ 111Ukośniki na końcu ............................................................................................................. 111Klasa Router ........................................................................................................................ 111router.route(path) .............................................................................................................. 111

Procedury obsługi żądania ...................................................................................................... 113Podsumowanie .......................................................................................................................... 114

Rozdzia 7. Obiekt request w Express.js .......................................................................... 117request.query ............................................................................................................................. 118request.params .......................................................................................................................... 120request.body .............................................................................................................................. 121request.route .............................................................................................................................. 122

Poleć książkęKup książkę

Page 6: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SPIS TRE CI

6

request.cookies .......................................................................................................................... 123request.signedCookies ............................................................................................................. 124request.header() i request.get() ............................................................................................... 125Inne atrybuty i metody ............................................................................................................ 125Podsumowanie .......................................................................................................................... 129

Rozdzia 8. Obiekt response w Express.js ........................................................................ 131response.render() ...................................................................................................................... 132response.locals .......................................................................................................................... 134response.set() ............................................................................................................................ 135response.status() ....................................................................................................................... 137response.send() ......................................................................................................................... 138response.json() .......................................................................................................................... 141response.jsonp() ........................................................................................................................ 142response.redirect() .................................................................................................................... 144Inne właściwości i metody odpowiedzi ................................................................................. 144Strumienie ................................................................................................................................. 148Podsumowanie .......................................................................................................................... 150

Rozdzia 9. Obs uga b dów i uruchamianie aplikacji ..................................................... 151Obsługa błędów ........................................................................................................................ 151Uruchomienie aplikacji ........................................................................................................... 155

app.locals ............................................................................................................................. 155app.render() ........................................................................................................................ 155app.mountpath ................................................................................................................... 156app.on('mount', funkcja(nadrzędna){...}) ....................................................................... 157app.path() ............................................................................................................................ 157app.listen() .......................................................................................................................... 157

Podsumowanie .......................................................................................................................... 161

Cz III Rozwi zywanie najcz ciej pojawiaj cych si problemów ............ 163Rozdzia 10. Abstrakcja ..................................................................................................... 165

Oprogramowanie pośredniczące ............................................................................................ 165Trasy ........................................................................................................................................... 166Połączenie oprogramowania pośredniczącego i tras ........................................................... 168Podsumowanie .......................................................................................................................... 170

Rozdzia 11. Wskazówki dotycz ce baz danych, kluczy i strumieni ................................... 171Użycie baz danych w modułach ............................................................................................. 171Klucze i hasła ............................................................................................................................. 173

Plik JSON ............................................................................................................................ 173Zmienne środowiskowe .................................................................................................... 175

Strumienie ................................................................................................................................. 175Podsumowanie .......................................................................................................................... 179

Poleć książkęKup książkę

Page 7: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SPIS TRE CI

7

Rozdzia 12. Redis i wzorce uwierzytelniania ..................................................................... 181Redis ........................................................................................................................................... 181Wzorce uwierzytelniania ......................................................................................................... 184Podsumowanie .......................................................................................................................... 185

Rozdzia 13. Wielow tkowo z u yciem klastrów ............................................................ 187Przykład wielowątkowości ...................................................................................................... 187Podsumowanie .......................................................................................................................... 190

Rozdzia 14. Stosowanie bibliotek Stylus, Less i Sass ........................................................ 191Stylus .......................................................................................................................................... 191Less ............................................................................................................................................. 192Sass .............................................................................................................................................. 193Podsumowanie .......................................................................................................................... 193

Rozdzia 15. Zapewnienie bezpiecze stwa ....................................................................... 195Cross-Site Request Forgery ..................................................................................................... 195Przetwarzanie uprawnień ........................................................................................................ 197Nagłówki zabezpieczeń w HTTP ........................................................................................... 198Weryfikacja danych wejściowych ........................................................................................... 199Podsumowanie .......................................................................................................................... 201

Rozdzia 16. Socket.IO i Express.js .................................................................................... 203Użycie Socket.IO ....................................................................................................................... 203Uruchomienie aplikacji ........................................................................................................... 207Podsumowanie .......................................................................................................................... 208

Rozdzia 17. Domeny i Express.js ...................................................................................... 209Zdefiniowanie problemu ......................................................................................................... 209Prosty przykład oparty na domenie ....................................................................................... 210Utworzenie aplikacji opartej na domenie ............................................................................. 211Podsumowanie .......................................................................................................................... 214

Rozdzia 18. Sails.js, DerbyJS, LoopBack i inne frameworki .............................................. 215Sails.js ......................................................................................................................................... 215DerbyJS ...................................................................................................................................... 217LoopBack ................................................................................................................................... 219Inne frameworki ....................................................................................................................... 222Podsumowanie .......................................................................................................................... 222

Cz IV Przyk ady ........................................................................................ 223Rozdzia 19. Galeria Instagram ......................................................................................... 225

Zaczynamy pracę nad galerią Instagram ............................................................................... 225Wyświetlanie galerii ................................................................................................................. 229Podsumowanie .......................................................................................................................... 230

Rozdzia 20. Aplikacja Todo .............................................................................................. 231Ogólne omówienie projektu ................................................................................................... 232Konfiguracja .............................................................................................................................. 235Plik app.js ................................................................................................................................... 237

Poleć książkęKup książkę

Page 8: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SPIS TRE CI

8

Trasy ........................................................................................................................................... 242Jade ............................................................................................................................................. 246Less ............................................................................................................................................. 250Podsumowanie .......................................................................................................................... 251

Rozdzia 21. API REST ........................................................................................................ 253Podstawy API RESTful ............................................................................................................ 254Wprowadzenie do testów ........................................................................................................ 255Zależności .................................................................................................................................. 259Implementacja serwera ............................................................................................................ 260Podsumowanie .......................................................................................................................... 265

Rozdzia 22. Aplikacja HackHall ......................................................................................... 267Co to jest HackHall? ................................................................................................................. 267Uruchomienie HackHall ......................................................................................................... 268Struktura aplikacji .................................................................................................................... 274Plik package.json ...................................................................................................................... 275Aplikacja Express.js .................................................................................................................. 276Trasy ........................................................................................................................................... 280

Plik index.js ......................................................................................................................... 280Plik auth.js ........................................................................................................................... 280Plik main.js .......................................................................................................................... 284Plik users.js .......................................................................................................................... 287Plik application.js ............................................................................................................... 292Plik posts.js .......................................................................................................................... 295

Modele Mongoose .................................................................................................................... 301Testy Mocha .............................................................................................................................. 307Podsumowanie .......................................................................................................................... 312

Dodatki .......................................................................................... 313Dodatek A Dalsza lektura i zasoby ................................................................................. 315

Inne frameworki Node.js ......................................................................................................... 315Książki poświęcone Node.js .................................................................................................... 316Klasyka JavaScript .................................................................................................................... 318Kursy .......................................................................................................................................... 318

Dodatek B Migracja Express.js 3.x do 4.x: oprogramowanie po rednicz ce,trasy i inne zmiany ........................................................................................ 319Wprowadzenie do oprogramowania pośredniczącego,

które nie zostało dołączone do wydania Express.js 4 ....................................................... 319Usunięcie z aplikacji Express.js 4 metod uznanych za przestarzałe .................................. 321

app.configure() ................................................................................................................... 321app.router() ......................................................................................................................... 321res.on('header') ................................................................................................................... 322res.charset ............................................................................................................................ 322res.headerSent ..................................................................................................................... 322req.accepted() ..................................................................................................................... 322

Poleć książkęKup książkę

Page 9: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SPIS TRE CI

9

Inne zmiany wprowadzone w Express.js 4 ........................................................................... 322app.use() .............................................................................................................................. 322res.location() ....................................................................................................................... 323app.route() .......................................................................................................................... 323json spaces ........................................................................................................................... 323req.params ........................................................................................................................... 323res.locals .............................................................................................................................. 323req.is ..................................................................................................................................... 323Działający w powłoce generator Express.js .................................................................... 323

Poznanie nowego egzemplarza tras w Express.js 4oraz sposoby jego łączenia z innymi ................................................................................... 323

Kolejne zasoby dotyczące migracji do Express.js 4 .............................................................. 325

Dodatek C ci ga z Express.js 4 ..................................................................................... 327Instalacja .................................................................................................................................... 328Generator ................................................................................................................................... 328Podstawy .................................................................................................................................... 329Trasy i metody HTTP .............................................................................................................. 329Żądanie ....................................................................................................................................... 329Skróty nagłówków żądania ...................................................................................................... 330Odpowiedź ................................................................................................................................. 330Sygnatury procedury obsługi .................................................................................................. 330Stylus i Jade ................................................................................................................................ 330Body ............................................................................................................................................ 331Static ........................................................................................................................................... 331Oprogramowanie pośredniczące Connect ............................................................................ 331Inne popularne oprogramowanie pośredniczące ................................................................ 331

Dodatek D ExpressWorks ................................................................................................ 333Instalacja .................................................................................................................................... 333Sposób użycia ............................................................................................................................ 334Zerowanie .................................................................................................................................. 334Zadania ....................................................................................................................................... 334

Witaj, świecie ...................................................................................................................... 334Jade ....................................................................................................................................... 335Stary dobry formularz ....................................................................................................... 335Static ..................................................................................................................................... 335Style CSS .............................................................................................................................. 335Param pam pam ................................................................................................................. 335Co znajduje się w zapytaniu? ............................................................................................ 336Dane JSON .......................................................................................................................... 336

Podsumowanie .......................................................................................................................... 336

Skorowidz ..................................................................................................... 337

Poleć książkęKup książkę

Page 10: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SPIS TRE CI

10

Poleć książkęKup książkę

Page 11: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

R O Z D Z I A 1 9

Galeria Instagram

Jeżeli kolejne rozdziały książki czytasz po kolei, to poznałeś już ważne, choć suche szczegóły API orazmiałeś styczność z jedynie abstrakcyjnymi rozwiązaniami. Część IV powinna okazać się najbardziejekscytująca, ponieważ cztery znajdujące się tutaj rozdziały zostały poświęcone programowaniu i przykładom.

W tym rozdziale dowiesz się, jak używać Express.js wraz z usługami zewnętrznymi opracowanymiprzez firmy trzecie (tutaj to API Storify). Celem budowanej aplikacji jest pobranie zdjęć Instagram zeStorify, a następnie wyświetlenie ich w galerii. Poza frameworkiem Express.js wykorzystamy jeszczenastępujące moduły:

superagent (https://www.npmjs.com/package/superagent); consolidate (https://www.npmjs.com/package/consolidate); handlebars (https://www.npmjs.com/package/handlebars).

Zdecydowałem się na wymienione moduły, ponieważ są one popularne w pewnych kręgachprogramistycznych Node.js. Istnieje więc duże prawdopodobieństwo, że je napotkasz lub będzieszz nich korzystał w przyszłości.

Uwaga Pe ny kod ród owy przyk adu omawianego w rozdziale znajdziesz pod adresem:ftp://ftp.helion.pl/przyklady/expres.zip.

Storify (http://storify.com/) działa w Node.js (https://nodejs.org/) i Express.js (http://expressjs.com/).Dlatego też wymienione technologie można wykorzystać do utworzenia aplikacji pokazującej,jak budować rozwiązania opierające się na żądaniach HTTP i API firm trzecich.

Zaczynamy prac nad galeri InstagramGaleria Instagram będzie pobierać obiekt, a następnie wyświetlać jego tytuł, opis i elementy/obrazy,podobnie jak pokazałem na rysunku 19.1.

Uwaga Je eli zastanawiasz si , co oznacza s owo Kazan (Kaza ), wyja niam, e to ponadtysi cletnia stolicaRepubliki Tatarstanu.

Poleć książkęKup książkę

Page 12: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

EXPRESS.JS. TWORZENIE APLIKACJI SIECIOWYCH W NODE.JS

226

Rysunek 19.1. Galeria Instagram

Struktura plików aplikacji przedstawia się następująco:

- index.js- package.json- views/index.html- css/bootstrap-responsive.min.css- css/flatly-bootstrap.min.css

Pliki CSS pochodzą z biblioteki Bootstrap (http://getbootstrap.com/) i motywu Flatly(http://bootswatch.com/flatly/). Z kolei index.js to nasz główny plik Node.js zawierający większośćlogiki, natomiast index.html to szablon Handlebars. Aplikacja używa zwykłych arkuszy stylów CSSzdefiniowanych w dwóch plikach znajdujących się w katalogu css.

Poniżej wymieniłem zależności aplikacji: express w wersji 4.8.1 — framework Express.js; superagent w wersji 0.18.2 — do wykonywania żądań HTTP(S); consolidate w wersji 0.10.0 — w celu użycia silnika szablonów Handlebars w Express.js; handlebars w wersji 2.0.0-beta.1 — w celu użycia silnika szablonów Handlebars.

Zawartość pliku package.json przedstawia się następująco:

{ "name": "sfy-gallery", "version": "0.2.0", "description": "Galeria Instagram: oparty na Node.js przyk ad u ycia API Storify", "main": "index.js",

Poleć książkęKup książkę

Page 13: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

ROZDZIA 19. GALERIA INSTAGRAM

227

"scripts": { "test": "echo \"B d: nie podano testu.\" && exit 1" }, "dependencies": { "consolidate": "0.10.0", "express": "4.8.1", "handlebars": "2.0.0-beta.1", "superagent": "0.18.2" }, "repository": "https://github.com/storify/sfy-gallery", "author": "Azat Mardan", "license": "BSD"}

Aby zainstalować niezbędne moduły, wydaj poniższe polecenie:

$ npm install

Teraz utwórz plik index.js. Na początku wymienionego pliku powinny znaleźć się następującezależności:

var express = require('express');var superagent = require('superagent');var consolidate = require('consolidate');

var app = express();

Kolejnym krokiem jest konfiguracja silnika szablonów:

app.engine('html', consolidate.handlebars);app.set('view engine', 'html');app.set('views', __dirname + '/views');

Dalej przechodzimy do przygotowania katalogu statycznego wraz z oprogramowaniem pośredniczącym:

app.use(express.static(__dirname + '/public'));

Jeżeli chcesz wykorzystać inną galerię, możesz to zrobić. Potrzebujesz jedynie nazwy użytkownikaautora oraz tzw. story slug. W przypadku mojej galerii o Kazaniu (stolicy Tatarstanu) podaj następujące dane:

var user = 'azat_co';var story_slug = 'kazan';

Następnie umieść swoje wartości: klucz API Storify, nazwę użytkownika i token, jeśli go masz.W chwili pisania książki API Storify pozostało publiczne, co oznacza brak konieczności przeprowadzaniauwierzytelniania (nie trzeba używać klucza). Jeżeli w przyszłości sytuacja ulegnie zmianie, żądanieklucza API można będzie złożyć na stronie: http://dev.storify.com/request. Zawsze też możesz zajrzećdo oficjalnej dokumentacji dostępnej na stronie: http://dev.storify.com/api/summary.

var api_key = "";var username = "";var _token = "";

Kolejnym krokiem jest zdefiniowanie trasy głównej (/):

app.get('/',function(req, res){

Elementy z API Storify pobieramy w wywołaniu zwrotnym trasy za pomocą metody superagent.get():

superagent.get("http://api.storify.com/v1/stories/" + user + "/" + story_slug)

Poleć książkęKup książkę

Page 14: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

EXPRESS.JS. TWORZENIE APLIKACJI SIECIOWYCH W NODE.JS

228

Punktem końcowym API Storify jest "http://api.storify.com/v1/stories/" + user + "/" +story_slug, czyli w omawianym przykładzie to: https://api.storify.com/v1/stories/azat/kazan. Jednąz zalet metody superagent jest możliwość łączenia metod. Na przykład metoda query() powodujewysłanie danych w ciągu tekstowym zapytania:

.query({api_key: api_key, username: username, _token: _token})

Metoda set() pozwala na określenie nagłówków żądania:

.set({Accept: 'application/json'})

Z kolei metoda end() pobiera wywołanie zwrotne przeznaczone do wykonania po otrzymaniuodpowiedzi:

.end(function(e, storifyResponse){ if (e) return next(e);

Aby wygenerować szablon z obiektem wskazywanym przez właściwość content odpowiedzi HTTP,możemy użyć poniższego fragmentu kodu:

return res.render('index', storifyResponse.body.content); })})

app.listen(3001);

API Storify zwraca dane w formacie JSON. Informacje o używanym formacie znajdziesz na stronie:https://api.storify.com/v1/stories/azat_co/kazan (przyjmując założenie, że API nadal będzie publiczne,jak w chwili pisania książki). Zwięzłą (tzn. niepokazującą wszystkich zagnieżdżonych obiektów) postaćdanych JSON pokazałem na rysunku 19.2.

Rysunek 19.2. Przykład zwięzłych danych wyjściowych dostarczanychprzez API Storify dla encji albumu

Poleć książkęKup książkę

Page 15: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

ROZDZIA 19. GALERIA INSTAGRAM

229

Wy wietlanie galeriiSkoro przygotowaliśmy aplikację pobierającą dane ze Storify i wywołującą szablon index w celu ichwyświetlenia, warto spojrzeć na szablon Handlebars, który znajduje się w pliku views/index.html:

<!DOCTYPE html lang="en"><html> <head> <link type="text/css" href="css/flatly-bootstrap.min.css" rel="stylesheet" /> <link type="text/css" href="css/bootstrap-responsive.min.css" rel="stylesheet"/> </head>

<body class="container"> <div class="row">

Teraz użyjemy {{title}} do wyświetlenia tytułu albumu Storify oraz {{authon.name}}do wyświetlenia autora:

<h1>{{title}}<small> by {{author.name}}</small></h1> <p>{{description}}</p></div><div class="row"> <ul class="thumbnails">

Kolejnym krokiem jest wykorzystanie wbudowanej w Handlebars konstrukcji do przeprowadzeniaiteracji przez elementy tablicy. W trakcie każdej iteracji następuje wygenerowanie nowego znacznika <li>:

{{#each elements}} <li class="span3"> <a class="thumbnail" href="{{permalink}}" target="_blank"> <img src="{{data.image.src}}" title="{{data.image.caption}}" /> </a> </li> {{/each}} </ul> </div> </body>

</html>

Po uruchomieniu aplikacji za pomocą polecenia node . i przejściu pod adres: http://localhost:3000zobaczysz wyświetlone zdjęcia. Działanie aplikacji jest następujące: po przejściu na podaną stronęserwer lokalny wykonuje żądania do Storify i pobiera z galerii Instagram łącza do zdjęć.

Poleć książkęKup książkę

Page 16: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

EXPRESS.JS. TWORZENIE APLIKACJI SIECIOWYCH W NODE.JS

230

PodsumowanieFramework Express.js i moduł superagent pozwalają programistom na pobieranie danych dostarczanychprzez usługi opracowane przez firmy trzecie, takie jak: Storify, Twitter i Facebook, za pomocą jedyniekilku wierszy kodu. Umożliwiają też zarządzanie tymi danymi. Przykład przedstawiony w rozdziale jestprosty, ponieważ nie wykorzystuje bazy danych. W kolejnym rozdziale przystąpimy do budowy aplikacjiTodo, która zostanie oparta na bazie danych MongoDB.

Uwaga W wi kszo ci przypadków dostawcy us ug (np.: Google, Facebook i Twitter) wymagaj uwierzytelnienia(w chwili pisania ksi ki nie by o takiego wymogu dla API Storify). Aby wykonywa dania: OAuth 1.0,OAuth 2.0 i OAuth Echo, rozwa u ycie modu ów: oauth (https://www.npmjs.com/package/oauth; GitHub:https://github.com/ciaranj/node-oauth), everyauth (https://www.npmjs.com/package/everyauth; GitHub:https://github.com/bnoguchi/everyauth) i/lub passport (http://passportjs.org/; GitHub:https://github.com/jaredhanson/passport).

Poleć książkęKup książkę

Page 17: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

Skorowidz

A

abstrakcja, 165kodu, 101

adaptery Hogan.js, 97adres

e-mail, 285URL, 104, 262

API, 49REST, 166, 253REST JSON, 268Storify, 227

aplikacjaBackbone.js, 268, 274Express.js, 276HackHall, 267

członkostwo w społeczności, 295modele Mongoose, 301plik package.json, 275strona postów, 273strona użytkowników, 290, 292struktura, 274testy Mocha, 307trasy, 280

Todo, 231Jade, 246konfiguracja, 235Less, 250plik app.js, 237trasy, 242

aplikacjefront-endu, 274oparte na domenie, 211

architektura MVC, 45arkusze stylów

CSS, 191stylów Less, 250

ataktypu brute force, 271typu CSRF, 78, 195

atrybutrequest.accepted, 126request.acceptedCharsets, 127request.acceptedLanguages, 126request.fresh, 126request.host, 126request.ip, 126request.ips, 126request.originalUrl, 126request.path, 126request.protocol, 126request.secure, 126request.stale, 126request.subdomains, 126request.xhr, 126

Bbaza danych, 171

Redis, 181bezpieczeństwo, 195biblioteka

bcryptjs, 275Bootstrap, 226Consolidate.js, 98Less, 192

Poleć książkęKup książkę

Page 18: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SKOROWIDZ

338

bibliotekamongoose, 275Mongoskin, 253passport, 275Sass, 193sendgrid, 275Socket.IO, 203Stylus, 191

biblioteki wewnętrzne, 274Body, 331

Ccertyfikat SSL, 160Consolidate.js, 98CORS, cross-origin resource sharing, 56CRUD, create, remove, update, delete, 253CSRF, cross-site request forgery, 78CSS, 191, 335

Ddane

JSON, 336wejściowe, 208wyjściowe, 40

definiowanie trasy, 28DerbyJS, 217dołączanie biblioteki, 205domeny, 209dostęp do aplikacji, 283działanie Express.js, 26

Ee-mail, 276, 289, 292Express.js 4, 319ExpressWorks, 333

FForeman, 268format JSON, 139, 255framework

Compound, 222DerbyJS, 217Geddy, 222Hapi, 222LoopBack, 219

Sails.js, 215Total.js, 222

frameworki Node.js, 315funkcja

app.get(), 36clientErrorHandler(), 277cookieParser(), 77del(), 298express.static(), 79findByIdAndRemove(), 289findOrCreate(), 290json(), 118next(), 109render(), 92require(), 169send(), 206updateById(), 262urlencoded(), 76

Ggaleria Instagram, 225, 226generator, 328generowanie, 91

szkieletu aplikacji, 40wartości hash, 285

GitHub, 267

Hhash, 285hasła, 173

cookie, 269Heroku, 269

Iimplementacja

OAuth, 279serwera, 260

informacje o użytkowniku, 270, 283instalacja, 29, 328

Express.js Generator, 32ExpressWorks, 333

JJade, 246, 330, 335

Poleć książkęKup książkę

Page 19: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SKOROWIDZ

339

Kklasa Router, 111, 323klaster, 187, 189klient front-endu, 268, 277klucze, 173kody stanów HTTP, 153kompilacja szablonów, 91komunikaty błędów, 201konfiguracja, 51

Heroku, 269ustawień aplikacji, 28zamiast konwencji, 25try-catch, 210

konwencja zamiast konfiguracji, 25

LLess, 192, 250LoopBack, 219

MMDN, Mozilla Developer Network, 57menedżer npm, 66metoda

_express(), 94add(), 288app.all(), 111app.configure(), 63, 321app.disable(), 52app.enable(), 52app.engine(), 93app.get(), 52app.listen(), 157, 159, 172app.param(), 105app.path(), 157app.proto.create(), 219app.render(), 155app.route(), 323app.router(), 321app.set(), 52app.use(), 322compare(), 285compression(), 72contain(), 257exports.angelList(), 281findByIdAndRemove(), 286findOrAddUser(), 290

findProfileById(), 305findStories(), 168getUser(), 288req.accepted(), 322request.accepts(), 126request.acceptsCharset(), 127request.acceptsLanguage(), 126request.get(), 125request.header(), 125request.is(), 126request.param(), 221res.location(), 323res.on(), 322res.json(), 57response.attachment(), 145response.clearCookie(), 145response.cookie(), 145response.download(), 145response.format(), 145response.get(), 145response.json(), 141response.jsonp(), 142response.links(), 145response.location(), 145response.redirect(), 144response.render(), 132, 133response.send(), 138, 139, 140response.sendfile(), 145response.set(), 135response.status(), 137response.type(), 145router.route(), 111socket.emit(), 205update(), 289

metodyHTTP, 154, 254, 329idempotentne, 254nullipotentne, 255odpowiedzi, 144przestarzałe, 321

middleware, 67modele Mongoose, 301moduł, 45

bcryptjs, 271, 285body-parser, 75cluster, 187connect-busboy, 87connect-timeout, 80cookie-parser, 71

Poleć książkęKup książkę

Page 20: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SKOROWIDZ

340

modułderby, 218domain, 209Mocha, 259oauth, 279okay, 214serve-static, 79zlib, 72

monitorowanie plików, 47montowanie, 68, 157

Nnagłówek

Content-Type, 136CORS, 56X-Powered-By, 61

nagłówki zabezpieczeń, 198narzędzia monitorujące pliki, 47narzędzie

etag, 60ExpressWorks, 333Foreman, 268, 272, 309forever, 47node-dev, 47nodemon, 47supervisor, 47up, 47

Oobiekt

app.locals, 155JSON, 286request, 117request.body, 121request.cookies, 123request.params, 120request.query, 118request.route, 122request.signedCookies, 124response, 131response.locals, 134

obsługabłędów, 44, 151, 277żądań, 36, 113żądań PUT, 262

odpowiedź, 330opcja, Patrz ustawienie

operacje CRUD, 253operator ||, 277oprogramowanie pośredniczące, 28, 67, 108, 165, 319

compression, 72Connect, 331cookie-parser, 77, 123csurf, 79errorhandler, 82express.static(), 80express-session, 77inne, 88method-override, 82morgan, 74najważniejsze, 71popularne, 331response-time, 83serve-favicon, 84serve-index, 85static, 335urlencoded, 76vhost, 87

Ppakiet npm, 71parametry, 101pierwsza aplikacja, 35plik

.env, 268, 274, 309app.js, 41, 83, 237application.js, 292auth.js, 280cluster.js, 190favicon.ico, 88hello.js, 38index.jade, 133index.js, 168, 280lorem-ipsum.html, 96main.js, 284Makefile, 274, 308, 309package.json, 32, 118, 274posts.js, 295procfile, 274readme.md, 274seed-script.js, 269server.js, 274stream-express-req.js, 178stream-http-req.js, 177users.js, 287, 292

Poleć książkęKup książkę

Page 21: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SKOROWIDZ

341

pliki*.styl, 192CSS, 226JSON, 173

polecenia generatora, 39polecenie

node app, 81node cluster, 189npm init, 30

połączenie z bazą danych, 27, 271potokowanie strumienia odpowiedzi, 176powiadomienia e-mail, 275problemy, 163procedury obsługi żądania, 113projekty typu open source, 267przetwarzanie uprawnień, 197

RRedis, 181renderowanie, 91repozytorium GitHub, 267REST, 110routing, 108rozwiązywanie problemów, 163

SSails.js, 215Sass, 193SendGrid, 268, 269serwer

MongoDB, 272REST, 253

silnik szablonów, 73, 91, 99Blade, 98EJS, 97Haml.js, 97Haml-Coffee, 98Handlebars.js, 97Jade, 97Swig, 98Whiskers, 98

skróty nagłówków żądania, 330skrypt seed-script.js, 269Socket.IO, 203Static, 331sterownik MongoDB, 171

strukturaaplikacji, 41, 274CRUD, 254

strumienie, 148, 175strumieniowanie obrazu, 149style CSS, 335Stylus, 191, 330sygnatury procedury obsługi, 330szablon

index.jade, 246layout.jade, 246tasks.jade, 246tasks_completed.jade, 246

szyfrowanie haseł, 275

ścieżka dostępu, 69środowiska, 62

TTDD, test-driven development, 253testy, 253, 255

Mocha, 307TDD, 307

token, 281, 290trasy, 166, 242, 274, 279, 329tworzenie egzemplarza, 27typy danych Mongoose, 301

Uukośniki na końcu, 111uruchamianie

aplikacji, 28, 155, 207HackHall, 268serwera MongoDB, 272usług sieciowych, 197

usprawnienie aplikacji, 38ustawienia niestandardowe, 53ustawienie

case sensitive routing, 58jsonp callback name, 56query parser, 61strict routing, 59subdomain offset, 62view cache, 54

Poleć książkęKup książkę

Page 22: Tytuł oryginału: Pro Express.js: Master Express.js: The ...

SKOROWIDZ

342

ustawienieview engine, 55views, 55x-powered-by, 60trust proxy, 56

uwierzytelnianie, 184OAuth, 279

użyciebaz danych, 171biblioteki consolidate, 98domeny, 212klastrów, 187module.exports, 170silników szablonów, 92Socket.IO, 203

Wwersja generatora, 40weryfikacja danych wejściowych, 199wielowątkowość, 187właściwość

app.mountpath, 156req.db.Post, 296

wtyczka findOrCreate, 305wyrażenie regularne, 36

wyświetlaniegalerii, 229komunikatów, 37

wzorce uwierzytelniania, 184

Zzadania, 334zależności, 259

firm trzecich, 27zastosowanie oprogramowania pośredniczącego, 68zdarzenie receive, 205zerowanie zadań, 334zmienna

__dirname, 169env, 54

zmienna środowiskowa, 175process.env.PORT, 277

żądanie, 329DELETE, 255GET, 255POST, 255PUT, 255, 262

Poleć książkęKup książkę

Page 24: Tytuł oryginału: Pro Express.js: Master Express.js: The ...