>> Pořádku.
Takže cliffhanger byl, co je node.js, jak ho známe dnes?
Cokoliv? Jo?
>> Bylo to jako Rámec psaní JavaScript
Aplikace široce -
>> OK, to funguje.
>> - Vím, že jako běžné použití, jako je -
nebo něco, co vám můžete udělat, je jako -
[Neslyšitelný Poznámka]
>> OK dobře.
Jo, tak to je rámec.
Je to motor, o kterou můžete spustit kód JavaScript
Server místě.
To může znamenat, že Nejjednodušší věcí
jako je psaní příkazového řádku Skript není v Pythonu a Bash
nebo Ruby nebo PHP, ale jen v samotném JavaScriptu
a spuštěním na bliká příkazový řádek.
Nebo můžete skutečně spustit že v rámci webového serveru.
A v tom, v node.js sám,
tento rámec je celá parta knihoven, které jsou mezi
v HTTP serveru vestavěným.
Takže, můžete skutečně psát server, jak uvidíme
za chvíli, super snadno pouhým k pochopení trochu
HTTP a TCP a porty.
A můžete plodit poslech webový server, aniž by Apache,
aniž by Microsoft IIS.
Bez dalších nainstalovaný software,
stačí třít to a poslouchat většinu každém portu
v systému, který máte možnost.
Tak tomu a body, nech mě jít a otevřít
up tomto příkladu, server-0.js.
Tak zjistíte, že horní část tento soubor, jen parta
z nezajímavých připomínky, a pak je tu pár
reprezentativních řádků kódu že uvidíme recurringly.
Takže, var HTTP dostane vyžadují "HTTP".
Takže vestavěný do node.js " infrastruktura je celá parta
modulů, které jsou opravdu jen knihovny a vše je trochu
ze jmenného prostoru s jedinečný identifikátor
jako je tento je "HTTP".
Takže stejně jako v mnoha jazyky jako je Java a C + +
a C, pouze tehdy, když importovat nebo zahrnout
nebo v uzlu mluvit vyžadují modul dělá své kousky.
A všechny paměti vyžaduje, aby se naložené
do paměti RAM a proto se používá.
Takže, jste nějak nahrát tuto knihovny nebo moduly na vyžádání.
To znamená, že do toho pusťte a vyžadují
pro tento program knihovna HTTP,
a vztahují se k tomuto knihovně způsob proměnné nazvané HTTP.
Ale tento symbol levá mohl byli povoláni něco, foo,
bar, baz, nezáleží na tom.
Takže na rozdíl od C + + a Java a C, kde, kdy budete potřebovat
nebo importovat knihovnu, je to jen trochu
z stává globálně přístupné,
node.js moduly těsněji namespace.
Takže vlastní - že funkce je přístupný pouze v okamžiku, kdy
pomocí tohoto názvu proměnné.
Nemůžete prostě začít způsoby psaní, které existují
v tom právě způsob, což je asi dobře,
protože pak se vaše namespace nedostane zdaleka tak přeplněná
jako v mnoha jazycích.
Dobře, tak teď jako společná navrhnout, vytvořit HTTP server
jako Jonathan [předpokládat, hláskování] bylo možné je doslova
stejně jednoduché jako volání vytvořit metodu serveru uvnitř
modulu HTTP.
Tak, to se vrací reference
na nějakém serveru.
Stalo se Apache, ne nutně jako těžká váha.
To je trochu jednodušší.
A teď, musím jen prostě udělat pár věcí.
Takže nejprve mi dovolte, abych přejděte dolů na dno zde
a přeskočit psovoda metoda na chvíli.
A všimněte si tento řádek kódu,
server.on který je v podstatě znamená, že server -
poslouchat jako v jQuery kódu,
poslouchat pro událost volal žádost
a jen se hádat Co mám dělat,
Při požadavku události požáry v serveru.
Jo?
>> Zavolejte rutinu funkce.
Takže, doslova spustit kód, který je odkazováno
podle této proměnné a ve skutečnosti není proměnná symbol tady,
co je to za symbol mysli?
No, tento název fungovat tady
a psovod zřejmě bere dva argumenty.
Proč dva? No, pokud jste právě Přečtěte si žádnou dokumentaci
pro tento modul, je bude řečeno, že psovod
která bude vyvolána bude Uplynulo nejméně dva argumenty,
odkaz na žádost,
a uvnitř přání doslovně znamenat požadavek HTTP.
Takže všechny ty HTTP hlavičky které by vás mohly vyvolat
od počátku roku semestr nebo některé předchozí třída
nebo zkušenost jako dostat linku a hostitelskou linku
a User-Agent linka, to vše je zapouzdřen a více uvnitř
tohoto požadavku objektu.
A objekt odpověď dále pro odchozí data.
Takže, máte odkaz na namítají, že se děje, aby vám
poslat informace zpět do prohlížeč voláním metody
na posledně uvedeném argumentu tzv. Res na odpověď.
Ale to by se dalo nazvat foo nebo bar, to jsou jen konvence.
Takže teď, co mám dělat?
No, zdá se, že uvnitř tohoto velmi jednoduchého webového serveru
že jsem se provádí, jsem dělat následující.
Chystám se napsat HTTP header se stavovým kódem 200,
200 Význam OK, je vše v pořádku.
A pak, já jdu předat zdánlivě.
Co je to datový typ Druhý argument na pravé hlavě?
>> Je to objekt?
>> Je to objekt s jak klíče a hodnoty lidí?
Jen jeden z každého, vpravo, jeden klíč hodnota dvojice.
Takže, "typ obsahu".
A jediný důvod, proč Já jsem to citoval zde
protože pomlčka může být sjednocena na znaménko minus
nebo něco takového.
Takže, musím ho citovat zde, připálit nebo dvojité uvozovky.
Ale zase společné paradigma
v kódu JavaScript je často jednoduché uvozovky v těchto dnech,
tlustého střeva a pak hodnota.
Takže, je to jen tzv. typ mysl.
Toto je záhlaví HTTP který je doslova děje
být obsah typu pomlčka tlustého střeva Text lomítko jasné, že se děje
které mají být zaslány z serveru do prohlížeče
tak, že prohlížeč ví zda je třeba spustit tento jako prostého textu
nebo HTML nebo jako obraz nebo film
nebo Flash soubor nebo něco jiného.
Nyní, kdy mám vlastně chtějí poslat v těle stránky?
No, jen tím, že čtení dokumentace
pro objekt odpověď uvnitř této knihovny.
Vidím, že je to správná metody a že se řetězec,
možná i jiné věci, ale minimálně řetězec.
A řetězec je to, co je vyplivnout do prohlížeče.
V tomto případě je jeho výborný jednoduchý, jeho hello world,
ale může to být opne držák, html, pravá závorka,
otevřený držák hlavice, v blízkosti držák a tak dále,
to by mohlo být Raw html.
Ale my jsme udržet příklad jednoduché, jen plivat
z nejjednodušších typů mysli což je pravděpodobně text / plain.
A pak Response.End jen znamená ukončit spojení
a poslat všechno, co mám druh vyrovnávací paměti uvnitř
z tohoto objektu zpět do prohlížeče.
Já jsem udělal. Dobrá.
Takže poslední věc, Dělám tady
a to je poněkud svévolné a chtěl být v pohodě,
je Říkám Server nakonec poslouchat
na určité TCP ve výchozím nastavení portu.
Připomeňme, od začátku ze třídy, že služby -
nebo obvykle jednoznačně identifikovat podle čísel,
AD je web, 443 je založen HTTP webové stránky, 22 SSH, 21 FTP
a 1337 je prostě libovolná ale je to více než 1024
což znamená, že na většině systémy, mohu použít to
aniž byste museli Super uživatelská oprávnění.
Takže je to jen pohodlnější.
Ale 8080 je v off - společný jeden, 8088, opravdu nic velkého
v tisících jako společné ale je to jen další elita.
Dobře, tak co se stane, když jsem vlastně běží to?
No, nemyslím si, stačí navštívit stránky v prohlížeči.
Tento soubor se nazývá server-0.js.
Vzhledem k tomu znovu, Apache je Nyní z obrázku
na druhé polovině kurzu.
Pokud chci na web serveru, musím napsat
a pak spustit tento webový server.
Ale ukazuje se, že JavaScript a to jak na straně klienta
a na straně serveru interpretovaný jazyk.
Takže vše, co potřebujete, je tlumočníka.
Takže To je - pokud trvají běžet uzel a pak server-0.js,
I může nebo nemusí vidět někteří výstup v závislosti
na to, co knihovny jsem součástí, nic se neděje.
Ale nechte mě jít na prohlížeč a nech mě jít
na stejné IP adrese mých CS50 klientů.
Ale to jen mohl i můj Mac
nebo můj počítač a poté stiskněte klávesu Enter.
To vlastně vypadá Apache.
To je jako adresář výpis jsme se podívali
v první polovině roku.
Takže, co jsem udělal špatně?
Jo.
[Neslyšitelný Poznámka]
Přesně tak, jo?
Takže, Apache je stále poslouchat na standardním portu 80.
I když jsem mohl změnit, Nemohl jsem ho vypnout všechny společně
ale je to stále běží.
Ale tito lidé mohou jistě koexistovat.
Já prostě musím dát tlustého střeva 1337 a pak možná
nebo možná ne lomítko na end pro přístup k tomuto portu
že tento server je spuštěn.
A teď vidím, že Dobrý den, se vrátil svět.
A mohu zasáhnout znovu načíst jako kolikrát chci,
je to stále servírují stránky.
Ve skutečnosti, pokud otevřu Chrome je inspektor, jděte na síti
a pak znovu načíst celou stránku,
Všimněte si, že ve skutečnosti to bylo Požadavek, který byl zaslán.
Když se podívám na Raw zdroje,
Všimněte si, můj prohlížeč posílá všechny ty věci.
A pak odpověď Server byl velmi jednoduchý.
K dispozici je 200.
Pokud to není příliš nízká na obrazovce,
je typ obsahu.
A pak node.js tak nějak automaticky
pro mě přidal datum a všechny ostatní věci
že prohlížeče obvykle očekávají.
Takže, pojďme prostě vidět malá kontrola zdravý rozum.
Nech mě jít zpátky do kódu v serverovně 0.js a dovolte mi, abych -
pokaždé, když jdu do psovod,
dovolte mi říci console.log.
("Měli jsme návštěvu!").
Nepotřebuji, aby překompilovat nebo něco takového,
to je interpretovaný jazyk.
Takže teď, nech mě jít zpět do stránku, vložte jeden, dva,
třikrát a jít zpět k mému oknu.
A teď vidím tohle.
No, to je divné, Vidím šest řádků.
Zajímavé webové trivia, proč Mám šest žádost ne tři?
Jo?
[Neslyšitelný Poznámka]
Jo. Takže, jak můžete vědět, trochu hloupé ikona v horní
na liště prohlížeče, která hodně
z webových stránek používaných moci být Harvard hřeben,
to by mohlo být logo společnosti nebo něco podobného.
Takže, prohlížeče v těchto dnech trochu
z opovážlivě, aby další HTTP požadavek
na téměř každé webové stránky, které které navštívíte kontrolu, zda je
Ve výchozím nastavení soubor s názvem favicon.ico
ve stejném adresáři jako soubor, který jste požadoval.
A pokud ano, klade ikona zde.
Takže vše, co vidíte je přesně to.
A ve skutečnosti, uvidíme, jestli budeme Můžete vidět, spíše než typ
ven jen "Měli jsme návštěvu".
Nech mě jít napřed a výstup.
A já jen vím to od při pohledu na dokumentaci.
Je tu vlastnost uvnitř Žádost objekt nazvaný URL
který se stane být cesta
že byl požádán, v aktuálním URL.
Takže, když jsem restartovat server jednoduše opakovaným spuštěním uzel
o serveru-0.js a Nyní se tento jeden, dva,
tři a jít sem zpátky.
Tady to je.
Slash je to, co jsem - lidský požadované
v favicon.ico je co je prohlížeč
opovážlivě žádosti.
Ale nejde o to, tolik favicon věci
ale jak je server provozován.
Jo?
>> Proč to má být nějaký požadavek?
>> Proč to má - podle povahy, jak funguje HTTP.
Takže, HTTP lze pouze požádat jeden soubor najednou.
Prohlížeče mohou být chytrý v těchto dnech
a udržet TCP připojení otevřené.
Pokud jste si CS143 nebo obecně obeznámeni se sítí,
takže se můžete dostat zvýšení efektivity
udržováním sítě zásuvka otevřená
při vytváření více HTTP Žádosti sériově nad ním
ale oni jsou jeden soubor na vyžádání.
Takže, pokud jste navštívit něco jako -
Myslím můžeme jít na většina jakékoliv webové stránky.
Vydáte-li se - pojďme vytáhnout Chrome je inspektor zde.
Může se vyplnit nejvíce stránky.
Přejděte na kartu sítě a přejděte na www.cnn.com.
A při návštěvě cnn.com, její domovskou internetovou stránku -
Váš prohlížeč poněkud otřesně je - stále narůstá.
OK. Alespoň 289 HTTP žádosti znovu a znovu.
A to je důvod, proč, když navštívíte zvláště nafouklé webové stránky,
jsou pomalé načítání protože všechny
z aktiv, které nahráváte.
Takže to vypadá, že 298.
Tam by mohl být nějaký Ajax děje v tomto okamžiku, nebo některé
aktiv jsou jen nízké.
Takže, každý z nich je individuální žádost se vrací
a tam, sem a tam.
A to je důvod, proč již dříve, a to i když jsme trochu mluvili
o tom něco fancifully kde si dát tag script,
absolutně činí rozdíl, když máte -
to začíná mít hodně dopravy a mnoho
ze je požadováno soubory.
A každý to představuje pravděpodobně obraz, mediální soubor,
soubor JavaScript, CSS soubor nebo podobně.
Takže, jsme již do některé 4MB jen
se podívat na dnešní novinky.
Dobrá otázka.
Dobrá.
Takže, jaké jsou některé z se upsides když?
Jasně, víme, jak se dělá webové stránky již s PHP.
A mnoho z vás přišlo do třída věděl Django
a Python nebo lišty s Ruby.
Takže, proč potřebujeme ještě další jazyk a infrastruktura?
Co je node.js zejména dobře, pokud víte?
[Pause]
Některé věci?
Ne? Jo?
>> Přeložka zprávy.
>> Tak, předávání zpráv.
Tak to je pravda, a je to pravda Pro více technických důvodů
a že node.js a opravdu JavaScript je zejména
dobře-vhodný pro asynchronní kód,
pokud čímž vytvoříte iluze
dělat násobek věci najednou.
Takže, i když jsou skutečně děje sériově,
skutečně ve většině případů, JavaScript jak na straně klienta
a na straně serveru je jediný podproces.
Která, pokud užíváte 161 nebo dokonce 61 znamená, že -
tohoto programu vědět,
interpret může doslova dělat jen jednu věc najednou.
Ale to je není velký pro něco jako webový server
kde můžete mít desítky nebo stovky nebo dokonce tisíce
uživatelů všech, kteří se snaží Pro přístup k webové stránce
ve stejný čas.
A přesto, že naznačují, že jim manipulaci s jedním
po druhé po Vedle toho se v případě některých
z těch přání, jak jsme viděli, na CNN může vyžadovat podávání
až 300 souborů před vámi i dostat na dalšího uživatele
kdo chce vidět, říká zpráva.
Node.js je vhodnější pro prostředí, jako je to.
Protože to, co se stane, je jakékoliv pomalý běh procesu
jako je čtení souboru z disku nebo dotazování databáze nebo mluvit
do jiného síťového serveru,
, který má tendenci mít latence, že jo?
Pokud jste si vzít 61 nebo 161 zejména všechny tohoto druhu
periferních služeb mají tendenci být mnohem pomalejší
než dělat něco uvnitř stejný RAM a stejný CPU
že tedy v tomto případě Server je ve skutečnosti běží.
Ale to, co je hezké o node.js je, že můžete -
a JavaScript obecněji je, že můžete něco udělat
a pak řekl: "Hmm, toto se děje
aby se mi pár milisekund nebo dokonce i několik sekund.
Dovolte mi, abych trochu vidlice, že off, " ale to není pravda proces.
A pak, když se to dělá dělá že pomalý běh procesu
jako popadat řádky z databáze nebo čtení souboru. html
z disku, bude dostat zpět ke mně, spíše
než abych musel čekat na to.
Tak, aby to jasnější.
To je můj způsob takže to známější.
Dobře, tak to je Shake Shack na náměstí.
To je druh společné paradigma
pro vysvětlení asynchronicity.
To je skutečně dobrý například proto, že Shake Shack
a Chutné Burger jsou pozoruhodně zpomalit na to, co dělají.
Ale jde o to, že jsou opravdu dobrý při převzetí objednávky
a při své peníze po které budete čekat na jídlo.
Tak, to je ve skutečnosti lepší Konstrukce než alternativa.
Vzhledem k tomu, že bys chodit do obchod jako je tento, a máte
na přední straně linky a umístit Vaši objednávku a chcete
na hamburger, jak nejlépe dovedu říci, že trvá nejméně pět
nebo více minut vlastně si hamburger.
Tak, to by bylo trochu špatného obchodního modelu
pokud zatímco čekáte pro váš hamburger, Alice [předpokládat pravopis]
a Bob [předpokládat pravopisu] a Charlie [předpokládat, hláskování]
a všichni ostatní je ve frontě za vámi
a ty jsou doslova blokování linka čekání na jídlo.
Tak samozřejmě, na Shake Shack
a další fast food místa, nedělej to,
dělají něco takového.
Dávají vám bzučák.
A tak nějak poslat vás na vaší cestě.
A říkají vám zpět takže tento malý věc vibrovat
nebo blesk upoutat vaši pozornost.
Takže, je to doslova, co?
Něco jako node.js dělá.
Pokud node.js nebo JavaScript obecně se používá
a programátor je dost chytrý,
realizovat, "Víš co?
Cokoliv, co potřebujete udělat hned Tady by mohl mít určitý počet
milisekund nebo sekundách.
Víš co?
Nech mě jít dopředu a ne říkají synchronně -
"To je chlap blokování všichni ostatní v řadě, "-
nech mě jít dopředu a trochu krok stranou
a prostě říkám zpět
když tak dlouho běží operace je dokončena. "
A zavolat samozřejmě je zmiňovat v tomto případě
na funkci zpětného volání, odkaz na sklíčidle kódu
že bude vykonán když vaše hamburger je připraven,
podobně jako tuto věc mají některé druh funkčnosti postavena-in
že začíná nebo vibrační bzučení, když je čas pro vás
být volán zpět do přední linii.
Takže, co to znamená v reálných hodnotách?
No, musíme práci si cestu nahoru.
Takže, nech mě jít napřed a to jako první.
V serverové 1.js, dovolte mi, abych nejprve zjednodušit kód
takže můžeme vzít dítě kroky směrem více přesvědčivé problém.
To je přesně stejný program, který jsem napsal předtím.
Ale to, co se změnilo?
Je tu jakési mírné syntaktický rozdíl
mezi tímto a verze 0 před chvílí.
Co vyskočí na jste-li si vzpomínáte?
Jo, Cynthia [předpokládat, pravopis]?
[Neslyšitelný Poznámka]
Jo. Takže teď, máme linku z funkce byly přeneseny dovnitř
Jsme zbavili druhu
ze zbytečně jmenoval funkce handler.
Useless pouze v tom, že před dokonce volat na jednom místě,
Nemám opravdu potřebujete ztrácet čas dávat to jméno
a dělat to těžší číst kód shora dolů.
Takže, pojďme se jen prohlásit inline je anonymní funkce.
A já dělám dvě jiné věci.
Dělám lepší použití tečkové notace.
Tak jako v jQuery, hodně uzlu metody mohou být připoutaný spolu.
Takže jakmile budete hotovi volání něco, nemáte
čekat na nový řádek a volat jinou metodu,
můžete jen řetěz je dohromady.
A tak tímto způsobem, můžeme opravdu dotáhnout to.
Tak, to je doslova webový server na pěti linkách
z celkových kódu rozdíl -
rozdíl, co byste mohli normálně musíte udělat, nastavit něco nahoru.
Pokud jdu do serveru 2 Nyní, pojďme na to.
V serveru 2 - vlastně pojďme vrátit se k tomuto serveru 2.
Pojďme nyní otevřít async-0.js a řešení tohoto problému po ruce.
Takže první, pojďme dopředu a otevřené
up asynchronních-0.js v prohlížeči.
Takže async-0, nechte mě jít zpět do prohlížeče.
Hit znovu načíst.
A teď, je to druh chybového hlášení.
Ve skutečnosti jsem viděl 500 v Chrome inspektora.
Ale dovolte mi, abych přesněji požádat hello.txt.
OK. Takže, zdá se, že funguje.
Takže async-0.js nezdá se, že sloužit až něco lomítkem.
To nemá žádnou podporu výchozí soubor.
Ale když jsem výslovně požádat hello.txt,
že se zdá být podporovat.
Proč je to tak?
No, co jsem tady už
a provádí se provádí velmi jednoduchý webový server
která ukazuje, kde se asynchronicity mohou být užitečné.
A to je implementována následujícím způsobem.
Za prvé, já jsem s použitím Modul HTTP znovu,
ale i FS, které pravděpodobně znamená?
Obecně v CS, souborovém systému.
OK souborový systém.
Z toho plyne podobně FS, souborový systém.
Dobře, tak co to mi dal?
Funkce vztahující se k soubory, jako dostat prošel,
otevírání souborů, psaní adresářů, čtení adresáře
a všechny takové věci.
Takže teď nevšiml, tento kód je stejné jako dříve,
vytvořit server, kolem v anonymní funkce.
To je druh libovolný.
To není moc bezpečný webový server.
Ve skutečnosti, můžete získat přístup většina jakýkoliv soubor na pevném disku
nebo na serveru je těžké řídit spuštěním tohoto kódu
protože jsem jen slepě za předpokladu, že jdu
urvat co uživatel požadováno v URL.
A já jdu prefix s tečkou
takže jsem okrajově jsou bezpečné
tím, že říká, co soubor mohou Žádost musí alespoň začátek
v aktuálním adresáři.
Samozřejmě, že je to hrozba tady.
"Protože kdyby místo jsou co?
Ve své cestě, mohou druh z práce kolem toho příliš.
Dot, tečka, ne?
Takže, pokud uživatel právě dal tečku, tečka v adrese URL, teoreticky,
mohli začít se my - a říkají, soubor s hesly.
Takže, není to znamenalo, která má být zajištěna,
to mělo být jednoduché.
Tak tady mám proměnnou, která je zřetězení tečky
který je k dispozici seznam a požadavek URL
který jsme viděli před jako lomítko nebo / hello.txt.
Takže teď, že dostane trochu zajímavější.
Nejprve si všimněte na dno.
Poslouchám na stejný port jako předtím.
Takže skutečný zajímavé Práce je uvnitř zde.
Pokaždé, když se žádost Dodává se v od přírody
tohoto kódu, co mám dělat?
Volám soubor Způsob čtení souborů systému,
procházející v cestě že chci číst.
A teď, je to Co je zajímavé, tady,
je to tím, provádění v asynchronním způsobem.
Nemůžete získat návratnost hodnota ze čtení souboru.
V oznámení skutečnosti, že je no levý výraz
na levé straně čtení souboru.
To nevrací hodnotu.
Spíše, že volá zpětné volání fungovat, když je připraven
aby vám zpět odpověď.
Takže znovu, aby bylo jasné, zatímco v minulosti,
v mnoha programovacích jazyky, pokud byste chtěli
číst spisu v bodě PHP,
soubor podtržení se zdůrazňují obsah,
Máte levý výraz ve všech hodnot po -
před rovnítkem, to znamená, že jste přiřazení
do této proměnné návrat Hodnota této funkce.
Můžete to udělat v node.js, ale ty mají obvykle
volat explicitně synchronní verze funkcí rád,
Myslím, že to číst synchronizace soubor nebo synchronizace číst soubor.
Zapomněl jsem, jak se jmenoval jej.
A že by se dát Jste návratová hodnota.
Ale v případě, že soubor je na nějaký vzdálený systém souborů
nebo disk je jen přirozeně pomalý, to bude trvat asi 10 milisekund
nebo 2 sekundy po dobu tohoto souboru skutečně vrátit.
Mezitím, žádný jiný web Návštěvníci jsou obsluhovány
vaše websit.
Ty blokování.
To je to, co se nazývá blokování IO, vstup / výstup.
Tak tady to je mnohem chytřejší.
Vzhledem k tomu, co node.js se děje
dělat na tlumočení je následující,
to bude volat metoda čtení souboru,
se snaží jeden až spisu, který se dostal Cesta zadaná hodnotou P.
A pak, zda a kdy je připraven aby vám zpět obsah
ze souboru P, bude volat funkce, jejíž podpis je
konvencí následující.
Dva argumenty, první což je snad objekt Error,
hlavní město E, je to objekt volal Chyba nebo Null
v případě, že žádná taková chyba.
A druhý argument - se odhad - bude co?
Říká se údaje samozřejmě, ale co je dat konkrétněji?
Obsah >>?
>> Obsah hello.txt v příkladu I vytáhl
v mém prohlížeči před chvílí.
Takže jinými slovy, číst soubor a mnoho funkcí node.js
jako na nevrací hodnoty.
Říkají zpětná volání a předat
k těm, co by se zpětná volání byly tradičně
vrátí hodnotu.
Výhodou tohoto přístupu je,
které by se dalo nazvat číst soubor a T0.
Funkce zpětného volání síla nemůže být nazýván jedním klíště později
tak říkajíc na T, je by mohlo být nazýváno T1000,
tisíc klíšťata později.
Ale jde o to, že Zbytek kódu v tomto souboru,
případně by okamžitě být provedeny při node.js
a zatímco souborový systém zjistí, jak číst
tento soubor a získat zpět k vám.
Takže si vytvořit to -
tak efektivně iluze
paralelismu při pronájmu pomalejší běžící procesy není
blokovat důležité věci, část, která servisní uživatele.
Tak, jak jsme zvládnout?
To je velmi časté node.js paradigma.
A je tu způsob, jak jen zjednodušit To je uvidíme před sebou.
Poprvé jsem zkontrolovat, zda Chyba není null.
Takže, pokud to není falešný poté došlo k chybě.
Nevím, co to je, Možná soubor neexistuje.
Jsem neměl oprávnění.
Cesta je v pořádku.
Libovolný počet věcí by se mohlo pokazit.
Pro tuto chvíli, já jdu libovolně vrátit 500
což je vnitřní chyba serveru.
Něco je špatně.
Já opravdu nestarám ji diagnostikovat.
Takže, pojďme se prostě říct, uživatel je to rozbité.
A pak, já jdu dělat res.end,
a to je zkratka zápis.
Připomeňme, že poslední Když jsem dělal res.write
a pak jsem udělal res.end.
Pokud se chcete pouze zaslat jeden řádek výstupu,
můžete prostě udělat to všechno najednou s res.end s argumentem,
a že to bude odeslání co se chybová zpráva
uvnitř tohoto objektu do prohlížeče.
To bylo docela oblouku vzpomínám před chvílí.
Nemám ponětí, co to znamená na první pohled.
Ale když jsem požádal soubor, který neexistoval -
pardon, musíme spustit Server znovu.
Když jsem požádal o souboru že neexistovala, EISDIR,
takže něco o tom, to je adresář,
když jsem udělat nějaký náhodný string tam,
zřejmě to znamená, že soubor ani neexistuje.
A to proto, že můj kód je prostě říká psát
se bez ohledu na Raw Chybová zpráva je,
takže není příliš uživatelsky přívětivý ale aspoň jsem to manipulace.
Jinak, pokud to není chyba, co dělám?
To samé jako předtím rožni z 200 OK, prostý -
text / plain typ mysl a pak vyplivnout data.
A to je důvod, proč jsem stále Obsah hello.txt, které právě
potvrdit, když jsem se podíval na hello.txt,
je to doslova jen ahoj, svět.
A když jsem změnil to ahoj, svět, uložte soubor,
znovu na server, obnovte stránku.
Teď jsem si tuto verzi.
Takže jsem opravdu jen reimplemented webový server
jak je již mnoho let, ale pomocí node.js.
Ale můžeme to udělat ještě čistě.
Dovolte mi, abych otevřela async-1.js.
Nyní si všimněte, jsem dodal další modul tentokrát
zřejmě modul cesta.
Nyní, to je dobrý příležitost se podívat
na to, co dokumentace vypadá.
Node.js je dokumentace.
Stejně jako PHP Myslím, že je vlastně docela dobrý
a přímočará.
Pokud jdu do node.js a Google a hledat node.js cestu,
to, co uvidíte, se obvykle je přímý odkaz na adresu URL
že jsem dal sem před chvílí.
Tak / api je oficiální místo jít na dokumentaci.
A to, co uvidíte v horní části
oficiální dokumentace uzlu je všechny metody a
nebo vlastnosti vnitřek tento konkrétní modul,
z nichž jeden se nazývá spojení.
A spojení je pomocná funkce že mi bude, aby
že nebude obtěžovat s všechny plusy.
A to se přidal bonus, jak uvidíte,
od doků je také normalizuje výsledné cesty.
Takže, pokud uživatel nebo máte tečky nebo dot tečky nebo jakákoliv jejich kombinace
z těchto druhů relativní cesty, mezi upsides
této metody je, že se připojil to bude čistit vše, co se
a dá vám kanonický Cesta bez jakékoliv
z těchto bodů nebo dot tečky.
Takže, je to dobrá věc obecné bezpečnosti alespoň
pokud máte kontrolu vrátí hodnotu, která nejsem
V tomto jednoduchém případě.
Ale chtěl jsem ho použít.
Tak, teď jsem vytvořit cestu k trochu programově
s path.join místo Raw zřetězení.
Tak, to je trochu čistší než dříve.
A teď Všiml jsem si, že jsem trochu inteligentnější spíše
než jen slepě pokusit se přečíst soubor,
Chystám se skutečně zavolejte fs.stat.
Takže, pokud jste obeznámeni
s low-level C funkce a C, dokonce i PHP.
Mnoho knihoven má Tato funkce stat vrátí
v podstatě statistiky na souboru, velikost souboru,
oprávnění, název a podobné věci,
a také implicitně, pokud soubor existuje, nebo ne,
a pokud je to soubor nebo adresář
nebo symbolický odkaz nebo něco jiného.
Takže teď nevšiml, že jsem volání fs.stat.
A pak zřejmě podle k dokumentaci,
Měla bych se vrátit omylem objektu
nebo Null následovaný o statistiky objektu.
Ale pojďme zkontrolovat, node.js.fs.
Zde je soubor Dokumentace systému.
Podívám se na statistiky.
Je tu mnohem víc funkcí zde.
Jejda, to stat synchronizace, fs.stat.
Tak tady je to asynchronní statistiky (2).
To je, pokud to znamená pamatovat z hlavní stránky,
kapitola 2 hlavní stránce,
to znamená, že to je doslova jen implementace uzlu
na nízké úrovni Funkce systému stat.
Takže, callback dostane dva argumenty, chyby a stat
kde stat je fs.stats objektu.
Takže pojďme se podívat, co se tento objekt má vypadat.
Pojďme klepněte na hypertextový odkaz a vidím, že.
Statistiky objekt obsahuje zřejmě nějaký pomocná metoda,
je soubor, je adresář, je spoustu dalších věcí.
Je to "je" soubor, který mi záleží o v tomto konkrétním případě.
Tak jsem tady.
Pokud došlo k chybě, pak dovolte mi, abych jen zachraňovat tentokrát
a převzít.
Pokud je to chyba, je to asi 404 soubor nebyl nalezen.
Mohlo by to být něco jiného
ale já jsem byl trochu líný zde jen soustředit
o další zajímavé detaily.
Ale pro uživatele účely, soubor není nalezen,
v případě, že byla nějaká chyba s uvedením soubor.
V opačném případě mi dovolte, abych zkontrolujte, zda soubor je skutečně aktuální soubor.
Takže pokud to není soubor existuje.
Něco tam je, ale je to pravděpodobně adresář
nebo možná symbolický odkaz
nebo něco jiného, ​​co je funky v souborovém systému.
Ať tak či onak, uživatel by ho neviděl.
Takže teď, já jsem prostě jít plivnout
se obvykle neoprávněnému 403.
Ale opět jen konvence,
Mohl jsem použít něco v teorii.
A pak konečně, dovolte mi, abych zkuste si přečíst soubor.
Takže mi dovolte, abych přejděte dolů.
A teď nevšiml je místo, kde kód může být trochu chaotický,
Všimněte si, že volám fs.readFile absolvování
ve stejné cestě, stejný callback jako minule,
takže předchozí verze.
A pak, pokud bych najít -
když jsem se ji najít, I vyplivnout 500.
A když jsem to najít, co linka se budeme k vidění?
Budeme vidět fs napsat hlavičku 200 pravděpodobně
a res.end odeslání Skutečná data.
Ale nevšiml.
A to není demonstrativní v nejhorším případě.
Ale já mám tento stat volání tu, než jsem si nějaké věci.
Pak mám další asynchronní volání zde,
tak více odsazení.
Takže, jen tak extrapolovat pokud byste mohli odsud.
Jaký problém má tendenci nastat s jazyk jako JavaScript
v tomto prostředí, kde nemáte návratové hodnoty
ale máte tato zpětná volání.
A samozřejmě, je to jen stylová věc skutečnost
že jsem se držet odsazování.
Ale vzít na dalším logickým krokem.
Předpokládám, že tam byl jeden nebo dva nebo tři další funkce
které jsem potřeboval k provedení, které byly podle přírody asynchronní,
a proto jen trochu držet odsazení s nimi pracovat,
s nimi pracovat, zabývat se jimi.
Získáte druh zpětné volání sakra, jak lidé říkají
kde začíná váš kód získat velmi široký
a upřímně řečeno opravdu těžké číst.
Jak to je, můžu nějak sotva říci, že toto je druh proudu
že má tento druh
z stylisticky úhlová co se děje tady.
Takže, to není ideální, protože to může velmi rychle stát
nepraktické, i když dva asynchronní volání není
jako velký problém.
Takže, mohli bychom se tomu zabránilo, že jo?
Možná jste zahlédli, že I misclicked před chvílí.
V dokumentaci, víte, vypadá to, že je statSync.
A statSync nebere zpětné volání jako argument.
To trvá jen cestou, protože to zřejmě dělá co?
Vrátí instanci z fs.stats.
Takže to může být vaše první instinkt, že jo?
Zvlášť pokud callback funkce
a je asynchronicity pro vás málo nového, upřímně řečeno,
Nejjednodušší přístup je pravděpodobně jen problém vyhnout se všem
společně, vraťte se do třídění programování CS101 stylu
kde budete volat funkci nebo metoda vrátí hodnotu,
volání funkce, vrátí hodnota,
Funkce vrací hodnotu.
A mohl bych použít proto fs.statSync
který je doslova stejný ale je to synchronní verze
což znamená, že se vrátí hodnota.
To neprojde cení na zpětné volání.
Ale proč by to pravděpodobně suboptimální řešení uchylovat
na synchronní funkci?
Jo?
[Neslyšitelný Poznámka]
Přesně tak, to trvá dlouho.
Jenom zpomalení všechno dolů.
Vzhledem k tomu, stejně jako Shake Shack nebo Chutné Burger, pokud se zbavili
ty bzučáky a učinili jsme z vás, zákazník stojí v čele
řádku, dokud vaše jídlo je připraven ještě předtím, než brát objednávky
osoby za budete zřejmě
prostřednictvím put zpomaluje.
Lidé začnou opouštět, jste trochu kreslit paketů.
Můžete vytvořit libovolný počet analogií zde.
Ale ve zkratce, je to asi není dobrá věc
pro podnikání nebo pro server.
Takže asynchronní kód obvykle dobré alespoň
v tomto případě, ale rozhodně to začne způsobit pocit úzkosti.
A v tom, troufám si říci, kdy První psaní této věci,
to bude trvat trochu trochu zvykat.
Takže, pojďme začít vybavit jste s některými knihovnami
a techniky, aby se to trochu jednodušší.
Takže, jeden z nejčastějších Knihovny jsou populární knihovny
v těchto dnech, to jeden volal async.js.
A stejně jako mnoho node.js knihovny nebo moduly,
To vše jsou open source.
Téměř všichni žijí a získat náboj úložiště, které je druh
z stala de facto místo pro uložení těchto věcí.
A pak je tu Celá infrastruktura
Pro instalaci těchto věcí volal NPM, Node Package Manager
která, pokud jste obeznámeni s EvanTube je druh
ze jako aplikace nebo aplikace dostat.
Pokud jste obeznámeni s Red Hat a Fedora
jak je v zařízení, je to jako yum.
Ale je to uzel - to je správce balíčků jen
pro tento konkrétní prostředí.
Takže, můžeme stáhnout a nainstalovat věci, jako jsou knihovny asynchronní
a také ještě jeden s názvem podtržítko knihovnu nebo modul.
Ale tyto, jak daleko fs, HTTP, cesta,
to jsou všichni přišli postaven do uzlu.
Takže pokud půjdeme do docs API, budete skutečně vidět, že vestavěný
do uzlu dostanete zdarma Celá parta modulů.
Ale spousta milých lidí na internet dělali desítky
ne-li stovky další knihovny
lépe dělat věci nebo jinak.
Takže, pojďme se podívat na jak tato knihovna funguje.
Takže, většina z tohoto kódu je shodný pro tuto chvíli.
Mám cestu bytí vytvořen až nahoru.
A teď volám async.series.
Takže knihovna asynchronní, je to jen knihovna, která vám umožní
předat nebo zvýšit typicky funkce, aby se tzv. jeden
po druhé jen na živočišném druhu zabránit tomu, aby odsazení problému,
a opravdu jen duševní pocit úzkosti, že bude vždy vznikat
alespoň při prvním ponořit se na vlastní pěst
s programováním asynchronně.
Stejně jako v stranou, pokud jste si vzali 161 a vy jste se zabýval zámky
a zvýšit podmínky a všechny toho, asynchronního kódu
a životního prostředí, jako node.js je ve skutečnosti mnohem,
mnohem jednodušší pravděpodobně
než ve skutečnosti psaní podprocesy kód.
Kdykoliv máte podprocesy kód,
máte vyvolávají podmínky.
Musíte se starat o dvě vlákna obsahující
ze stejných zdrojů, disku nebo v paměti.
Krása JavaScript
v node.js je tu doslova jen jedno vlákno,
což znamená, že prohlížeč
nebo pouze server může dělat jednu věc najednou.
Je to jen na vás, programátor
udržet mentální model jak si trochu fronty věci
a přijít na to, jak na objednávku kód.
Ale už nikdy nebudete muset starat o zvýšení podmínky
ve zcela stejným způsobem na alespoň s Raw kódem, jako je tento.
Takže je to trochu těžko grack zde.
Ale - Takže dovolte mi otevřít jsou dokumenty pro chviličku.
Async.js knihovna, která Stejně tak je velmi googleable,
žije v GitHub repot jako hodně z nich.
Nemyslete si, že je to povrchní, že to není.
Dovolte mi, abych přejděte dolů do Read Me zde.
Takže, knihovna async poskytuje spoustu
metod uvnitř ní.
Například, tam je metoda s názvem každého z nich
který když klepnu to jen vidět své dokumenty na chvíli,
Jedná se o funkci nebo způsob , který vám umožní dělat něco
jako čtyři každého ale paralelně.
Jsou to všechno se bude dít potenciálně paralelně.
A způsob je každý jen chystá se vrátit k vám, když všechny
z iterace jsou kompletní.
Takže možná, že se stalo jeden po druhém.
V ideálním případě, že stát, v podstatě paralelně.
Ale tato metoda není zavoláme zpět.
To není bzučet vaše bzučák, dokud se všechny
z prvků, které máte opakoval po dokončení.
Takže, je to jen příjemný způsob,
jak se vyhnout použití jednoduchý čtyři smyčky
ale ve skutečnosti dělá něco asynchronně.
Ale teď ještě přímo vztahující se k tomuto příkladu,
Všimněte si, že je to Metoda série.
A dovolte mi, abych jen vytáhnout nahoru jednoduchý kanonický příklad.
Takže async knihovny, řada Metoda bere se jako implicitní
hranatými závorkami v poli.
Jaké jsou údaje typy prvků
v tomto poli na bázi na jednoduchém příkladu?
Jedná se o řadu funkcí.
Takže v C, měli byste zavolat je funkce ukazatelů.
V JavaScriptu existuje více správně odkazuje k funkcím
nebo anonymní funkce.
A to jen znamená, že pole
Samozřejmě se objednat z na nahoru nula.
Tak, oni udržovali pořadí, které je dobré
pro sérii, protože řada samozřejmě znamená něco udělat
aby nedošlo paralelně.
Tak, to jen znamená, že tato funkce bude vykonán,
pak se tato jedna, pak se tato jeden, tohle, pak tohle,
nicméně jich je
až nakonec volitelný callback je volána.
Takže, všimněte paradigma zde.
A to i přesto, je knihovna, jeden člověk je,
je to zástupce velmi časté JavaScript paradigma
znovu pomocí zpětných volání.
Takže, všimněte si, co tady děláte.
V první funkcí je prošel v roce prostřednictvím tohoto pole,
jste definovali v anonymitě Funkce jen s funkcí.
Ale upozornění, že zřejmě podle této dokumentace,
že anonymní funkce by přijmout argument, zpětné volání.
To bude ukazatel nebo odkaz na funkci
že byste měli zavolat, když vaše kód je připraven vrátit hodnotu.
Takže znovu, na rozdíl od právě typicky procedurální programování
kde jste zvyklí okamžitě vrací hodnoty
že jeden rozdíl pomocí knihovny takhle
v asynchronním programováním více obecně, je, když jste připraveni
vrátit hodnotu z databáze ze souboru,
z aritmetického výraz, je to na vás
volání funkce zpětného volání.
A pěkná věc o této knihovně
pokud budeme číst dokumenty pečlivěji je, že,
tehdy a jen tehdy, pokud všechny Oblast zpětná volání nazývají
bez objektu Error, bude celá věc podaří?
Takže jinými slovy, v případě, že jsou 2,
v případě, že jsou 10 anonymní funkce
v tomto poli proto v této sérii,
pouze tehdy, když všechny z nich uspět,
bude konečné volitelné zpětné považovat za úspěšný?
Pokud někdo z nich selže každá funkce
poté, co nebude i být provedeny.
Tak, to je hezký způsob, jak třídit ze s daisy chain
že přeruší předčasně pokud se něco pokazí.
Takže to vidět v kontextu, zde je to, jak bychom mohli znovu zavést
že předcházející program.
Já si cestu jako dříve, tak to je snadné.
I kopírovat vložte tento kód kostra
z dokumentace tam async.series otevřené závorka,
otevřít hranatou závorku.
A teď Všiml jsem si jednoho funkce v tomto začátku
sekundy, uvidíme kde jsme se jít z toho.
A teď Všimněte si, že je to trochu složitější na prvním místě
ale zaměřit se jen na je řádek po řádku.
Fs.stat znamená, že se statistiky nebo co ne o této cestě.
Nazvěme to zpětné volání, když je připraven.
Tento kód je stejný jako dříve.
Pokud je chyba, je tu jeden rozdíl hned.
Opět platí, že velmi časté paradigma v node.js programování je
když se něco pokazí a zpětné volání potřebuje vědět
že podle konvence, první Argument na zpětné volání se děje
, že ne, pokud je vše v pořádku, nebo odkaz k objektu Error,
kapitál E. Je to jako chybu Třída, která existují na celém světě
ale o tom více jindy.
Takže tím, že dělá to, v případě, že je chyba, co je implikace?
No na základě toho, co jsem řekl série dělá,
Je-li cokoliv špatně, jen trochu chtít
zrušit celou řadu o anonymní volání funkce.
Tak, to stačí pro mě jen vrátit zpětné procházení
V objektu Error.
Protože pokud stat dal me zpět k chybě,
Mohl bych vytvořit nový Chyba předmětem mé vlastní,
ale já opravdu nestarám se,
Chci se jen projít bez ohledu na Chyba je, že ve skutečnosti se stalo
takže mohu předat ji této zpětné volání.
A jen aby bylo jasno, návrat není nezbytně nutné.
V podstatě chci to udělat ale chtěl jsem se to "vrátit;
/ / Tak, že ne více Kód zde provádí ".
Takže opět další společné konvence v JavaScriptu,
i když nejste vrací hodnotu samo o sobě,
Chcete-li předat hodnotu funkci zpětného volání
ale pak budete chtít k zastavení provádění
funkce, kterou jste v, triviální, jak
jak to udělat, je jen volat sem vrátí.
Ale není nic špatného,
máme jen to, zpáteční zpětné volání chyba, i když to bude
vrátit se do nedefinované hodnoty.
Dobře, to není vrátí hodnotu nejpravděpodobnější.
Vše, co je zajímá, jsou stravování další provedení.
Takže, můj Sjednocení těchto dva řádky je jen stylista
konvence jen mají číslo linky
kódu jsem napsal 2-1.
Takže co jiného?
V případě, že to není chyba -
ve skutečnosti, že je jasné, Mohl bych také vyhnout
že tím, že dělá-li jinak.
Ale zase, další společné paradigma je kontrola
pro vaše chyby až nahoru a pak jen vrátit spíše než pokračovat
odsazení kódu s elses a elses a elses.
Takže pokud to není soubor, teď, víte,
Chci zvládnout Trochu speciálně.
Tak tady jako v jazyce Java nebo C + + nebo několika dalších jazyků,
Zde je návod, jak můžete vytvořit instanci objekt typu chyby procházení
ve výchozí zprávě ne soubor
a to je jen poněkud arbitrární.
Ale já signalizace chyba z mé vlastní.
A to, co dělá tento poslední linka pravděpodobně znamenat?
Všechno je v pořádku.
Pokud předáte hodnotu null pro parametr chyba, že prostě znamená,
podle konvence všechny je dobře.
Takže, to znamená, že to, co se stane logicky?
Pokud je předán null na zpětné volání
to znamená, že tento anonymní Funkce se podařilo
abych tak řekl.
Takže, co by řada metoda předchází a nyní se na základě
na mé verbální definice dříve?
[Neslyšitelný Poznámka]
Přesun na další jeden, ne?
Pokud by se vrátil nenulový hodnota, to by prostě zrušit
a ne více anonymní Funkce by se nazývá.
Ale protože to nemá, pak to se nazývá další.
Takže, logika je zde skoro stejná jako před
a uvidíme, jak se čistí to si ještě chvíli.
Vím, že to je docela hodně
absorbovat všechny verbálně a vizuálně.
Ale teď nevšiml, druhý anonymní funkce, které chci
provádět v sérii je pokusit se přečíst soubor.
Nazvěme to zpětné volání když jste připraveni.
Pokud je chyba, jen signál je prostřednictvím zpětné volání
tak, že zbytek tohle přeruší.
Else return null.
Ale proč mám kolem ve dvou argumentů?
No to čas, pokud jsem četl soubor a získat zpět
jako proměnná s názvem údaje,
Chci to jen znamenat vše je dobře vrací null
Jako první argument.
Chci se vrátit aktuální údaje jako druhý argument.
Protože když jsem číst dál v dokumentaci,
Všimněte si tuto poslední kus kódu hranatá závorka znamená, že je
konci řady.
Byly tam jen dva anonymní Funkce v této sérii.
Pokud došlo k chybě tady, pak Vím, že jeden z odkazů
v tomto řetězci tak, mluvit se nezdařilo.
Takže jinými slovy, tato chyba bude objekt Error
že je null, pokud některý ze tihle kluci se nezdařilo.
A pokud je to pravda, jsem jen jít na kauci ven a jdu
říci, 400, které znamená, že žádost o selhání,
To je velmi obecný chybové hlášení.
A pak, já jdu vytisknout chybovou zprávu.
Takže, já nejsem obtěžoval být super anal tentokrát,
Nebudu rozlišovat mezi 500 a 404 a 403,
Jsem jen trochu slepě vlna mě za ruku
a říci něco pokazilo.
Ale pokud se nic dělal pokazit,
Jdu to poslat res.end předávání těchto údajů.
Teď to vypadá trochu záhadné.
Ale na druhou stranu, pokud jsem četl dokumentace,
Druhý argument Tento konečný, závěrečný callback,
chlap, který je pouze proveden jakmile řady se provádí
provádění nebo část tam z, tato bude pole
ze všech druhých argumentů
které byly předány na zpětné volání.
Nyní se ukazuje, že pouze odkazují v této sérii
že vlastně návrat do druhé Argument je to jeden tady.
Takže budu druhu na skok víry jednoduše použít předpokládám,
na chvíli, že Poslední je metoda
který vám dává poslední prvky pole.
Protože tato pole že to byly přeneseny
pro mě má dvě Indexy, nula a jedna.
Je to jen nula nemá žádnou hodnotu protože ten chlap se vrací -
nepřechází do druhé argument, ale ten chlap dělá.
Takže výsledky držák nula není nic,
Výsledky držák jeden obsahuje to, co,
pokud jste po spolu až do tohoto bodu?
Soubor, ahoj, svět obsah všeho,
tak to je, jak jsem se vlastně vytisknout.
A dovolte mi dokončit jeden detail zde.
Pokud se mi tento druh starý Škola, jestli chci, aby se
v posledních prvky, kdybych mohl dělat výsledky [results.length-1],
to je druh old school způsob
přístupu poslední prvky v - nebo nulový index pole.
Ale jak ve straně, připomínají že jsem tuto knihovnu
tady podtržítko, které by konvence je právě volal
doslova podtržítko znak, který není zvláštní,
to prostě vypadá skvěle, jako znak dolaru dělá pro jQuery.
To je jen pomocník Metoda zdůraznit tečku poslední
že dělá přesně to, totéž.
A pokud jste nikdy nepoužíval před podtrhnout JS jak
na straně klienta kódování
a na straně serveru je nádherně užitečná knihovna
že tolik lidí je popsáno to rád jQuery obsahuje všechny
metod, lidé si přál přišel se sám JavaScript.
OK.
>> Tak, jako docela se mi a Díval jsem se v seriálu,
máte jako zpětné volání jako argument?
>> Ano.
>> Stejně tak, když se vlastně jako tlak, který v roce,
a jako to, co to dělá na mysli, když stačí mít
jako callback a pak se mi líbí -
[Neslyšitelný Poznámka]
>> OK, dobrá otázka.
Takže mi dovolte, abych vytáhnout async hlavní stránka zde
nebo dokumentace GetHub.
Tak tohle je kanonický struktura.
Pokud hovor pomocí tohoto zejména metoda řad,
jsou dva velké součástky.
Jedním z nich je řada anonymní funkce
a dva je konečné zpětné volání funkce, která je ve skutečnosti
proveden na velmi konci řady.
Teď, když jsme se přiblížit na první trochu blíž
z těch velkých věcí, řada anonymních funkcí
podle požadavků tohoto Dokumentace chlap má
být anonymní funkce, která vezme
v jednom argumentu tzv. zpětné volání nebo foo nebo bar, nezáleží na tom,
ale on volá to callback.
A to je druh vašeho bzučáku že Shake Shack vás ruce.
Jedná se o prostředky, které můžete vrátit hodnotu
k zákazníkovi, protože vám Nemůžete prostě doslova vrátit.
Musíte to udělat způsob, jak tohoto zpětného volání.
Vzhledem k tomu, v případě, uvnitř této Funkce je nějaký pomalý běh
kód jako databázi dotazů, přečtěte si soubor ze souborového systému,
nechcete, aby tam čekat a blokovat všechny ostatní,
Chcete-li volat na zpětné volání.
Tak, to je doslova název argumentu.
Ale jako v C, je mají ukazatele na funkce.
V Javě máte referenční metody systémové
a totéž tady v JavaScriptu.
To je proměnná, ale jeho typ funkce.
Takže jednoduše tím, že píše jeho jméno zda zpětné volání nebo foo
nebo bar, pak otevřete závorka a zavřít závorka,
jste provedení, které na tuto funkci.
A kolem null, který znamená, null chyba a jeden
což znamená, že se jedná o Údaje, které chci předat palců
A pak kus, aby bylo jasné, To je další zpětné volání.
A není to tzv. callback,
je to jen koncepčně je metoda callback funkce
proto, že se nazývá podle definice
knihovny tohoto autora, když Celá série byla dokončena
nebo jejích podskupin, pokud Chyba se stalo dříve.
Takže, název funkce zpětného volání, volání funkce zpětného volání,
název funkce zpětného volání, volání funkce zpětného volání,
jiný zpětné volání fungovat dohromady.
>> Nyní máme jako definovat zpětné volání?
>> Ne, protože ten chlap přejde do pole
o anonymní funkce,
ukazatel na kód chce vykonat.
Přesně tak, v pořádku.
Takže, prosím, říci, že Kód je trochu jednodušší.
Takže, je to možné.
A pokud jste stejně jako já, se komfort alespoň vědět,
to chvíli trvá, než zvyknout si na to.
Ale můžeme čistit to se trochu,
Není příliš mnoho hodit na pro vás ale tady je další varianta
a jeho použití jiné metody
ve stejné knihovny s názvem vodopád.
Vzhůru, z nichž je Na rozdíl od řady, pokud je každý
z těch anonymních funkce popraven v podstatě
nezávisle na každý z ostatních.
Vodopád jako název napovídá, umožňuje na nejvyšší FUNKCE
tak nějak projít v hodnotách na spodní funkci,
Něco jako kaskádu vody.
Takže vzhůru na to je, že můžu trochu
ze použít ve svůj prospěch.
V async.waterfall, Všimněte si následující.
Mohu jen zavolat fs.stat procházející v cestě
že chci, aby se statistické.
A pak si vzpomeňte, než jsem měl anonymní funkce
že měl dva argumenty chybovat,
ÝSLEDKY a pak jsem volal funkce zpětného volání ručně?
Jinými slovy, je prostě být jasné, připomenout, že dříve
v async 2, udělal jsem vše této ošklivé práce.
Zavolal jsem fs.stat prošel v P,
prohlásil můj vlastní anonymní funkce.
Pak jsem zkontrolovat, zda chyba je není null a pak jsem to udělal,
jinak jsem si, že se celá Krása z následujících úmluv
jako v node.js je, že zpětné volání funkce obecně slouží
aby se alespoň jeden argument, objekt chyby následuje nulou
nebo více užitečné hodnoty.
Takže si všimnout paradigma zde,
Tento callback funkce jsem prohlašuje takto přesně
paradigma, že tento člověk je async knihovna dělá.
Což znamená, že to, proč jsem I provádí svůj vlastní zpětné volání
metoda, kdy autor tohoto Knihovna je mi doslova podal
na talíři, abych tak řekl, callback funkce mohu použít?
Takže můžu jen předat reference on mi dal
tak, aby bezprostředně, moje několik řádků
Kód stal jeden řádek kódu.
Nyní, kam půjdeme s tím?
Další funkce, která Chci spustit,
další anonymní funkce v tomto poli
funkcí dělá následující.
Upozornění nejprve stat je První argument.
Takže něco, co má změnit již.
Teď to chlap, který napsal knihovnu -
a já říkám, že toho chlapa protože je to chlap.
Ten chlap, který napsal tuto knihovnu je dokumentace záruky
, že v případě, že funkce zde mi předá zpět objekt Error
nebo null následuje koma oddělený seznam jiných hodnot,
bude ujistěte se, že ti, ostatní hodnoty jsou rukou
k tomuto anonymní funkce v pořadí zleva doprava.
A to, co býval jen callback funkce sám jednoduše
se poslední taková argumentace.
Teď nevím, kdo jsem se zaměřením na jen ty víš.
Ale teď, co je vzít tu?
Takže, víme z dokumentace
nebo před pár příkladů
že fs.stat nakonec očekává, Zpětné volání se dvěma argumenty,
objekt Error, který je Objekt Error nebo null následuje
odkazem na statistiky objektu.
Takže když jsem si o tom myslíte, Chyba objektu kóma statistiky námitky,
který se vejde do paradigmatu knihovny této osoby.
Takže, můžu jen říct, protože Jsem ani druhý argument
že je to - že se děje které mají být předány podle fs.stat
na zpětné volání je err, statistiky podle definice tohoto knihovny,
Můžu dát druhý název argumentu je zde
nebo co mohu přejmenovat
pokud chci následovat o zpětné volání.
Takže, můžu projít jeden cení odsud sem.
Nyní jsou všechny tohoto kódu však sice poněkud záhadný je
alespoň kopie pasta pro největší část z období před rokem.
Jediný rozdíl je v oznámení Zde jsem prohlásil chybu
objekt, a teď chci získat trochu milovník.
Vlastně chci vědět, co Chyba byla, takže budu
zastrčit dovnitř tohoto objektu A vlastnost libovolně nazvaný kód
takže vím, že to není soubor
které by měly být neoprávněné, je to HTTP 403.
Dovolte mi připomenout, že před I předat objekt Error
na zpětné volání.
A pak se konečně pokusit se číst soubor, takže v tomto případě,
vodopád, jsem zlomený Kód ze dvou velkých krocích
do tří menších kroků.
Všimněte si krásu tady,
Můžu zavolat fs.readFile procházející v cestě.
A pak ta těžší část psychicky, je, že jsem jen projít
V chlapa zpětné volání.
Věc, kterou mi podal, jsem jít projít do fs.readFile.
Vzhledem k tomu, že jsme všichni držet na stejné konvence,
První argument na zpětné volání je objekt Chyba nebo null následuje
podle komatu nebo oddělené Seznam užitečných věcí.
Takže, co to teď, a pokud znamená, že Přečtěte si dokumentaci, budu vědět,
to, úplně poslední zpětné volání, ten chlap tady venku
z hranatých závorkách se děje které mají být předány v Error objektu
nebo null, který bych měl zkontrolovat jako vždy s tímto kódem zde.
A pak samozřejmě této metody
v dokumentaci k chlapovi, poslední vrácená hodnota
z posledního metody v mém anonymní pole -
můj řada anonymních funkcí.
Takže, co si návrat soubor
a já jsem s použitím návrat volně nyní.
Mám na mysli to, co se číst soubor průchod jako argumenty
metody zpětného volání jeho rukou?
Dva argumenty, první je objekt Error, nebo null,
to je téměř vždy bude odpověď.
A druhá věc se děje na to, co pro čtení souboru?
Obsah souboru, údaje tak, jak jej nazývají dříve.
Takže tím, že se omezila na prohlášení ehm, mít za následek,
a zkontrolujte, zda chyby tohoto je druh nyní nudné.
Jinak, já res.end procházející v tomto výsledku.
To bude nepochybně ne synchronizovat v dokonale
dokud se skutečně napsat sami.
Ale teď, se ve vzdálenosti alespoň skutečnost
, že je to zřejmě společné paradigma, přičemž pokud se
a autoři knihoven všechny druh hole
s touto úmluvou metod zpětného volání.
A první argument je objekt Chyba nebo null.
A druhý a třetí
a čtvrtý objekty jsou věci, staráme se o, a my třídit
o dodržovat pravidla a dokumentace.
Začali jsme s kódem, který upřímně řečeno, je docela ošklivá.
A to i přesto, že poslední Příkladem je upřímně řečeno docela těžké
zabalit svou mysl kolem, to je alespoň opticky,
Vypadá to, že je to mnohem pevněji.
A jakmile se dostanete pohodlně s tím, že je to tak mnohem jednodušší
a je to tak mnohem méně náchylné k chyby, než té předchozí příklad.
Takže mi dovolte, abych prokázat poslední věc zde.
Toto je verze tři.
A - No, nechme tahle sám.
Nech mě jít do několika další poslední věci jako oříšky.
Dobře, tak v serveru 2.
OK. Za prvé, jakékoliv dotazy, Vím, že to je hodně
ale chtěl víc pokyny, tak?
Neřekl jsi dobrý Instrukce nutně.
Jo?
[Neslyšitelný Poznámka]
Správně, ty jsi v podstatě shovívavý k operačnímu systému
přijít na to, jak se žonglovat všech těchto míčů najednou,
čtení ze souboru, čtení z databáze.
A to je danému serveru JavaScript sama o sobě, že je to jediný podproces.
A v podstatě, a ve skutečnosti,
je tam jeden obrázek Nechtěl jsem zvracet,
a to není nutně vše, co poučné
ale možná dáme Jste duševní modelu.
JavaScript sám a uzel
zejména se to tzv. event loop.
Přičemž můžete myslet z node.js, program,
Je doslova jako nekonečné smyčky.
Je to jen divoká smyčka, čeká a čeká a čeká,
hledá pro úkoly dokončit.
A úkol by mohl být, jít přinést něco z databáze
nebo tady je hodnota z databáze nebo jdi tento obrázek
z disku nebo tady požadovat od uživatele.
Každý druh akce, stejně jako událost prohlížeče řízený,
tak, aby server side event řízený.
A některé z těch věcí, představují události.
Takže někdo v node.js, jen napsal nekonečnou smyčku,
velký divoký smyčka, čeká pro věci se stane.
A protože věci se stane, že skončí ve frontě, že jo?
Jistě, databáze může vrátit hodnotu.
A souborový systém, provozní Systém může vrátit hodnotu
zhruba ve stejnou dobu ale tam to asi bude
být nějaký uspořádání pro ně.
A node.js se chystá mají v podstatě fronta
jako velké pole nebo vektor, některé datové struktury
které tlumí všechny z těch věcí.
Vzhledem k tomu, že může doslova jen rukojeť jeden z nich najednou.
Takže, pokud jste vývojář,
psaní asynchronní JavaScript Kód pomocí asynchronního
funkce, budete umožňuje tento tzv. event loop jít
na další klíště, ne?
Tak dlouho, jak budete ihned vrátí jako všechny
z těchto asynchronních metod dělat jako čtení souborů a stat,
okamžitě vrátit protože callback nakonec
dostane zpět.
Jakmile se vrátíte,
to znamená, že někdo jiný může se objevila mimo sklad zde
nebo že může dostat vyskočila off v přední části fronty zde.
A tak, že je v Skutečnost, serializace
o všem, co se děje,
i když všechny tyto věci lze se děje paralelně
na podprocesy systému.
Ale node.js sebe a server byl spuštěn
jako jedno vlákno.
A po straně, která je t nemusíte nutně max
z počítače je schopnost je obzvláště
pokud máte 16 nebo jádro i 2 jádro počítače
a vy jste právě běží jedna instance uzlu.
Ale pokud si zase jste vzít něco jako 161,
vyhnete obrovskou noční můru bolesti hlavy, pokud jde
závodit podmínky a zámky a semafor
a psát skutečně podprocesy kód,
tak upsides a nevýhody.
OK. Takže, zpátky sem kódu, dovolte mi navrhnout, že začneme
zjednodušit věci trochu.
Viděli jsme, serveru pro jeden trochu před který vypadal takhle.
Tak, to je pravděpodobně docela jednoduché.
Ale stejně jako v celém světě PHP, tam jsou rámce
jako Laravel a tam je věci jako Rails a Django,
Totéž v node.js světě.
A budeme utrácet více čas na to ve středu
a v dalším projektu.
Ale když jdu do Server 2 adresáře,
Všimněte si zde pár paradigmat.
Tak to je - tam děje být ekvivalentní příkladem
ale je to pomocí rámec tzv. express.js,
který je svobodný open source software, jako Rails a Django,
jako Laravel, že je jen nakonec bude
být nedoceněný dnes Protože jsme psali
takové jednoduché příklady.
Ale věřte nám.
To bude velmi rychle stal vaším přítelem
, protože to ušetří Jste hodně TDS kódu.
A společný vzor pro express.js aplikace
Chcete-li mít app.js nebo server.js soubor, který obsahuje logiku
z programu nebo na alespoň vstupní bod.
Můžete mít více souborů.
Uzel modulu podadresář který má knihovny
že jste si stáhli jako async
a vyjadřovat se v jiných zemích.
A pak package.json, package.json vypadá to,
a můžete ji vytvořit ručně nebo nástroje vytvořit pro vás
a to doslova souboru json
a zajímavá část je závislostí zde.
Stejně jako v Laravel, můžete měl tento adresář prodejce
a vy jste museli dělat starosti o obalech a dělá -
ve skutečnosti aktualizace se Řemeslník nebo podobné příkazy,
že jste knihovny jste nainstalovali,
Podobně se package.json zde a spravovat knihovny
a verze že vám záleží.
Takže, když mám package.json, Nemůžu prostě dělat NPM,
Node Package Manager nainstalovat, to bude automaticky hledat
v tomto package.json souboru.
Podívejte se a uvidíte, mám mají nejnovější verzi
všech prodejců moduly
v uzlu podtrhují moduly adresář zde, nebo možná
v některých rodičů nebo předek adresář.
A pokud ne, je to jít si je stáhnout
a uvidíte spoustu
HTTP věcí děje přes drát.
Tak například, dovolte mi, abych ukázat obsah
uzlových modulů jen vyjádřit.
Nech mě jít dopředu a směle odstranit uzel moduly
takže vše, co mám teď je to.
A když jsem to NPM nainstalovat, budete si muset vybrat vidět, že to bude číst
že package.json soubor a jsme viděli výstup podobný
k tomu ve světě Laravel.
Je to stahování celek spoustu věcí, a to
protože express v pořadí závisí na celou bandou
z jiných knihoven národů.
Takže, všechny z nich jsou trochu stahování rekurzivně.
Až teď, když jsem to v LS znovu,
tam je moje uzel moduly adresář zpět
a vyjádřit tak zpět.
Takže je to jen způsob, jak zjednodušuje správu balíčků.
Nyní, když se podíváme na app.js soubor, to bude
být návrat k Naše nejdříve webový server
kde jsme jen plivat out "ahoj, svět".
Ale všimněte zde paradigmata,
Nejprve jsme vyžadují výslovný modul, pak máme tento řádek
kódu, které znáte z dokumentace.
Doslova léčbě, která proměnná modulu jako funkce,
tak otevřené závorka zavřít závorka znamená, spusťte jej.
To bude zřejmě vrátit něco, co jdeme
obvykle vyžadují app.
Jak to funguje?
Já opravdu nevím.
Nechám někoho jiného, ​​víte, na výslovnou světě napsat, že.
Chystám se teď stát na jeho nebo její ramena tak, aby
aby svou žádost běží trochu jednodušší.
Tady, já jdu si poslechnout na tomto konkrétním portu
které by mohly být nejvíce cokoli.
A tady je kód, který je možná víc připomíná teď
z Laravel a routes.php.
Tak to je večeře jednoduché, jsem právě chystá zadat trasu
za lomítkem hvězdy, takže vše se bude absorbována
podle této obslužné rutiny žádosti.
Paradigma pro psovoda vyžádání je jeho anonymní funkce
s žádostí argumentu
a objekt reakce stejně jako předtím.
A res.send v expresních prostředky odeslat následuje kód
tím, co chcete poslat.
A samozřejmě, můžete dělat něco milovník
by vlastně odesláním soubory nebo HTML
nebo dynamicky generované obsah.
Ale teď, všechno, co jsme dělali byla vyplivnout Hello, world.
Pokud půjdeme do serveru tři, to je ještě milovník jen
ukázat vám některé funkce.
A my vám ukážeme ještě svůdnější verze
z toho ve středu.
Ale pokud jste někdy slyšeli ze Socket IO možná,
tak, jak si myslím Jonathan nebo někdo řekl dříve,
jedna z věcí, Uzel je velmi známý
, je jeho reálném čase chování, ne?
Přemýšlejte o PHP v MySQL, pokud bylo implementovat chatu serveru
v PHP, kdy dva lidé mohli otevřete okno prohlížeče se foo.com
a pak začít IMing každý ostatní, Alice v jednom okně,
Bob v sobě, takže každý z nich vidí jeho
nebo její zprávy v druhé okno.
Jak byste to udělat v PHP a MySQL?
Použití nebo nepoužití Laravel druhu o nevýznamné, můžete mít
jako soubor index.php.
A musíš mít - v V některých případech to má plivat
z formy, takže je tu bude forma HTML
že pravděpodobně předloží není přes normální odeslání formuláře
ale Ajax asi, že jo?
Takže, na odeslat handler, takže zadáte do textového pole,
stisknete zadat a pak to dostane poslal na server přes Ajax.
Co si pak provést na serveru?
Takže, máš index.php
nebo něco tečka PHP, který je obdržel v parametru HTTP
od uživatele, Alice nebo Bob rychlé zprávy, co děláte
s tím, aby jej šířit Bob a Alice, resp?
Mám na mysli vás doslova mít k dispozici nástroje, s nimiž
aby to v min.
Tak, jako to, co byste dělali?
Máte jednu minutu na provádění tohoto programu.
Jo?
[Neslyšitelný Poznámka]
Perfect. Dobře, tak máte databázi.
Máme málo víme něco o MySQL.
Takže, máte tabulku to zprávy,
Možná je tu doba razítko, ID uživatele,
Tělo zprávy sám vytvořen, který,
aktualizovány a že všechno.
Takže můžete ukládat do databáze.
A předpokládám, Alice pošle první zpráva, jak se Bob se
tato zpráva se z databáze?
>> Mohlo by to být nějaký Ajax odpověď, která je neustále děje
zpět do databáze nahoru dostat [neslyšitelné].
>> Přesně tak.
Takže Bob kód, který je kód stejně jako Alice je prostě tak nějak
ze symetrického vztahu,
Prohlížeč Bob má nějaký Ajax kód to je asi snad každých 30
sekund tahání Server přes Ajax synchronizaci,
jsou tu nové zprávy?
Jsou tam nové zprávy?
Každých 30 sekund se děje být druh optimální
protože se musí čekat i
pokud Alice doslova právě poslal zprávu.
Takže, mohl prohlížeč Bob každý druhý hit serveru.
Ale to znamená, že Alice je Prohlížeč je bít serveru
každý druhý.
A co Charlie [Předpokládá se, pravopis]
a David [předpokládat pravopisu] a Edward [předpokládat pravopisu]
a každý další dopis abecedy?
V čem je problém tohoto přístupu?
Mnoho hitů nadměrných -
Myslím, že jsi právě efektivně Dávkovací svůj vlastní zrak
nebo DDOSing, Distributed Denial of Service útok
na svém vlastním webu, které mají všechny
z těchto uživatelů spouštět JavaScript kód, který je jen ping
sakra ze svého serveru i když libovolný počet,
80 procent času nikdo nic neřekl
v chatovací místnosti.
Ale vy jste jen kontrolovat aby se ujistil, jako.
Takže PHP v mnoha jazyky jsou prostě není dobré
pro komunikace v reálném čase.
Protože v PHP odvolání je tu žádný centrální paměti, ne?
Máte objekty relace který vytváří iluzi
centrálního úložiště, ale to je na jednotlivé uživatele.
Nemusíte mít globální paměti jako vy v Java Servlet
ve známém prostředí nebo v jiných rám funguje takhle.
Node.js když, máte globální paměti, protože máte
jeden server a že "může vzpomenout, že chce
o všech uživatelů.
A možná ještě mají databázi.
Ale pěkná věc, o node.js také je, že je to mnohem lepší
než něco jako PHP a vytvoření iluze
pracovat s více věci najednou.
A v tom, jak v stranou, můžete realizovat chatu serverů v PHP,
ale ty by obvykle dělat něco, co nazývá dlouhý dotazování
kterým nemáte ping každý druhý server.
Ping na server, Server nereaguje na vás
o nahoru 30. sekund, doslova sedí
ve smyčce čekat a čekat.
A server zkontroluje, je-li je tu nová data v databázi
a teprve poté, co si všiml, "Oh, Zde je zpráva od Boba, "
to odpovědět na HTP serveru?
Takže efekt ve vašem prohlížeči je, že ikona IE nebo Mozilla
nebo co prostě pořád točí po dobu 30 sekund najednou.
Ale vzhůru je, že ne Máte 30 žádostí o připojení
30 sekund, máte jeden.
Takže je to jen dlouhý polling.
Ale ještě lepší v moderním webu prohlížeče je něco, co nazývá
WebSocket, který budete mít CS143,
můžete efektivně provést TCP spojení z několika klientů
jako prohlížeče na serveru a zavěste na něj
bez použití téměř jako mnoho zdrojů,
jako HTTP může tradičně dělat.
A Socket IO je node.js knihovna
že je mnohem snazší proveďte připojení soketu
nebo iluze tam ve starých prohlížečích
takže můžete realizovat tento v reálném čase funkce je.
Takže, tady je příklad.
Tohle se nahoru dostane Trochu složitější
ale je to většinou zkopírovat a vložit z dokumentace socket.io je.
Zde je nyní více přesný požadavek psovod.
Je-li uživatel požadavek lomítko, co soubor jdu
se zřejmě slouží k nim?
Index.html.
A tam je nějaký nový věci zde potok
které jsem vám ukážu, za chvíli.
Ale to je jen další způsob,
chytil se podat trochu efektivněji
než jen to fs.readFile.
Je to trochu chytřejší zejména pro velké soubory.
Tak dlouhý příběh krátký, Tyto řádky jen sloužit
do souboru s názvem index.html
které nyní předpokládat, obsahuje Formulář HTML, kterou Alice
a Bob by mohl vzájemnou komunikaci.
A konečně, io.sockets.on, takže pochází z této linie se zde.
Takže, já jsem jen čtení Dokumentace io.socket mi dává
přístup k tzv. WebSocket s prohlížeči,
mezi prohlížeči a server.
Poslouchám pro speciální Připojení událost, která znamená
když uživatel poprvé hity server se snaží
k otevření tohoto připojení, jsem bude volat toto zpětné volání.
A teď, jdu provést následující kroky.
Každých pět sekund, co budu dělat?
Budu vydávat nebo vysílání pokud si pamatujete poškrábání,
grafický jazyk by že vysílací bloky?
Takže, budete vyzařovat
nebo spustit akci s názvem libovolně ze serveru.
A bude to obsahují Ping zprávu
a aktuální datum.
Tak, to je skutečná chatu serveru, že Alice
a Bob můžete použít, ale je to trochu automatizovaného serveru chatu
kde jsou zprávy jen trochu sonar ping.
Je to jen datum v časech, které jsou jsou zasílány každých pět sekund.
Takže, když jsem vlastně spustit tento věc - a to je vše.
Aby bylo jasné, tady dole, oznámení to je jen přihlášení tady.
Takže mi dovolte, abych zase slepé oko k tomu.
Nech mě to udělat uzel app.js.
Nech mě jít do mého prohlížeči.
Obnovit domovskou stránku zde.
[Pause]
A dovolte mi, abych zavřete inspektor.
Každých pět sekund, mám demonstrace, i když ne
Interaktivní pro člověka
z něčeho, co je děje asynchronně.
V oznámení prohlížeče, není ikona předení.
Je to pomocí milovník funkce Chrome v moderních prohlížečích
udržovat zásuvku Připojení pod kapotou
a to je to, co se nazývá obecně model pub / sub,
publish / subscribe modelu, kde jsme neudělali
že zcela explicitně zde.
Ale to, co je hezké o tom Obecně pub / sub paradigma je
že můžete mít jeden vydavatele.
V tomto případě centrální server a všechny
jednotlivce prohlížeče jsou klienti.
Alices a Boby z svět se mohou přihlásit na to,
takže můžete přenášet zprávy mezi libovolný počet uživatelů.
A i když už jsme Není vidět interaktivitu,
jsme měli asi 12 linek kódu prostě to udělat.
A to asi není skok si představit, jak byste mohli bič
ven souboru index.html která má skutečnou podobu HTML,
trochu jQuery kódu s Ajax, který neodešle denní
ale právě odešle co Alice nebo Bob typ na serveru
a pak server bude předávat ji.
A slibuji, že zahlédnout na jednu poslední věc, kterou právě
tě škádlit s tím.
Pokud bychom jít do potoka nula a jedna,
uvidíte kód, který je právě trochu jinak zde.
Jen aby jste viděli, Jedná se o alternativní
k tomu, co jsem nazval fs.readFile metoda dříve, kdy,
můžete říct node.js, "Jdi přečtěte si tento soubor do paměti.
Ale jestli je to velký prostě dát mi kus najednou. "
A možná víte z CS165
nebo 161 souborové systémy mají různé
Vlastnosti výkonu.
Možná budete chtít přečíst v blocích po 512 bajtech
nebo 2KB nebo cokoliv.
To je způsob, jak optimalizovat dostat se zpátky souboru iterativně
takže můžete plivat ji o trochu rychleji
do prohlížeče, nebo kdo je konec klient.
Tak obrovské množství obsahu dnes a budeme se potápět
do větších detailů ve středu s Timem [předpokládat, hláskování]
zejména při pohledu na tom, jak může překládat některé myšlenky
z první poloviny Samozřejmě Laravel a modely
do knihovny, že on sám napsal tzv. Bookshelf.js
, který je stále více populární v komunitě
, protože to vám dává většinu z toho,
ne-li více než Funkčnost výmluvný
který odvolání je to, že knihovna pohled z Laravel,
tak o tom více a více, jak
vyvinout plnohodnotného aplikace ve středu.
Budeme vidíte poté.