Advertisement
Sothian

SSI_Podsumowanie_Lab3

Oct 28th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Postamana nei ogarnalem wiec tu nie ma
  2.  
  3. ////////////////////////////// Logger
  4.  
  5. var utl = 'http://ssilogger.pk.edu.pl/log';
  6. const EventEmitter = require('events');
  7. const emitter = new EventEmitter();
  8.  
  9. // Tworzymy klase o ktorej mowa w App.js przy sekcji z Emiterem
  10. class Logger extends EventEmitter {
  11.     log(wiadomosc) {
  12.         //gdzies wysylamy do adresu url ale u nas tylko do kontroli
  13.         console.log(wiadomosc);
  14.         this.emit('messageLogged');
  15.     }
  16. }
  17.  
  18.  
  19. // Eksportowanie tej funkjci, inaczej wszystko jest prywatne
  20. //  module.exports.log = log;
  21.  
  22. // Teraz po utworzeniu klasy mozemy wyeksportowac po prostu klase
  23. module.exports = Logger;
  24.  
  25. ////////////////////////////// App
  26.  
  27. ////////// Wprowadzenie
  28. // Starsze podejscie do tworzenia funkcji
  29. function witaj(imie) {
  30.     console.log("Witaj " + imie + "!");
  31. }
  32. witaj("Imię");
  33.  
  34. // Nowsze podejscie do tworzenia funkcji
  35. var czesc = function(imie){
  36.     console.log("Czesc " + imie);
  37. }
  38. czesc("Imię");
  39.  
  40. // Timeout
  41. setTimeout(function () {
  42.     witaj("Timeout");
  43. }, 2000);
  44.  
  45.  
  46. ////////// Zabawy modulami (innymi plikami, export itp)
  47.  
  48. // Lepiej deklarowac jaki const, na poczatku pliku jak wszystkie importy
  49. // Dzieki const nie mozemy zmienic wartosci i nadpisac, ale mozemy zmienic nadal wlasnosci wiec jest git
  50. // logger = 1;
  51. const logger = require('./logger');
  52.  
  53. // Jesli nic nie wyeksportujemy to log zwroci pusty obiekt bo wszystko jest prywatne
  54. console.log(logger);
  55.  
  56. // Path jest domyslnie, zwraca sciezke do pliku
  57. const path = require('path');
  58. var sciezka = path.parse(__filename);
  59. console.log(sciezka);
  60.  
  61. // Os jest tez domyslnie, info o systemie
  62. const os = require('os');
  63. var calkowitaPamiec = os.totalmem();
  64. var wolnaPamiec = os.freemem();
  65. console.log('Calkowita pamiec: ' + calkowitaPamiec);
  66.  
  67. // Uzywamy templatow wreszcie. Inne apostrofy.
  68. console.log(`Wolna pamiec ${wolnaPamiec} z ${calkowitaPamiec}`);
  69.  
  70. // File system, znow domyslne
  71. var fs = require('fs');
  72. // Mozemy podgladac pliki z danej sciezki. Jest wersia synchroniczna i asynchroniczna, nizej synchroniczna bo sie wykona na pewno od razu
  73. const pliki = fs.readdirSync('./');
  74. console.log(pliki);
  75.  
  76. console.log('---------------------------------------------------');
  77.  
  78.  
  79. // Emiter
  80. const EventEmitter = require('events');
  81. const emitter = new EventEmitter();
  82.  
  83. // Rejestrujemy emiter
  84. emitter.on('messageLogger', function () {
  85.     console.log('Listener zostal wywolany');
  86. });
  87. // Wznosimy wydarzenia ktore zosalo wywolane
  88. emitter.emit('messageLogger');
  89. emitter.emit('messageLogger');
  90.  
  91. // Tworzyy drugi emiter, nazwany messageArg i z arrow funckja (standard ES6+)
  92. emitter.on('messageArg', (arg) => {
  93.     console.log('Listener z argumentem', arg);
  94. });
  95.  
  96. // Cos jest nie tak z tym obietkem ale czemu to nie wiem
  97. // emitter.emit('messageArg', arg{id:1, url:'http:'});
  98.  
  99. // Logger tworzy tak inna instancje emita wiec nie bedzie to samo. Zeby bylo to smo musimy ogarnac klase ktora bedzie dziedziczyc itp
  100. // logger.log("abc");
  101.  
  102. // Teraz mozemy wywolac z klasy tego loggera. Pamietac o imporcie!
  103. const loggers = require('./logger');
  104. const loggerscnd = new loggers();
  105. loggerscnd.log("aaa");
  106.  
  107. // Mozemy teraz podpiac sie do loggera zmieniajac emittera na loggera, zmianiajac kod wyzej na taki:
  108. /*
  109. logger.on('messageLogger', function () {
  110.     console.log('Listener zostal wywolany');
  111. })
  112. // Wznosimy wydarzenia ktore zosalo wywolane
  113. logger.emit('messageLogger');
  114. logger.emit('messageLogger');
  115.  
  116. // Tworzyy drugi emiter, nazwany messageArg i z arrow funckja (standard ES6+)
  117. logger.on('messageArg', (arg) => {
  118.     console.log('Listener z argumentem', arg);
  119. })
  120. logger.emit('messageArg', arg[id:1, url:'http://']);
  121.  */
  122.  
  123.  
  124. console.log('---------------------------------------------------');
  125. ////////// Troche webowki
  126. const http = require('http');
  127. const serwer = http.createServer();
  128.  
  129. // Dzieki tejj funkcji (eventowi) connection mozemy sprawdzac czy ktos sie laczy do nas
  130. serwer.on('connection', (socket => {
  131.     console.log('Nowe polaczenie...');
  132. }));
  133. // Otwarcie serwera na porcie 3000
  134. serwer.listen(3000);
  135. console.log('Serwer oczekuje na porcie 3000');
  136.  
  137. // Rozszerzamy nasz serwer na inny port dajac mu mozliwosci wysweitlania
  138. const serwerDrugi = http.createServer((req, res) => {
  139.     // po url === podajemy w '' nazwe ktora wpisuje sie normalnie w linku
  140.     if(req.url === '/') {
  141.         // We wricie mozna nawet html pisac no ale bez sensu jest ten sposob
  142.         res.write("Witaj Swiecie!");
  143.         res.end();
  144.     }
  145.     if(req.url === '/api/liczby') {
  146.         res.write(JSON.stringify([1,2,3,4]));
  147.         res.end();
  148.     }
  149. })
  150. serwerDrugi.on('connection', (socket => {
  151.     console.log('Nowe polaczenie...');
  152. }));
  153. // Otwarcie serwera na porcie 3000
  154. serwerDrugi.listen(3003);
  155. console.log('Serwer oczekuje na porcie 3000');
  156.  
  157. ////////////////////////////// App1 - z uzyciem Express.js
  158.  
  159. const express = require('express');
  160. const app = express();
  161. app.use(express.json());
  162.  
  163. // Expresem jak widac nizej jest duzo szybciej i ladniej
  164. app.get('/', (req,res) => {
  165.     res.send("Witaj swiecie!");
  166. });
  167. app.get('/app/lista', (req, res) => {
  168.     res.send([1,2,3,4]);
  169. });
  170. // Jak zaskakuje brak bracketow nizej - w arrow functions nie trzeba jesli jest tylko jedna linjka albo jeden return
  171. // Zakomentowane bo nizej kombinujemy
  172. //app.listen(3005, () => console.log("Oczekuje na porcie 3005"));
  173.  
  174. // Dzięki :rok mozemy podac w adresie jakis argument czyli np app/2019/10
  175. // Zakomentowane bo nizej kombinujemy z lista aut i sie adresy nakladaly
  176. //app.get('/app/:rok/:miesiac', (req, res) => {
  177. //    res.send([req.params]); // res.send([req.query]);
  178. //});
  179.  
  180. // Mozna uzywac tez roznych zmiennych srodowiskowych ale to troche ryzyko bo nie wiemy kto co ma w systemie ustaione
  181. // Zeby uniknac bledu uzywamy albo portu albo domyslnie 3000 jak nie ma takiej zmiennej
  182. const port = process.env.PORT || 3000;
  183. app.listen(port, () => console.log(`Oczekuje na porcie ${port}`));
  184.  
  185. // Bedziemy przekazywac liste na strone
  186. const lista = [
  187.     {
  188.         id:1,
  189.         nazwa: 'ALFA ROMEO'
  190.     },
  191.     {
  192.         id:2,
  193.         nazwa: 'AUDI'
  194.     },
  195.     {
  196.         id:3,
  197.         nazwa: 'BMW'
  198.     },
  199.     {
  200.         id:4,
  201.         nazwa: 'CITROEN'
  202.     },
  203. ];
  204. app.get('/app/listaAut', (req, res) => {
  205.     res.send(lista);
  206. });
  207. // Ustawiamy mozliwosc dostawania sie po ID do konkretnych modeli z listy
  208. app.get('/app/listaAut/:id', (req, res) => {
  209.    // Najpierw sprawdzamy czy taki element w ogole jest. Parsujemy bo wszystko co nam przychodzi z adresu to string
  210.     let element = lista.find(l=> l.id === parseInt(req.params.id));
  211.     // Jesli nie odnaleziono to wywalamy 404 z komunikatem
  212.     if(!element) {
  213.         res.status(404).send('Element o takim ID nie zostal znaleziony');
  214.     } else {
  215.         res.send(element);
  216.     }
  217. });
  218.  
  219. // Uzywamy metode POST, przez ktora mozemy przesylac JSON np.
  220. app.post('api/lista', (req, res) => {
  221.     // Prosta weryfikacja czy jest cos takiego jak nazwa w body i czy ma >=3 znaki
  222.     if(!req.body.nazwa || req.body.nazwa.length < 3) {
  223.         res.status(404).send('Nazwa jest wymagana i musi mie c minimum 3 znaki');
  224.         return;
  225.     } else {
  226.         // Fabrykujemy wysylanego przez POST JSONa
  227.         const element = {
  228.             id: lista.length + 1,
  229.             nazwa: req.body.nazwa
  230.         };
  231.         // Push na liste i przeslanie
  232.         lista.push(element);
  233.         res.send(element);
  234.     }
  235. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement