Materiały dla studentów Informatyki WSZiB w Krakowie



Podobne dokumenty
Materiały dla studentów Informatyki WSZiB w Krakowie

Angular, cz. II. Tworzenie serwisów Web 2.0. dr inż. Robert Perliński

WYKŁAD 1 ANGULARJS CZĘŚĆ 1

MeetingHelper. Aplikacja Android ułatwiająca przekazywanie materiałów pomiędzy uczestnikami spotkania. Instrukcja obsługi dla programisty

Bazy Danych i Usługi Sieciowe

Poznaj ASP.NET MVC. Kamil Cieślak Microsoft Student Partner

Co to jest NODE.JS? Nowoczesne środowisko programistyczne

Framework Angular4. Alicja Frankowicz Weronika Węglińska

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Projektowanie aplikacji w modelu MVC opartej o framework CodeIgniter

Tworzenie witryn internetowych PHP/Java. (mgr inż. Marek Downar)

Laboratorium 1 Wprowadzenie do PHP

Internetowe bazy danych

Systemy internetowe. Wykład 3 PHP. West Pomeranian University of Technology, Szczecin; Faculty of Computer Science

NoSQL Not Only SQL: CouchDB. I.Wojnicki, NoSQL. Apache CouchDB has started. Time to relax. Przetwarzanie dokumentów i widoków.

server.listen(port, hostname, () => { console.log(`server running at });

Referat z przedmiotu Technologie Internetowe SPIS TREŚCI

MVC w praktyce tworzymy system artykułów. cz. 2

Laboratorium 6 Tworzenie bloga w Zend Framework

MVC w praktyce tworzymy system artykułów. cz. 1

Quiz Aplikacja internetowa

Aplikacje webowe z wykorzystaniem Node.js oraz Express

Tworzenie stron internetowych z wykorzystaniem HTM5, JavaScript, CSS3 i jquery. Łukasz Bartczuk

Ewolucja projektowania aplikacji w PHP na bazie frameworka Symfony 2

Zaawansowane aplikacje internetowe laboratorium REST

O sobie. Adam Kowalski. Absolwent informatyki Uniwersytetu Wrocławskiego Full-stack Developer w firmie Synergy Codes.

Wykład 5: PHP: praca z bazą danych MySQL

Zaawansowany kurs języka Python

Zaawansowane Techniki WWW (HTML, CSS i NODE.JS)

Systemy internetowe Wykład 3 PHP

Podstawy JavaScript ćwiczenia

Full Stack JavaScript z Angular i Nest. Dni: 5. Opis: Adresaci szkolenia

Wybrane działy Informatyki Stosowanej

Programowanie i projektowanie obiektowe

Express.js i własne API - pomoc do lab02

Wybrane działy Informatyki Stosowanej


ANGULARJS TWORZENIE APLIKACJI INTERNETOWYCH

Kurs języka Ruby. Ruby on Rails ActionPack

Programowanie w Ruby

OPT Open Power Template. System szablonów OPT. Przykładowy skrypt oraz szablon OPT OPT API

Podstawy wzorca MVC MODEL KON- TROLER WIDOK. Odpowiada za wyświetlenie danych użytkownikowi. Zawiera dane aplikacji oraz jej logikę.

Wieloplatformowe aplikacje sieciowe. dr inż. Juliusz Mikoda mgr inż. Anna Wawszczak

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Wybrane działy Informatyki Stosowanej

Popularne dostępne rozwiązania. Najpopularniejsze środowiska programistyczne:

Zaawansowane aplikacje internetowe

Realizacja Aplikacji Internetowych 2013 laboratorium cz. 2 K.M. Ocetkiewicz

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Programowanie w Ruby

Dokumentacja Skryptu Mapy ver.1.1

Zaawansowane bazy danych i hurtownie danych studia zaoczne II stopnia, sem. I

Programowanie zorientowane obiektowo. Mateusz Kołecki

Wykład 03 JavaScript. Michał Drabik

Scenariusz Web Design DHTML na 10 sesji. - Strony statyczne I dynamiczne. - Dodawanie kodu VBScript do strony HTML. Rysunek nie jest potrzebny

Bardzo szybkie wprowadzenie do Node.js

Bazy Danych i Usługi Sieciowe

PROJEKTOWANIE APLIKACJI INTERNETOWYCH

Programowanie Komputerów

Zrąb JavascriptMVC. Krzysztof Płocharz. 6 kwiecień Uniwersytet Warszawski

W czystym JavaScripcie zasięgi zmiennych tworzone były poprzez funkcje anonimowe, w AngularJS posiadamy kontrolery, które także są funkcjami.

1. Otwórz app_advanced.html i skopiuj i wklej następujący kod bezpośrednio w tagach <head>:

Laboratorium 7 Blog: dodawanie i edycja wpisów

trainxx tramxx

Funkcje i instrukcje języka JavaScript

Lista ToDo Aplikacja internetowa

Wprowadzenie. 1. Terminal WebRTC. LABORATORIUM 5: WebRTC komunikacja między terminalami.

Umieszczanie kodu. kod skryptu

Protokół HTTP. 1. Protokół HTTP, usługi www, model request-response (żądanie-odpowiedź), przekazywanie argumentów, AJAX.

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Spis treści. Wstęp 5 Rozdział 1. Praca z AJAX-em 9. Rozdział 2. Współpraca ze skryptami PHP 55. Rozdział 3. Obsługa formularzy 81

Przygotowanie do nowoczesnego programowania po stronie przeglądarki. (HTML5, CSS3, JS, wzorce, architektura, narzędzia)

Format HTML. Wybrane działy Informatyki Stosowanej. Definicja i przeznaczenie Struktura dokumentu Znaczniki Formularze i komponenty

Przykład programu w PHP. Wykład10.PHP ciągdalszy,str.1

Jak okiełznać frontend w Django? Piotr Maliński

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie w Ruby

Technologie internetowe ASP.NET Core. Paweł Rajba

JQuery. $('#pierwszy').css('color','red').hide('slow').show(3000); $(document).ready(function() { //... tutaj nasze skrypty jquery //...

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Języki skryptowe - PHP. PHP i bazy danych. Paweł Kasprowski. pawel@kasprowski.pl. vl07

Rys.2.1. Drzewo modelu DOM [1]

CouchDB. Michał Nowikowski

Źródła. cript/1.5/reference/ Ruby on Rails: AJAX: ssays/archives/

Zaawansowane aplikacje WWW - laboratorium

Tworzenie Stron Internetowych. odcinek 10

Podstawy (X)HTML i CSS

Efektywne tworzenie aplikacji webowych z wykorzystaniem AngularJS, HTML5 i JavaScript

Krótki kurs JavaScript

Technologie sieciowe Sprawozdanie z labolatorium. Lista 5

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Aplikacje internetowe - laboratorium

Kurs języka Python. Wykład 14. Marcin Młotkowski. 25 stycznia Python i Apache Pythonowe platformy aplikacyjne. Dystrybucja aplikacji w U*IX

plansoft.org Zmiany w Plansoft.org

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

ANGULAR 2+ Waldemar Korłub. Aplikacje i Usługi Internetowe KASK ETI Politechnika Gdańska

Transkrypt:

Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak Wyższa Szkoła Zarządzania i Bankowości w Krakowie http://artemis.wszib.edu.pl/~polak/ Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 1 Przedmiot: Aplikacje internetowe Plan prezentacji Serwer Node.js Framework Express Dr inż. Stanisław Polak Przedmiot: Aplikacje internetowe Serwer Node.js Serwer Node.js Node.js Ogólna charakterystyka Udostępnia JavaScript po stronie serwera Używa V8 JavaScript Engine System do tworzenia serwisów sieciowych z asynchronicznym WE/WY Wykorzystuje paradygmat programowania sterowanego zdarzeniami Nadaje się dobrze do pisania aplikacji, które wymagają komunikacji w czasie rzeczywistym pomiędzy przeglądarką a serwerem Pojedyncza instancja Node.js działa jako pojedynczy wątek Pętla zdarzeń podmiot, który obsługuje / przetwarza zdarzenia zewnętrzne i konwertuje je na wywołania funkcji zwrotnych. Rysunek: Schemat działania pętli zdarzeń w Node.js Przykład Hello World 1 #!/usr / bin / node console. log ( " Hello World " ) ; Uruchamianie skryptu $ node hello.js Hello World Uruchamianie trybu interaktywnego $ node > console.log("hello World") Hello World undefined > + > ^D $ hello.js Uruchamianie skryptu $ chmod 755 hello.js $./hello.js Hello World Dr inż. Stanisław Źródło: Polak http://www.aaronstannard.com/post/011/1/1/intro-to-nodejs-for-net-developers.aspx 3 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak Przedmiot: Aplikacje internetowe

Serwer Node.js Serwer Node.js Wprowadzanie i wyprowadzanie danych 1 process. stdout. write ( 1 ) ; process. stdout. write ( ) ; 3 console. log ( 3 ) 5 / 6 c o n s o l e. l o g = f u n c t i o n (d) { 7 p r o c e s s. s t d o u t. w r i t e ( d + \n ) ; 8 }; 9 / 10 11 process. stdin. setencoding ( utf8 ) ; 1 process. stdout. write ( Wprowad ź dane - naci śnięcie ^D koń czy ich wprowadzanie \n ) ; 13 process. stdin. on ( readable, function ( ) { 1 var chunk = process. stdin. read ( ) ; 15 if ( chunk!== null ) { 16 process. stdout. write ( Wczytano : + chunk ) ; 17 } 18 }) ; 19 console.log(ósiągnięto koniec skryptu ) ; Uruchamianie $ node skrypt.js 13 Wprowadź dane - naciśnięcie ^D kończy ich wprowadzanie Osiągnięto koniec skryptu abc Wczytano: abc def Wczytano: def skrypt.js Dostęp do zmiennych środowiskowych, obsługa linii komend 1 // Odczyt warto ś c i zmiennej ś rodowiskowej HOME console. log ( "Twój katalog domowy to: "+process. env [ HOME ] ) ; 3 //Wyś w i e t l e n i e warto ś c i argument ów l i n i i komend 5 console. log ( " Argumenty linii komend to:" ) ; 6 process. argv. foreach ( function ( wartosc, indeks, tablica ) { 7 console. log ( \t +indeks + : + wartosc ) ; 8 }) ; Uruchamianie $ node skrypt.js 1 b= Twój katalog domowy to: /home/polak Argumenty linii komend to: 0: node 1: /home/polak/skrypt.js : 1 3: b= skrypt.js Dr inż. Stanisław Polak 5 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 6 Przedmiot: Aplikacje internetowe Serwer Node.js Serwer Node.js Moduł Tworzenie, korzystanie 1 var mymodule = require( mojmodul ) ; // za ł aduje node modules /mojmodul. js // v a r mymodule = require (. / mojmodul ) ; // za ł a d u j e. / mojmodul. j s 3 console. log ( mymodule. zmienna1 ) ; // u n d e f i n e d console. log ( mymodule. zmienna ) ; // 5 console. log ( mymodule. zmienna3 ) ; // u n d e f i n e d 6 console. log ( mymodule. zmienna ) ; // 7 console. log ( mymodule. fun1 ( ) ) ; // fun1 8 console. log ( mymodule. fun ( ) ) ; // TypeError : Object #<Object> has no method fun skrypt.js Obsługa pakietów $ npm install nazwa_pakietu # Moduły ->./node modules/ # Pliki wykonywalne ->./node modules/.bin/ # Manuale -> nie są instalowane 1 console. log ( require. main === module ) ; / Wypisze : true, je ż e l i skrypt uruchomimy bezpo ś r e d n i o ( z l i n i i komend ), t j $ node mojmodul. j s 3 Wypisze : false, je ż e l i go zaimportujemy z poziomu innego skryptu, t j. require ( mojmodul ) 5 / 6 zmienna1 = 1 ; 7 exports. zmienna = ; 8 var zmienna3 = 3 ; 9 var zmienna ; 10 exports. zmienna = ; 11 var exports. zmienna5 = 5 ; // SyntaxError : Unexpected token. 1 exports. fun1 = function ( ) { 13 return "fun1 " ; 1 }; 15 fun = function ( ) { 16 return "fun " ; 17 }; node modules/mojmodul.js $ npm install -g nazwa_pakietu Dr inż. Stanisław # Moduły Polak -> {prefix}/lib/node modules/ 7 Przedmiot: Aplikacje internetowe # Pliki wykonywalne -> {prefix}/bin/ # Manuale -> {prefix}/share/man/ Obsługa plików 1 var fs = require ( "fs" ) ; // Sprawd ź czy p l i k i s t n i e j e 3 try{ fs. accesssync( plik.txt ) ; } catch ( err ){ fs. writefilesync( plik.txt, 1 ) ; } 5 fs. readfile( plik.txt, utf -8, function ( error, data ) { 6 if ( error ) throw error ; 7 console. log ( " Odczytana wartość: "+ data ) ; 8 }) ; 9 10 fs. writefile( plik. txt,, function ( error ) { 11 if ( error ) throw error ; 1 console. log ( Zapisano wartość ) ; 13 }) ; Uruchamianie $ node skrypt1.js Zapisano wartość Odczytana wartość: Wersja nieprawidłowa 1 var fs = require ( "fs" ) ; try{ fs. accesssync ( plik.txt ) } 3 catch ( err ){ fs. writefilesync ( plik.txt, 1 ) ; } 5 fs. readfile ( plik. txt, utf -8, function ( error, data ) { 6 if ( error ) throw error ; 7 console. log ( " Odczytana wartość: "+data ) ; 8 9 fs. writefile ( plik. txt,, function ( error ) { 10 if ( error ) throw error ; 11 console. log ( Zapisano wartość ) ; 1 }) ; 13 }) ; Uruchamianie $ node skrypt.js Odczytana wartość: 1 Zapisano wartość Wersja prawidłowa Dr inż. Stanisław Polak 8 Przedmiot: Aplikacje internetowe

Serwer Node.js Serwer Node.js Obsługa bazy danych SQLite 3 1 var sqlite3 = require ( sqlite3 ) ; 3 var db = new sqlite3. Database ( : memory : ) ; //Zwraca obiekt Database 5 db. serialize( function ( ) { 6 db. run( "CREATE TABLE products (info TEXT )" ) ; 7 var stmt = db. prepare( "INSERT INTO products VALUES (?) " ) ; //Zwraca obiekt Statement 8 for ( var i = 0 ; i < ; i++) { 9 stmt. run( " Produkt " + i ) ; 10 } 11 stmt. finalize ( ) ; 1 13 jsondata = { products : [ ] }; 1 db. each( "SELECT rowid AS id, info FROM products ", function ( err, row ) { 15 jsondata. products. push ({ id : row. id, info : row. info }) ; 16 }, function ( ) { 17 console. log ( JSON. stringify ( jsondata ) ) ; //JSON. s t r i n g i f y wbudowana f u n k c j a JS 18 } 19 ) ; 0 }) ; 1 db. close ( ) ; Instalacja i uruchamianie bd.js $ npm install sqlite3 $ node bd.js {"products":[{"id":1,"info":"produkt 0"},{"id":,"info":"Produkt 1"}]} Dr inż. Stanisław Polak 9 Przedmiot: Aplikacje internetowe Tworzenie dodatków (addons) w C++ Przykład Hello World 1 / Poniż szy program jest odpowiednikiem nast ę pującego kodu JS : 3 e x p o r t s. h e l l o = f u n c t i o n ( ) { r e t u r n world ; }; / 5 6 #include <node. h> 7 8 using namespace v8 ; 9 10 void Method ( const FunctionCallbackInfo<Value>& args ) { 11 Isolate isolate = Isolate : : GetCurrent ( ) ; 1 HandleScope scope ( isolate ) ; 13 args. GetReturnValue ( ). Set ( String : : NewFromUtf8 ( isolate, " world " ) ) ; 1 } 15 16 void init ( Handle<Object> exports ) { 17 NODE_SET_METHOD ( exports, " hello ", Method ) ; 18 } 19 0 NODE_MODULE ( hello, init ) // t u t a j n i e ma ś r e d n i k a hello.cc Instalacja programu node-gyp $ npm install -g node-gyp 1 { " targets " : [ 3 { "target_name " : "hello ", 5 " sources " : [ " hello.cc" ] 6 } 7 ] 8 } binding.gyp 1 var addon = require (./ build / Release / hello ) ; console. log ( addon. hello ( ) ) ; hello.js Kompilacja i uruchomienie $ node-gyp configure $ node-gyp build $ node hello.js world Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 10 Przedmiot: Aplikacje internetowe Obsługa protokołu HTTP Serwer Node.js Obsługa protokołu HTTP Szkielet skryptu 1 var http = require ( " http " ) ; 3 function requestlistener (request, response) { console. log ( "Pojawi ło się żą danie od klienta " ) ; 5 response. writehead (00, {"Content -Type " : "text / plain "}) ; 6 response. write ( " Hello World " ) ; 7 response. end ( ) ; 8 } 9 var serwer = http. createserver ( requestlistener ) ; 10 serwer. listen (8080) ; 11 console. log ( "Uruchomiono serwer " ) ; serwer.js Sprawdzenie działania Z poziomu terminala $ node serwer.js & Uruchomiono serwer $ curl http://localhost:8080 Pojawiło się żądanie od klienta Hello World 1 var http = require ( " http " ) ; 3 http. createserver ( function ( request, response ) { console. log ( "Pojawi ło się żą danie od klienta " ) ; 5 response. writehead ( 00, {"Content -Type " : "text / plain "}) ; 6 response. write ( " Hello World " ) ; 7 response. end ( ) ; 8 }). listen (8080) ; 9 console. log ( "Uruchomiono serwer " ) ; Wersja alternatywna Rysunek: Z poziomu przeglądarki WWW Obsługa protokołu HTTP Serwer Node.js Obsługa parametrów URL 1 var url = require ( " url " ) ;... 3 function requestlistener ( request, response ) { console. log ( "Pojawi ło się żą danie od klienta " ) ; 5 var url_parts = url. parse ( request. url, true ) ; // Pass t r u e as t h e second argument to a l s o p a r s e the query string using the querystring module. Defaults to f a l s e. 6 console. log ( url_parts ) ; 7 8 response. writehead ( 00, {"Content -Type " : "text /plain "}) ; 9 response. write ( \n ) ; 10 response. write ( url_parts. pathname+ \n ) ; 11 response. write ( Login : +url_parts. query [ login ]+ \n ) ; 1 response. write ( Has ło: +url_parts. query [ haslo ]+ \n ) ; 13 response. end ( ) ; 1 } 15... Terminal 1 $ node serwer.js Uruchomiono serwer Pojawiło się żądanie od klienta {... search:?login=jan&haslo=kowalski+%8nowak%9, query: { login: Jan, haslo: Kowalski (Nowak) }, pathname: /abc, path: /abc?login=jan&haslo=kowalski+%8nowak%9, href: /abc?login=jan&haslo=kowalski+%8nowak%9 } serwer.js Terminal $ curl http://localhost:8080/abc?login=jan&haslo= Kowalski+%8Nowak%9 /abc Jan Kowalski (Nowak) Dr inż. Stanisław Polak 11 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 1 Przedmiot: Aplikacje internetowe

Obsługa protokołu HTTP Serwer Node.js Obsługa formularzy Kodowanie application/x-www-form-urlencoded 1 var qs = require ( querystring ) ;... 3 function requestlistener ( request, response ) { var url_parts = url. parse ( request. url, true ) ; 5 if ( url_parts. pathname == /form ){ // g e n e r o w a n i e f o r m u l a r z a 6 response. writehead (00, {"Content -Type " : "text /html "}) ; 7 response. write ( <form method ="POST " action ="/ submit "> ) ; 8 response. write ( <input name =" login " value =" Jan "> ) ; 9 response. write ( <input name =" haslo " value =" Kowalski ( Nowak ) ąę"> ) ; 10 response. write ( <input type =" submit "> ) ; 11 response. write ( </form > ) ; 1 response. end ( ) ; 13 } 1 if ( url_parts. pathname == /submit ) { // przetwarzanie zawarto ś ci formularza 15 if ( request. method== GET ) { 16 response. writehead ( 00, {"Content -Type " : "text /plain "}) ; 17 response. write ( url_parts. query [ login ]+ \n ) ; // przegl ądarka wypisze : Jan\n 18 response. write ( url_parts. query [ haslo ]+ \n ) ; // przegl ądarka wypisze : Kowalski (Nowak ) ąę \n 19 response. end ( ) ; 0 } 1 else if ( request. method== POST ) { var body= ; 3 request. on( data, function ( data ) { body +=data ; 5 }) ; 6 request. on( end, function ( ){ 7 var data = qs. parse( body ) ; //body z a w i e r a l o g i n=jan&h a s l o=k o w a l s k i+%8nowak%9+%c%85% C%99 8 response. writehead ( 00, {"Content -Type " : "text /plain "}) ; 9 response. write ( data [ login ]+ \n ) ; // przegl ądarka wypisze : Jan\n 30 response. write ( data [ haslo ]+ \n ) ; // przegl ądarka wypisze : Kowalski (Nowak ) ąę\n 31 response. end ( ) ; 3 }) ; 33 } 3 } 35 } Dr inż. 36 Stanisław... Polak 13 Przedmiot: Aplikacje internetowe Obsługa protokołu HTTP Serwer Node.js Obsługa protokołu CGI 1 #! / b i n / sh echo "Content -Type : text / plain " 3 echo echo " Skrypt CGI wywo ł ano z argumentem $QUERY_STRING " hello.cgi Instalacja i uruchamianie $ npm install cgi $ chmod 755 hello.cgi $ node skrypt.js & $ curl http://localhost:8080/ Skrypt CGI wywołano z argumentem $ curl http://localhost:8080?abc Skrypt CGI wywołano z argumentem abc 1 var cgi = require ( cgi ) ; var http = require ( http ) ; 3 var path = require ( path ) ; 5 var script = path. resolve ( hello.cgi ) ; 6 7 http. createserver ( cgi ( script ) ). listen ( 8080) ; skrypt.js Dr inż. Stanisław Polak 1 Przedmiot: Aplikacje internetowe Obsługa protokołu HTTP Serwer Node.js Framework Express Wolnostojący serwer WWW Express Ogólna charakterystyka Instalacja i uruchamianie $ npm install http-server -g $ http-server -h usage: http-server [path] [options] options: -p Port to use [8080] -a Address to use [0.0.0.0] -d Show directory listings [true] -i Display autoindex [true] -e --ext Default file extension if none supplied [none] -s --silent Suppress log messages from output -h --help Print this list and exit. -c Set cache time (in seconds). e.g. -c10 for 10 seconds. To disable caching, use -c-1. $ http-server Starting up http-server, serving./ on port: 8080 Hit CTRL-C to stop the server Najpopularniejszy framework do tworzenia aplikacji WWW Inspirowany projektem Ruby Sinatra Moduł node.js instalacja npm install -g express API oparte na JSON Dr inż. Stanisław Polak 15 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 16 Przedmiot: Aplikacje internetowe

Aplikacja Hello World 1 Framework Express Użyte narzędzia oraz języki Aplikacja Hello World 1 Framework Express Tworzenie szkieletu aplikacji 1 $ mkdir MySite $ cd MySite 3 $ vi package. json $ npm install #i n s t a l o w a n i e z a l e ż no ś c i Jade System szablonów Treść szablonu jest tłumaczona na HTML CSS 1 { " name " : " MySite ", 3 " version " : " 0.0.1 ", " private " : " true ", 5 " dependencies " : { 6 " express " : "*", 7 " jade " : "*", 8 " morgan " : "*" 9 } 10 } package.json Dr inż. Stanisław Polak 17 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 18 Przedmiot: Aplikacje internetowe Aplikacja Hello World 1 Framework Express Główny plik aplikacji 1 var express = require ( express ), logger = require ( morgan ) ; 3 var app = express ( ) ; 5 var router = express. Router ( ) ; 6 app. set ( views, dirname + / views ) ; 7 app. set ( view engine, jade ) ; 8 app. use ( logger ( dev ) ) ; 9 app. use ( express. static ( dirname + / public ) ) ; 10 router. get ( /, function ( req, res ) { 11 res. render ( index, 1 { title : Home } 13 ) 1 }) ; 15 app. use ( /, router ) ; 16 app. listen (3000) ; app.js Dr inż. Stanisław Polak 19 Przedmiot: Aplikacje internetowe Aplikacja Hello World 1 Framework Express Pliki Jade 1 extend layout block content 3 p Witaj Świecie 5 Witaj Świecie 6 p 7 Witaj Świecie 8 block sidebar 9. widget 10 h1 Widget 11 p 1 Tre ś ć ramki views/index.jade 1 doctype html html 3 head title #{title} My Site 5 link ( rel= stylesheet, href= / stylesheets / style.css ) 6 body 7 header 8 h1 My Site 9. container 10. main content 11 block content 1. sidebar 13 block sidebar 1 footer 15 p Running on node with Express, Jade and Stylus views/layout.jade Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 0 Przedmiot: Aplikacje internetowe

Aplikacja Hello World 1 Framework Express Plik CSS Aplikacja Hello World 1 Framework Express Uruchamianie aplikacji 1 $ node app GET / 00 1563 ms b 3 GET / stylesheets / style. css 00 865ms.6 kb 1 body {... 3 }. widget { 5... 6 } 7... public/stylesheets/style.css Dr inż. Stanisław Polak 1 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak Przedmiot: Aplikacje internetowe Aplikacja Hello World Framework Express Polecenie express Aplikacja Hello World Framework Express Generowanie aplikacji Hello World Użycie polecenia express 1 $ npm install g express generator $ express help 3 Usage : express [ options ] [ dir ] 5 Options : 6 7 h, help output usage information 8 V, version output the version number 9 e, ejs add ejs engine support ( defaults to jade ) 10 hbs add handlebars engine support 11 H, hogan add hogan. js engine support 1 c, css <engine> add stylesheet <engine> support ( less stylus compass ) ( defaults to plain css ) 13 f, force force on non empty directory 1 $ express MySite create : MySite 3 create : MySite / package. json create : MySite / app. js 5 create : MySite / public 6 create : MySite / public / javascripts 7 create : MySite / public / images 8 create : MySite / public / stylesheets 9 create : MySite / public / stylesheets / style. css 10 create : MySite / routes 11 create : MySite / routes / index. js 1 create : MySite / routes / users. js 13 create : MySite / views 1 create : MySite / views / index. jade 15 create : MySite / views / layout. jade 16 create : MySite / views / error. jade 17 create : MySite / bin 18 create : MySite / bin / www 19 0 install dependencies : 1 $ cd MySite && npm install 3 run the app : $ DEBUG=MySite : npm start Dr inż. Stanisław Polak 3 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak Przedmiot: Aplikacje internetowe

Aplikacja Hello World Framework Express Plik package.json Aplikacja Hello World Framework Express Główny plik aplikacji app.js 1 { " name " : " MySite ", 3 " version " : " 0.0.0 ", " private " : true, 5 " scripts " : { 6 " start " : " node./ bin / www " 7 }, 8 " dependencies " : { 9 "body - parser " : " ~1.13. ", 10 " cookie - parser " : " ~1.3.5 ", 11 " debug " : " ~..0 ", 1 " express " : " ~.13.1 ", 13 " jade " : " ~1.11.0 ", 1 " morgan " : " ~1.6.1 ", 15 "serve - favicon " : " ~.3.0 " 16 } 17 } var routes = require (./ routes / index ) ; 3 var users = require (./ routes / users ) ; 5 var app = express ( ) ; 6... 7 app. use ( /, routes ) ; 8 app. use ( / users, users ) ; 9... Dr inż. Stanisław Polak 5 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 6 Przedmiot: Aplikacje internetowe Aplikacja Hello World Framework Express Pliki z definicją tras Aplikacja Hello World Framework Express Pozostałe (wygenerowane) pliki 1 var express = require ( express ) ; var router = express. Router ( ) ; 3 / GET home page. / 5 router. get ( /, function ( req, res ) { 6 res. render ( index, { title : Express }) ; 7 }) ; 8 9 module. exports = router ; 1 extends layout 3 block content h1= title 5 p Welcome to #{title} views/index.jade 1 doctype html html 3 head title= title 5 link ( rel= stylesheet, href= / stylesheets / style.css ) 6 body 7 block content views/layout.jade 1 var express = require ( express ) ; var router = express. Router ( ) ; 3 / GET u s e r s l i s t i n g. / 5 router. get ( /, function ( req, res ) { 6 res. send ( respond with a resource ) ; 7 }) ; 8 9 module. exports = router ; routes/index.js routes/user.js 1 body { padding : 50 px ; 3 font : 1 px " Lucida Grande ", Helvetica, Arial, sans serif ; } 5 6 a { 7 color : #00B7FF ; 8 } 1 $ cd MySite && npm install $ npm start public/stylesheets/style.css Instalowanie zależności i uruchamianie aplikacji Dr inż. Stanisław Polak 7 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 8 Przedmiot: Aplikacje internetowe

Aplikacja Hello World 3 Framework Express MongoDB Ogólna charakterystyka Nierelacyjna baza danych zorientowana dokumentowo Dobrze skalowana Szybka Nie posiada sztywnych schematów danych Podstawowe pojęcia Kolekcja odpowiednik tabeli w relacyjnej bazie danych Dokument odpowiednik wiersza w relacyjnej bazie danych Rysunek: Przykładowy dokument Dr inż. Stanisław Polak 9 Przedmiot: Aplikacje internetowe Aplikacja Hello World 3 Framework Express Model danych w MongoDB Referencje Osadzane dokumenty Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 30 Przedmiot: Aplikacje internetowe Aplikacja Hello World 3 Framework Express Instalowanie zależności Aplikacja Hello World 3 Framework Express Tworzenie zawartości bazy danych 1 $ vi package. json $ npm install #i n s t a l o w a n i e z a l e ż no ś c i " dependencies " : { 3... " monk " : "*" 5 } 6... package.json 1 $ mongo MongoDB shell version :. 6. 3 3 connecting to : test > use bazatestowa1 5 switched to db bazatestowa1 6 > db. datacollection. insert ({ " title " : " Express & Mongo " }) 7 > db. datacollection. insert ({ " title " : " Express " }) 8 > db. datacollection. find ( ) 9 { " _id " : ObjectId ( "5 f8bb757bade7ec7171 " ), " title " : " Express & Mongo " } 10 { " _id " : ObjectId ( "5 f8bd07bade7ec717 " ), " title " : " Express " } 11 > db. datacollection. find ({ " title " : " Express " }) 1 { " _id " : ObjectId ( "5 f8bd07bade7ec717 " ), " title " : " Express " } Dr inż. Stanisław Polak 31 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 3 Przedmiot: Aplikacje internetowe

Aplikacja Hello World 3 Framework Express Modyfikacje var bodyparser = require ( body - parser ) ; 3 //Nowy kod var monk = require ( monk ) ; 5 var db = monk ( localhost :7017/ bazatestowa1 ) ; 6... 7 //Nowy kod 8 app. use ( function ( req, res, next ){ 9 req. db = db ; 10 next ( ) ; 11 }) ; 1 // I s t n i e j ą cy kod 13 app. use ( /, routes ) ; 1 app. use ( / users, users ) ; 15... app.js router. get ( / titles, function ( req, res ) { 3 var db = req. db ; var collection = db. get ( datacollection ) ; 5 collection. find ({},{}, function ( e, docs ){ 6 res. render ( titlelist, { 7 " titlelist " : docs 8 }) ; 9 }) ; 10 }) ; 11 1 module. exports = router ; routes/index.js AngularJS Ogólna charakterystyka Wydajny, darmowy framework do tworzenia dynamicznych aplikacji WWW Korzysta z MVC Zgodność aplikacji AngulsJS z różnymi przeglądarkami Pozwala używać HTML jako język szablonów Rozszerza HTML o dodatkowe atrybuty i znaczniki 1 extends layout 3 block content h1 Tytu ł y 5 ul 6 each element in titlelist 7 li #{element. title} views/titlelist.jade Dr inż. Stanisław Polak 33 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 3 Przedmiot: Aplikacje internetowe Główne cechy Dwukierunkowe wiązanie danych Zasięgi Kontrolery Usługi Filtry Dyrektywy Szablony Routing Model View Whatever (MVW) Głębokie linkowanie Wstrzykiwanie zależności Dr inż. Stanisław Polak 35 Przedmiot: Aplikacje internetowe Zalety i wady AngularJS Zalety Zapewnia możliwość tworzenia pojedynczej strony aplikacji w bardzo zgrabny oraz kontrolowany sposób Zapewnia możliwość wiązania danych HTML, co wzbogaca doznania użytkownika serwisu Kod może być testowany w oparciu o mechanizm testów jednostkowych Wykorzystuje wstrzykiwanie zależności oraz pozwala na korzystanie z separacji zagadnień Zapewnia komponenty wielokrotnego użytku Deweloperzy mogą osiągnąć większą funkcjonalność z krótszego kodu Widoki są czystymi stronami HTML, a kontrolerzy napisane w JavaScript wykonują przetwarzania Wady Dr inż. Stanisław Polak 36 Przedmiot: Aplikacje internetowe Stworzone aplikacje nie są bezpieczne Nie działa gdy użytkownik wyłączy obsługę JS

Aplikacja Hello World Przykład użycia wzorca MVC 1 <! doctype html> <html> 3 <head> <meta charset="utf -8"> 5 <script src=" https :// ajax. googleapis. com / ajax / libs / angularjs /1..3/ angular.min.js"></ script> 6 </ head> 7 <body ng-app=" myapp "> 8 <! Widok > 9 <div ng-controller="hellocontroller " > 10 <h1>"{{message.hello}} {{message.world}}" mówi AngularJS</ h1> 11 </ div> 1 <! Kontroler > 13 <script> 1 angular. module ( " myapp ", [ ] ) 15. controller( " HelloController ", function ($scope) { 16 $scope.message = { 17 hello : " Witaj ", 18 world : "Ś wiecie " 19 }; 0 }) ; 1 </ script> </ body> 3 </ html> Witaj Świecie mówi AngularJS Etapy ładowania dokumentu HTML 1. Ewaluacja dokumentu HTML. Tworzonie obiektu globalnego angular 3. Rejestracja funkcji kontrolera. Skanowanie HTML 5. Łączenie widoku z odpowiednią funkcją kontrolera 6. Wykonywanie funkcji kontrolera 7. Renderowanie widoku Najważniejsze dyrektywy Przykład użycia wzorca MVVM <body> 3 <div ng-app=""> <p>wprowad ź swoje imi ę : <input type=" text " ng-model=" imie "></p> 5 <p>witaj <span ng-bind=" imie "></ span>!</p> 6 </ div> 7 </ body> 8... Wprowadź swoje imię: Stan Witaj Stan! Dr inż. Stanisław Polak 37 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 38 Przedmiot: Aplikacje internetowe Wyświetlanie danych złożonych <div ng app="" ng-init=" miasta =[{ kierunkowy :1, nazwa : Kraków },{ kierunkowy :, nazwa : Warszawa }] "> 3 <h1>lista numer ów kierunkowych</h1> <ul> 5 <li ng-repeat=" miasto in miasta "> 6 {{"Nr kierunkowy : "+miasto. kierunkowy+", miasto : "+ miasto. nazwa }} 7 </li> 8 </ul> 9 </ div> 10... Lista numerów kierunkowych Nr kierunkowy: 1, miasto: Kraków Nr kierunkowy:, miasto: Warszawa Dr inż. Stanisław Polak 39 Przedmiot: Aplikacje internetowe Wyrażenia <div ng app="" ng i n i t=" ilosc=1; cena =30; student={ id :1, imie : Jan, nazwisko : Kowalski }; oceny =[3.5,.0,.5] "> 3 <! Korzystanie z napis ów > 5 Informacje nt. studenta {{student. imie + " " + student. nazwisko}} 6 <ul> 7 <! K o r z y s t a n i e z o b i e k t u > 8 <li>twój id : {{student. id}} 9 <! K o r z y s t a n i e z l i c z b > 10 <li>wydatki na książki : {{cena ilosc}} z ł 11 <! K o r z y s t a n i e z t a b l i c y > 1 <li>ocena z matematyki : {{oceny [ ] } } 13 </ul> 1 </ div> 15... Informacje nt. studenta Jan Kowalski Twój id: 1 Wydatki na książki : 30 zł Ocena z matematyki:.5 Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 0 Przedmiot: Aplikacje internetowe

Kontrolery Moduły <div ng app=" myapp " ng-controller=" studentcontroller "> 3 Podaj imi ę : <input type=" text " ng model=" student. imie "><br><br> Podaj nazwisko : <input type=" text " ng model=" student. nazwisko "><br> 5 <br> 6 Wprowadzasz : {{student. pelnanazwa ( )}} 7 </ div> 8 <script> 9 angular. module ( " myapp ", [ ] ) 10. controller ( " studentcontroller ", function ($scope) { 11 $scope.student = { 1 imie : " Jan ", 13 nazwisko : " Kowalski ", 1 pelnanazwa : function ( ) { 15 var obiektstudent ; 16 obiektstudent = $scope. student ; 17 return obiektstudent. imie + " " + obiektstudent. nazwisko ; 18 } 19 }; 0 }) ; 1 </ script>... Podaj imię: Jan Podaj nazwisko: Kowalski Wprowadzasz: Jan Kowalski 1 var myapp = angular. module ( " myapp ", [ ] ) ; myapp.js Korzystanie z modułów 1 myapp. controller ( " studentcontroller ", function ( $scope ) { $scope. student = { 3 imie : " Jan ", nazwisko : " Kowalski ", 5 pelnanazwa : function ( ) { 6 var studentobject ; 7 studentobject = $scope. student ; 8 return studentobject. imie + " " + studentobject. nazwisko ; 9 } 10 }; 11 }) ; studentcontroller.js <script src="https ://ajax.googleapis.com /ajax /libs /angularjs /1..3/ angular.min.js"></ script> 3 <script src=" myapp.js"></ script> <script src=" studentcontroller.js"></ script> 5... 6 <div ng app=" myapp " ng c o n t r o l l e r=" studentcontroller "> 7 Podaj imi ę : <input type=" text " ng model=" student. imie "><br><br> 8 Podaj nazwisko : <input type=" text " ng model=" student. nazwisko "><br> 9 <br> 10 Wprowadzasz : {{student. pelnanazwa ( )}} 11 </ div> 1... index.html Dr inż. Stanisław Polak 1 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak Przedmiot: Aplikacje internetowe Filtry DOM <body ng app=""> 3 <div ng i n i t=" studenci = [{ imie : Jan, nazwisko : Kowalski }, { imie : Małgorzata, nazwisko : Nowak }, 5 { imie : Anna, nazwisko : Nowak }] "></ div> 6 <label>szukaj : <input ng model=" szukanytekst "></ label> 7 <ul> 8 <! szukanytekst j e s t,, zmienn ą p r z e c h o w u j ą c ą t r e ś ć wprowadzon ą w powy ż szym p o l u <input> > 9 <li ng r e p e a t=" student in studenci filter: szukanytekst ">{{student. nazwisko}} {{student. imie}}</li> 10 </ul> 11 </ body> 1... Szukaj: Kowalski Jan Nowak Małgorzata Nowak Anna index.html Szukaj: Now Nowak Małgorzata Nowak Anna <div ng app=" myapp " ng c o n t r o l l e r=" studentcontroller "> 3 Podaj imi ę : <input type="text " ng model=" student.imie " ng-disabled=" disabletextfield "><br> 5 Podaj nazwisko : 6 <input type="text " ng model=" student. nazwisko " ng-disabled=" disabletextfield "><br > 7 Wprowadzasz : {{student. pelnanazwa ( ) }} 8 <p> 9 <input type=" checkbox " ng model="disabletextfield">dezaktywuj pola tekstowe 10 </p> 11 </ div> 1... index.html Dr inż. Stanisław Polak 3 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak Przedmiot: Aplikacje internetowe

Walidacja i wypełnianie formularza <div ng app=" myapp " ng c o n t r o l l e r=" studentcontroller "> 3 <form name=" formularz " novalidate> Podaj imi ę : <input name=" imie " type=" text " ng model=" student. imie " required> 5 <span style=" color : red " ng-show=" formularz. imie. $dirty && formularz. imie. $invalid "> 6 <span ng-show=" formularz. imie. $error. required ">Nie poda ł eś imienia</ span> 7 </ span> 8 <br> 9 Podaj nazwisko : <input name=" nazwisko " type=" text " ng model=" student. nazwisko " required> 10 <span style=" color : red " ng-show=" formularz. nazwisko. $dirty && formularz. nazwisko. $invalid "> 11 <span ng-show=" formularz. nazwisko. $error. required ">Nie poda ł eś nazwiska</ span> 1 </ span><br> 13 <button ng c l ic k=" reset ()">Kasuj</ button> 1 <button ng disabled=" formularz. imie. $dirty && formularz. imie. $invalid formularz. nazwisko. $dirty && formularz. nazwisko. $invalid " 15 ng-click=" submit ()">Wy ś lij</ button> 16 </ form> 17 </ div> 18... index.html Wstawki <div ng app=" myapp " ng c o n t r o l l e r=" studentcontroller "> 3 <div ng-include=" imie.html "></ div> <div ng-include=" nazwisko.html "></ div> 5 </ div> 6... index.html 1 Podaj imi ę : <input name=" imie " type=" text " ng model=" student. imie "> imie.html 1 Podaj nazwisko : <input name=" nazwisko " type="text " ng model=" student. nazwisko "> 1 myapp. controller ( " studentcontroller ", function ( $scope ) { $scope. student = { 3 imie :, nazwisko : 5 }; 6 $scope. reset = function ( ) { 7 $scope. student. imie="jan " ; 8 $scope. student. nazwisko="kowalski " ; 9 }; 10 $scope. reset ( ) ; 11 }) ; studentcontroller.js Podaj imię: Podaj nazwisko: nazwisko.html Dr inż. Stanisław Polak 5 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 6 Przedmiot: Aplikacje internetowe Użycia technologii AJAX Przełączalne widoki <div ng app=" myapp " ng c o n t r o l l e r=" studentcontroller "> 3 <ol> <li ng r e p e a t=" student in students ">{{ student. nazwisko}} {{student. imie}}</ li> 5 </ol> 6 </ div> 7... index.html 1 [ { 3 " imie " : " Jan ", " nazwisko " : " Kowalski " 5 }, 6 { 7 " imie " : " Anna ", 8 " nazwisko " : " Nowak " 9 } 10 ] students.json 1 myapp. controller ( " studentcontroller ", function ( $scope, $http ) { $http. get ( "students.json " ). success ( function ( response ) { 3 $scope. students = response ; }) ; 5 }) ; 1. Kowalski Jan. Nowak Anna studentcontroller.js 1 <h>dodaj studenta</h> {{message}} addstudent.html 1 <h>wy ś wietl student ów</h> {{message}} viewstudents.html <script s r c=" https :// ajax. googleapis. com / ajax / libs /angularjs /1..3/ angular -route.min.js"></ script> 3... <div ng app=" myapp "> 5 <p><a href=" #addstudent ">Dodaj Studenta</a></p> 6 <p><a href=" #viewstudents ">Wy ś wietl student ów</a ></p> 7 <div ng-view></ div> 8 </ div> 9 <script> 10 var myapp = angular. module ( " myapp ", [ ngroute ] ) ; 11 1 myapp. config ( [ $routeprovider, 13 function ( $routeprovider ) { 1 $routeprovider. 15 when ( /addstudent, { 16 templateurl : addstudent. html, 17 controller : AddStudentController 18 }). 19 when ( /viewstudents, { 0 templateurl : viewstudents. html, 1 controller : ViewStudentsController }). 3 otherwise ({ redirectto : / addstudent 5 }) ; 6 }]) ; 7 8 myapp. controller ( AddStudentController, function ( $scope ) { 9 $scope. message = "Ta strona bę dzie uż ywana do wyś wietlenia formularza dodawania studenta " ; 30 }) ; 31 3 myapp. controller ( ViewStudentsController, function ( $scope ) { 33 $scope. message = "Ta strona bę dzie uż ywana do wyś wietlania wszystkich student ów" ; 3 }) ; 35 </ script> index.html Dr inż. Stanisław Polak 7 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 8 Przedmiot: Aplikacje internetowe

Przełączalne widoki Szablon widoku inline 17 <script> 18 var myapp = angular. module ( " myapp ", [ ngroute ] ) ; 19 0 myapp. config ( [ $routeprovider, 1 function ( $routeprovider ) { $routeprovider. 3 when ( / addstudent, { <script src=" https :// ajax. googleapis. com / ajax / templateurl : addstudent. html, libs /angularjs /1..3/ angular -route.min.js 5 controller : AddStudentController "></ script> 6 }). 3... 7 when ( / viewstudents, { <div ng app=" myapp "> 8 templateurl : viewstudents. html, 5 <p><a href="# addstudent ">Dodaj Studenta</a></p 9 controller : ViewStudentsController > 30 }). 6 <p><a href="# viewstudents ">Wy ś wietl student ów< 31 otherwise ({ /a></p> 3 redirectto : / addstudent 7 <div ng view></ div> 33 }) ; 8 <script type=" text /ng-template" i d=" addstudent. 3 }]) ; html "> 35 9 <h>dodaj studenta</h> 36 myapp. controller ( AddStudentController, 10 {{message}} function ( $scope ) { 11 </ script> 37 $scope. message = "Ta strona bę dzie uż ywana do 1 <script type=" text /ng-template" i d=" viewstudents wyś wietlenia formularza dodawania. html "> studenta " ; 13 <h>wy ś wietl student ów</h> 38 }) ; 1 {{message}} 39 15 </ script> 0 myapp. controller ( ViewStudentsController, 16 </ div> function ( $scope ) { 1 $scope. message = "Ta strona bę dzie uż ywana do wyś wietlania wszystkich student ów" ; }) ; 3 </ script> index.html Dr inż. Stanisław Polak 9 Przedmiot: Aplikacje internetowe Zasięgi <div ng app=" mainapp " ng controller=" shapecontroller "> 3 <! Widok > <p>{{message}} <br/> {{type}} </p> 5 <div ng controller=" circlecontroller "> 6 <p>{{message}} <br/> {{type}} </p> 7 </div> 8 <div ng controller=" squarecontroller "> 9 <p>{{message}} <br/> {{type}} </p> 10 </div> 11 </div> 1 <script> 13 var mainapp = angular. module ( " mainapp ", [ ] ) ; 1 mainapp. controller ( " shapecontroller ", function ($scope) { 15 $scope.message = "W kontrolerze kszta łtu" ; 16 $scope.type = "Kszta łt" ; 17 }) ; 18 19 mainapp. controller ( " circlecontroller ", function ( $scope ) { 0 $scope.message = "W kontrolerze okr ęgu" ; 1 }) ; 3 mainapp. controller ( " squarecontroller ", function ( $scope ) { $scope.message = "W kontrolerze kwadratu " ; 5 $scope.type = "Kwadrat " ; 6 }) ; 7 </script> 8... W kontrolerze kształtu Kształt W kontrolerze okręgu Kształt W kontrolerze kwadratu Kwadrat Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 50 Przedmiot: Aplikacje internetowe Tworzenie własnych usług Kontrolery są tworzone w ramach tego jak są potrzebne i usuwane, gdy przestają być używane Usługa to zwykły obiekt, który ma za zadanie wykonać jakąś pracę Usługi są tworzone jednorazowo (jako singletony) i mogą być wstrzykiwane jako zależność do wielu kontrolerów Nazwy usług wbudowanych rozpoczynają się od znaku $ nazwy naszych własnych serwisów nie powinny rozpoczynać się od znaku $ Dlaczego warto używać własnych usług? Jesteśmy w stanie podzielić kod na mniejsze logiczne fragmenty Taki kod może być użyty wielokrotnie w naszej aplikacji Zasada pojedynczej odpowiedzialności nigdy nie powinno być więcej niż jednego powodu do modyfikacji klasy Wstrzykiwanie zależności usługi można wstrzykiwać do naszych kontrolerów lub innych usług Łatwiejsze testowanie mniejszy kod łatwiej się testuje Typy usług: Wartość Fabryka Serwis Dostawca Stała Dr inż. Stanisław Polak 51 Przedmiot: Aplikacje internetowe Tworzenie usługi typu Wartość 1 // Definiowanie warto ś c i var mymodule = angular. module ( " mymodule ", [ ] ) ; 3 mymodule. value( " numbervalue ", 999) ; mymodule. value( " stringvalue ", "abc " ) ; 5 mymodule. value( " objectvalue ", { val1 : 13, val : "abc "} ) ; 6 7 // W s t r z y k i w a n i e warto ś c i do k o n t r o l e r a 8 mymodule. controller ( " MyController ", function ( $scope, numbervalue ) { 9 console. log ( numbervalue ) ; // Wypisze : 999 10 }) ; Dr inż. Stanisław Polak 5 Przedmiot: Aplikacje internetowe

Tworzenie usługi typu Fabryka Tworzenie usługi typu Serwis 1 var mymodule = angular. module ( " mymodule ", [ ] ) ; 3 // Definiowanie warto ś c i mymodule. value ( " numbervalue ", 999) ; 5 6 // W s t r z y k i w a n i e warto ś c i do f a b r y k i 7 mymodule. factory( " myfactory ", function ( numbervalue ) { 8 return "a value : " + numbervalue ; 9 }) ; 10 11 // W s t r z y k i w a n i e f a b r y k i do k o n t r o l e r a 1 mymodule. controller ( " MyController ", function ( $scope, myfactory ) { 13 console. log ( myfactory ) ; // Wypisze : a v a l u e 999 1 }) ; 1 var mymodule = angular. module ( " mymodule ", [ ] ) ; 3 mymodule. value ( " myvalue ", " 135 " ) ; 5 // Wstrzykiwanie warto ś c i do serwisu 6 function MyService ( myvalue ) { 7 this. doit = function ( ) { 8 console. log ( " done : " + myvalue ) ; 9 } 10 } 11 1 mymodule. service( " myservice ", MyService ) ; 13 //Wewnę t r z n i e j e s t wykonywane : v a r t h e S e r v i c e = new MyService ( ) ; 1 15 // W s t r z y k i w a n i e s e r w i s u do k o n t r o l e r a 16 mymodule. controller ( " MyController ", function ( $scope, MyService ) { 17 myservice. doit ( ) ; // Wypisze : done : 135 18 }) ; Dr inż. Stanisław Polak 53 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 5 Przedmiot: Aplikacje internetowe Tworzenie usługi typu Dostawca Tworzenie usługi typu Stała 1 var mymodule = angular. module ( " mymodule ", [ ] ) ; 3 mymodule. provider( " mysecondservice ", function ( ) { var provider = {}; 5 6 // D e f i n i o w a n i e dostawcy 7 provider. $get = function ( ) { 8 var service = {}; 9 10 service. doservice = function ( ) { 11 console. log ( " mysecondservice : Service Done!" ) ; 1 } 13 return service ; 1 } 15 return provider ; 16 }) ; 17 18 // W s t r z y k i w a n i e dostawcy do k o n t r o l e r a 19 mymodule. controller ( " MyController ", function ( $scope, mysecondservice) { 0 mysecondservice. doservice ( ) ; // Wypisze : mysecondservice : Se r vi c e Done! 1 }) ; 1 var mymodule = angular. module ( " mymodule ", [ ] ) ; 3 mymodule. provider ( " mysecondservice ", function ( ) { var provider = {}; 5 var config = { configparam : " default " }; 6 7 provider. doconfig = function ( configparam ) { 8 config. configparam = configparam ; 9 } 10 11 provider. $get = function ( ) { 1 var service = {}; 13 1 service. doservice = function ( ) { 15 console. log ( " mysecondservice : " + config. configparam ) ; 16 } 17 18 return service ; 19 } 0 1 return provider ; }) ; 3 mymodule. constant( "configvalue ", "constant config value " ) ; 5 mymodule. config( function ( mysecondserviceprovider, configvalue ) { 6 mysecondserviceprovider. doconfig ( configvalue ) ; 7 }) ; 8 9 mymodule. controller ( " MyController ", function ( $scope, mysecondservice ) { 30 mysecondservice. doservice ( ) ; // Wypisze : mysecondservice : c o n s t a n t c o n f i g v a l u e 31 }) ; Dr inż. Stanisław Polak 55 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 56 Przedmiot: Aplikacje internetowe

Definiowanie własnej usługi Przykład Minimalizacja kodu JS a wstrzykiwanie zależności Wersja oryginalna 1 myapp. controller ( " studentcontroller ", function ( $scope, $http ) { $http. get ( "students.json " ). success ( function ( response ) { 3 $scope. students = response ; }) ; 5 }) ; Wersja zmodyfikowana studentcontroller.js 1 myapp. factory ( " studentsfactory ", function ( $http ) { return $http. get ( "students.json " ) ; 3 }) ; 5 myapp. controller ( " studentcontroller ", function ( $scope, studentsfactory ) { 6 $scope. students = studentsfactory. success ( function ( response ) { 7 $scope. students = response ; 8 }) ; 9 }) ; studentcontroller.js Wersja niezalecana 1 myapp. controller ( " studentcontroller ", function ( $scope, $http ) { $http. get ( " students.json " ). success ( function ( response ) { 3 $scope. students = response ; }) ; 5 }) ; 1 myapp. controller ( " studentcontroller ", function ( t, n ){n. get ( " students. json " ). success ( function ( n ){t. students= n }) }) ; Wersja zminimalizowana Wersja zalecana 1 myapp. controller ( " studentcontroller ", [ 3 $scope, $http, 5 function( $scope, $http ) { 6 $http. get ( " students.json " ). success ( function ( response ) { 7 $scope. students = response ; 8 }) ; 9 }]) ; 1 myapp. controller ( " studentcontroller ", [ " $scope ", " $http ", function ( t, n ){n. get ( " students. json " ). success ( function ( n ){t. students=n }) } ] ) ; Wersja zminimalizowana Dr inż. Stanisław Polak 57 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 58 Przedmiot: Aplikacje internetowe Definiowanie niestandardowych dyrektyw <div ng app=" myapp " ng c o n t r o l l e r=" StudentController "> 3 <s t u d e n t i n f o s t u d e n t=" kowalski "></ s t u d e n t i n f o> <s t u d e n t i n f o s t u d e n t=" nowak "></ s t u d e n t i n f o> 5 </ div> 6 7 <script> 8 myapp = angular. module ( " myapp ", [ ] ) ; 9 10 myapp. directive ( studentinfo, function ( ) { 11 var directive = {}; 1 13 directive. restrict = E ; 1 15 directive. template = "Student : <b >{{ student.imie }}</b> <b >{{ student.nazwisko }}</b>" ; 16 17 directive.scope = { 18 student : "= student " 19 } 0 1 return directive ; }) ; 3 myapp. controller ( " StudentController ", function ( $scope, $http ) { 5 $scope. kowalski = {}; 6 $scope. kowalski. imie = "Jan " ; 7 $scope. kowalski. nazwisko = "Kowalski " ; 8 9 $scope. nowak = {}; 30 $scope. nowak. imie = " Anna " ; 31 $scope. nowak. nazwisko = "Nowak " ; 3 }) ; 33 </ script> 3... Dr inż. Stanisław Polak 59 Przedmiot: Aplikacje internetowe Umiędzynarodowienie <script src="https://code.angularjs.org/1..3/i18n/angular-locale pl-pl.js"></ script> 3... <div ng app=" myapp " ng c o n t r o l l e r=" StudentController "> 5 {{fees currency }} <br/><br/> 6 {{admissiondate date }} <br/><br/> 7 {{rollno number }} 8 </ div> 9 10 <script> 11 var myapp = angular. module ( " myapp ", [ ] ) ; 1 myapp. controller ( StudentController, function ( $scope ) { 13 $scope. fees = 1 0 0 ; 1 $scope. admissiondate = new Date ( ) ; 15 $scope. rollno = 1 3 5 6 7. 8 9 ; 16 }) ; 17 </ script> 100,00 zł 1 lut 015 1 3 567,89 Materiały dla studentów Informatyki WSZiB w Krakowie Dr inż. Stanisław Polak 60 Przedmiot: Aplikacje internetowe

Źródła Źródła Źródła I Źródła II Acodemy. Serwisy angularjs. http://10clouds.github.io/acodemy.io/angular/services/. MongoDB Inc. The MongoDB Manual. http://docs.mongodb.org/manual/. Jakob Jenkov. AngularJS Tutorial. http://tutorials.jenkov.com/angularjs/index.html. Joyent. Node.js Manual & Documentation. http://nodejs.org/api/. Maciej Rzepiński. Angularjs factory vs service vs provider. http://mrzepinski.pl/ angularjs-8-factory-vs-service-vs-provider.html. Tutorialspoint. AngularJS Tutorial. http://www.tutorialspoint.com/angularjs/. Dr inż. Stanisław Polak 61 Przedmiot: Aplikacje internetowe Dr inż. Stanisław Polak 6 Przedmiot: Aplikacje internetowe