>> Redu.
Dakle cliffhanger bio, što je node.js kao što ga i danas?
Bilo što? Da?
>> Bilo je kao JavaScript okvir pisanje
aplikacije široko -
>> OK, da se radi.
>> - Znam kao zajedničke koristi kao -
ili nešto vam može učiniti je kao -
[Nečujno Napomena]
>> OK dobro.
Da, pa to je okvir.
To je motor kojim ste može izvršavati JavaScript kod
Server stranice.
To može značiti najjednostavnije stvari
poput pisanja naredbenog retka Skripta nije u Pythonu ili Bash
ili Ruby ili PHP, ali samo u JavaScriptu sama
ga i provodi na treptati naredbenog retka.
Ili ste zapravo može pokrenuti to unutar web poslužitelja.
A u stvari unutar Sama node.js,
taj je okvir cijela hrpa knjižnica među kojima su
u HTTP poslužitelja izgrađen-in.
Dakle, što zapravo može pisati poslužitelja kao što ćemo vidjeti
u samo na trenutak, super jednostavno po samo za razumijevanje malo
HTTP i TCP i lukama.
A možete ikra slušanje web poslužitelja bez Apache,
bez Microsoft IIS.
Bez ikakvih drugih instaliranog softvera,
možete samo mrijestiti to i slušati većinu bilo luku
na sustav koji ti si dopušteno.
Dakle, slučaj i bodovi, pusti me i otvoriti
do ovog primjera, server-0.js.
Dakle primijetiti da je vrh ovu sliku, samo hrpa
od nezanimljivih komentara, a zatim tu je par
reprezentativnih linija koda da ćemo vidjeti recurringly.
Dakle, var HTTP dobiva zahtijevaju "HTTP".
Dakle ugrađen u node.js ' infrastruktura je cijela hrpa
modula koji su zapravo samo knjižnice i sve je nekako
u ime prostora sa jedinstveni identifikator
kao što je ovaj jedan je "HTTP".
Dakle, da je kao u puno jezika kao što su Java i C + +
i C, samo što kad uvoz ili su
ili u čvoru govoriti zahtijevaju modul radi njenih dijelova.
I sve memorije traži se učita
u RAM i zato koristi.
Dakle, vi vrsta učitati knjižnice ili moduli na zahtjev.
To znači ići naprijed i zahtijevaju
za ovaj program HTTP knjižnica,
i odnosi se na taj biblioteke način varijablu HTTP.
Ali ovaj lijevi simbol mogla Pozvani ništa, Foo,
Bar, Baz, to ne smeta.
Dakle, za razliku od C + + i Java i C, gdje, kada vam je potrebna
ili uvesti knjižnicu, to samo neka vrsta
od postaje globalno dostupan,
node.js moduli čvršće prostor imena.
Tako da sami - da je funkcionalnost dostupan je samo u ovom trenutku
putem ove varijable imena.
Vi ne možete samo početak pisanju metode koje postoje
u njoj pravo način što je vjerojatno dobro,
jer tada vaš prostor imena ne dobiva gotovo kao prenatrpan
kao u mnogim jezicima.
U redu, tako da sada kao zajednička Predlažem, stvaranje HTTP poslužitelj
kao Jonathan [pretpostavlja pravopis] Bio je to moguće je doslovno
kao jednostavan kao poziv stvoriti metodu poslužitelja unutar
od HTTP modulu.
Dakle, to se vraća Referentna
do neke vrste web poslužitelja.
On je došao na Apache, ne nužno kao teška masa.
Ovaj je malo jednostavnija.
I sada, moram samo jednostavno učiniti nekoliko stvari.
Tako je prvi, neka mi dođite dolje na dnu ovdje
i preskočiti rukovatelj Način na trenutak.
I primijetiti ovu liniju koda,
server.on što je u biti znači server -
slušati kao u jQuery koda,
slušaj za događaj nazvao zahtjev
i samo uzeti pogodak Što trebam učiniti
kada je zahtjev za događaj požari u poslužitelju.
Da?
>> Poziv funkciju rukovatelj.
Dakle, doslovno izvršavanje kod koji se upućuje
ovim varijable i zapravo Ne varijabla simbol ovdje,
što je to simbol koji se odnosi na?
Pa, to ime funkcionirati ovdje
i rukovatelj očito traje dva argumenta.
Zašto dvije? Pa, ako ste upravo pročitati nikakvu dokumentaciju
za ovaj modul, će biti rečeno da rukovatelj
koje će se pozivati ​​će biti Prošlo je barem dva argumenta,
referenca na zahtjev,
i iznutra želji doslovno znači HTTP zahtjev.
Dakle, svi oni HTTP zaglavlja da možda podsjetiti
od početka semestar ili neki od njih prije klase
ili iskustvo kao dobiti liniju i domaćin liniju
i User-Agent linija, sve to je upakiranog i iznutra
ovog zahtjeva objekta.
A objekt odgovor razvrstani za izlazne podatke.
Dakle, imate referencu na objekt koji će vam omogućiti
slati podatke natrag browser pozivom metode
Na tom drugom argumentu naziva Res za odgovor.
No, to bi se moglo nazvati Foo ili bar, to su samo konvencije.
Pa sad, što da radim?
Pa, čini se da je unutar ovog super jednostavan web server
da sam provedbi, ja sam će učiniti sljedeće.
Ja ću napisati HTTP header sa statusom kod 200,
200 značenje OK, sve je dobro.
I onda, idem proći na očito.
Što je tip podataka Drugi argument za pravo glavi?
>> To je objekt?
>> To je objekt koliko ključeve i vrijednosti?
Samo jedan od svakog, zar ne, jedna ključna vrijednost para.
Dakle, 'vrsta sadržaja'.
I jedini razlog Ja sam ga citirao ovdje
jer crtica moglo biti spajaju za negativnim predznakom
ili nešto slično.
Dakle, ja to moram citirati ovdje, uprljati ili dvostruko citati.
Ali opet uobičajeno paradigma
u JavaScript kod je često jednostruke navodnike ovih dana,
debelog crijeva i onda je vrijednost.
Dakle, to je samo Takozvani tipa um.
To je HTTP header koja doslovno ide
biti zadovoljan tip crtica debelog Tekst slash jasno da se događa
biti poslana iz poslužitelja na pregledniku
tako da se ne zna preglednik hoće li pokrenuti ovaj kao čisti tekst
ili HTML ili slika ili film
ili flash datoteku ili bilo što drugo.
Sada, gdje sam zapravo žele poslati u tijelu stranice?
Pa, samo čitajući dokumentacije
za objekt odgovora unutar ove knjižnice.
Vidim da je u pravu Način i da traje niz,
možda druge stvari, ali minimalno niz.
I niz je ono što je ispljune u pregledniku.
U tom slučaju njegova super jednostavna, njegova Pozdrav svijetu,
, ali to bi mogao biti opne Nosač, html, u neposrednoj blizini zagrada,
Glava otvorena zagrada, u neposrednoj blizini nosač i tako dalje,
to bi moglo biti Raw html.
No, mi smo imajući na primjeru jednostavan, samo pljuju
iz najjednostavnije vrste uma što je nedvojbeno text / plain.
I onda samo response.end znači zatvoriti vezu
i poslati sve što imam vrsta bufferom unutar
ovog objekta leđa do pregledniku.
Gotov sam. U redu.
Dakle, posljednja stvar Radim ovdje
i to je nešto proizvoljna i značilo da se ohladi,
je da govorim server konačno slušati
na određenom TCP po defaultu luke.
Sjetite od početka od klasa koje usluge -
ili obično jedinstveno pri tome po brojevima,
AD je web, 443 je HTTP temelji web stranice, 22 je SSH, 21 je FTP
i 1337 je samo proizvoljna ali to je viša od 1024
što znači da se na većini sustavi, mogu ga koristiti
bez potrebe super korisničke privilegije.
Dakle, to je samo zgodan.
Ali 8080 je u off - zajednička jedan, 8088, stvarno ništa veliko
u tisućama kao zajednička ali to je samo još elita.
U redu, tako da ono što se događa kada sam zapravo pokrenuti ovo?
Pa, ja ne samo posjetiti stranica u pregledniku.
Ova datoteka se naziva poslužitelja 0.js.
Jer opet, Apache je Sada iz slike
za drugu polovicu tečaja.
Ako želim webu poslužitelja, moram pisati
a zatim pokrenuti ovu web poslužitelj.
No, ispostavilo se da je JavaScript i na strani klijenta
i strani poslužitelja je tumačiti jezika.
Dakle, sve što trebate je tumača.
Dakle it's - ako inzistirate pokrenuti čvor, a zatim server-0.js,
I može i ne mora vidjeti neki izlaz, ovisno
o tome što knjižnice sam uključena, ništa ne čini da se događa.
No, dopustite mi ići na preglednik i pusti me
na istu IP adresu mojih CS50 klijenata.
No, to bi moglo samo biti i moj Mac
ili moje računalo, a zatim pritisnite enter.
To zapravo izgleda kao Apache.
To je poput telefonskog imenika uvrštenje smo gledali
na u prvom polugodištu.
Dakle, ono što sam učinio krivo?
Da.
[Nečujno Napomena]
Točno, zar ne?
Dakle, Apache i dalje sluša na zadani port 80.
Iako sam mogao to promijeniti, Mogao sam ga isključiti sve zajedno
, ali to još uvijek radi.
No, ovi momci mogu sigurno koegzistirati.
Ja jednostavno morati staviti debelog 1337, a zatim možda i
ili možda ne slash na Kraj za pristup ovoj luku
koju je ovaj izvodi.
A sad vidim da Pozdrav, svijet je vratio.
I ja mogu pogoditi reload kao onoliko puta koliko želim,
to je još uvijek služeći se stranicu.
Doista, ako sam otvoriti Chrome-a Inspektor, ići na mrežu
a zatim ponovno cijelu stranicu,
primijetiti da je to doista bio Zahtjev koji je poslan.
Ako pogledam Raw izvora,
Primijetit moj browser šalje sve te stvari.
A onda je odgovor server je super jednostavna.
Tu je 200.
Ako to nije preniska na zaslonu,
postoji vrsta sadržaja.
I onda node.js vrsta automatski
za mene je dodao datum i sve ostale stvari
da preglednici obično očekuju.
Pa, pogledajmo Malo duševne ček.
Pustite me da se vratim na kodu u server-0.js i neka me -
svaki put kad idem u rukovatelj,
neka mi samo reći console.log.
("Mi smo imali posjetitelja! ').
Ne trebate kompilirati ili tako nešto,
to tumačiti jezika.
Tako sada, neka mi se vratiti stranica, ponovno jedan, dva,
tri puta i ići natrag na moj prozor.
A sad vidim ovo.
Pa to je čudno, Vidim šest linije.
Zanimljive web trivijalnost, zašto I dobili šest zahtjev ne tri?
Da?
[Nečujno Napomena]
Da. Dakle, kao što možda znate malo glupo ikona u vrhu
bara preglednika koji puno
internetskih stranica koristi moć biti grb Harvard,
to bi moglo biti logo tvrtke ili bilo što slično.
Dakle, preglednici ovih dana svojevrsni
od drskosti napraviti Dodatni HTTP zahtjev
na gotovo svim stranicama koje koje posjećujete provjere ako postoji
po defaultu datoteku pod nazivom favicon.ico
u istom direktoriju kao Datoteka koju ste tražili.
I ako je tako, to stavlja Ikona postoji.
Dakle, sve što vidimo je upravo to.
A u stvari, da vidimo ako smo mogu vidjeti ovaj nego tipu
se samo, 'Imali smo posjetu'.
Dopustite mi da ide naprijed i izlaz.
A ja samo znam iz gledajući dokumentacije.
Tu je imovina unutar objekt zahtjev nazvao URL
koja bi trebala iznositi put
koji je zatražio u stvarni URL.
Dakle, ako sam ponovno pokretanje poslužitelj jednostavnim ponovnim izvršavanjem čvor
Na poslužitelja 0.js i sad ga ovaj jedan, dva,
tri i vratite se ovdje.
Tamo je.
Slash je ono što sam - Ljudsko zatražio
u favicon.ico je ono preglednik
drsko traži.
No, stvar je ne toliko favicon stuff
ali kako poslužitelja je operiran.
Da?
>> Zašto da imaju da se neki zahtjev?
>> Zašto to moraju - po prirodi kako HTTP radi.
Dakle, HTTP može samo zahtijevati jedna datoteka u isto vrijeme.
Preglednici može biti pametna ovih dana
i držati TCP veza otvorena.
Ako je CS143 ili općenito upoznati s umrežavanje,
tako da možete doći do gubitka dobiti
po održavanju mreže socket otvoren
u izradi više HTTP zahtjeva serijski preko njega
ali oni su jedna datoteka po zahtjevu.
Dakle, ako posjetite nešto slično -
Mislim da možemo ići na većina bilo koje web stranice.
Ako idete na - neka je podići u Chrome inspektor ovdje.
Ona može doći ispuniti većinu stranice.
Idite na karticu mreže i otići na www.cnn.com.
A kada posjetite cnn.com, njegova početna -
Vaš preglednik prilično kruto čini - još uvijek broje.
OK. Barem 289 HTTP zahtjeva opet i opet.
I to je razlog zašto prilikom posjete Posebno otečen web stranice,
oni su sporo učitavanje Zbog svega
od imovine oni učitavanja.
Dakle, to izgleda kao 298.
Tu bi moglo biti nekih Ajax događa u ovom trenutku ili neki
od imovine, samo su niske.
Dakle, svaki od njih je pojedinačni zahtjev ide natrag
i naprijed, natrag i naprijed.
I to je razlog zašto ranije, čak i iako mi vrsta razgovarali
o tome nešto maštovito gdje ste stavili oznaku skriptu,
apsolutno čini Razlika kada imate -
počelo imati puno prometa i puno
od slika se traži.
I svaki od ova predstavlja Vjerojatno sliku, media file,
JavaScript datoteka, CSS datoteke ili slično.
Dakle, mi smo već do neki 4 megabajta samo
gledati na današnjem vijesti.
Dobro pitanje.
U redu.
Dakle, ono što su neke od upsides ipak?
Tako je, znamo kako napraviti Web-stranice već s PHP.
I mnogi od vas došao na Klasa znajući Django
i Python ili tračnice s Ruby.
Dakle, zašto nam je potrebna još jedna jezik i infrastrukture?
Ono što je posebno node.js dobro, ako znaš?
[Pauza]
Neki stvar?
Ne? Da?
>> Prosljeđivanje poruke.
>> Dakle, prenoseći poruke.
Dakle, to je istina, a to je istina za više tehničkih razloga
i da node.js i stvarno JavaScript je posebno
dobro prilagođen za asinkroni code,
ako kojim ste stvorili iluzija
od obavljanja više stvari odjednom.
Dakle, iako su oni stvarno događa u seriji,
naprotiv, u većini slučajeva, JavaScript i strani klijenta
i poslužitelja strani je jednu navojem.
Koji ako uzimate 161 ili čak 61 znači da je -
ovog programa znate,
Tumač može doslovno samo jednu stvar odjednom.
No, to se nije velika za nešto poput web poslužitelja
gdje ste mogli imati na desetke ili stotine ili možda čak i tisuće
korisnika svi pokušavaju za pristup web-stranicu
u istom vremenu.
Pa ipak, kako sugeriraju da im rukovanje jedan
Nakon drugog po drugi pogotovo ako neki
od tih zahtjeva, kao što smo vidjeli Na CNN-u možda zahtijevaju posluživanje
do 300 datoteka prije čak i dobiti na sljedeću korisnika
tko želi vidjeti, kaže vijest.
Node.js bolje odgovara za okruženja kao što je to.
Jer ono što se događa je bilo spor pokrenut postupak
kao što je čitanje datoteke s diska ili upite baze podataka ili govori
na nekom drugom mrežnom poslužitelju,
koji ima tendenciju da imaju latencija, zar ne?
Ako ste uzeli 61 ili 161 pogotovo sve ove vrste
perifernih usluga imaju tendenciju da se puno sporije
ne radiš ništa unutar isti RAM i isto CPU
to govori u tom slučaju server zapravo radi.
No, ono što je lijepo o node.js je da možete -
i JavaScript općenitije je da možete učiniti nešto
i onda kažu: "Hmm, ovo ide
da mi nekoliko milisekundi ili čak nekoliko sekundi.
Dopustite mi vrsta tanjura koji off " , ali to nije istina proces.
I onda kada se to radi radi da je spor pokrenut postupak
kao grabbing redova iz baza podataka ili čitanje datoteka. html
s diska, to će vratiti se na mene, a
od mene da čekaju njega.
Dakle, da bi se to više jasno.
To je moj način čineći to više upoznati.
U redu, tako da je ovo Shake Shack na trgu.
To je vrsta zajednička paradigma
za objašnjavanje asynchronicity.
To je zapravo dobro primjer, jer Shake Shack
i ukusna Burger su izvanredno spor za ono što rade.
No, stvar je da su jako dobar u uzimanje narudžbi
i uzimanja novca, nakon što čekate hranu.
Dakle, to je zapravo bolje Dizajn od alternativa.
Zato pretpostavljam da uđeš u trgovina kao što je ovaj i imaš
na prednjoj liniji, a vi stavio svoj red i želite
na hamburger, najbolje što mogu reći, to traje najmanje pet
ili više minuta zapravo dobili hamburger.
Dakle, to bi bila neka vrsta lošeg poslovnog modela
Ako dok ste na čekanju za svoj burger, Alice [pretpostavlja pravopis]
i Bob [pretpostavlja pravopis] i Charlie [pretpostavlja pravopis]
i svi drugi čekanje u redu iza vas
i doslovno blokiraju linije na čekanju za svoju hranu.
Dakle, očito, na Shake Shack
i druge brze hrane mjestima to ne rade,
oni učiniti nešto poput ovoga.
Oni vam zvono.
A oni neka vrsta poslati na svoj način.
I oni vas nazove po čineći ovo malo što vibrira
ili flash dobiti vašu pažnju.
Dakle, to je doslovce ono?
Nešto poput node.js radi.
Ako node.js ili JavaScript općenito se koriste
i programer je dovoljno pametna
realizirati, "Znaš što?
Što god trebam napraviti pravu ovdje bi moglo potrajati neko broj
milisekundi ili sekundi.
Znate što?
Dopustite mi ići naprijed, a ne nazvati sinkronizirano -
"Da je čovjek blokiranje svi drugi u redu ", -
neka mi ići naprijed i vrsta odstupi
i jednostavno sam se nazove
kad se to dugo trčanje operacija je završena. "
I nazove naravno aludira u ovom slučaju
na funkciju povratnog poziva, Referenca na steznoj glavi koda
koje će se izvršiti kad ti burger je spreman,
nalik ovome imaju neke vrsta funkcionalnosti ugrađenim
da počne vibrira ili zujanje kada je vrijeme za vas
da se zove natrag ispred linije.
Dakle, što to znači realno?
Pa, moramo raditi svoj put prema gore.
Dakle, neka mi samo naprijed i to ne prvi put.
U poslužitelja 1.js, dopustite mi Prvi pojednostaviti kod
kako bismo mogli poduzeti korake ka beba uvjerljiviji problem.
To je isti Program koji sam napisao prije.
No, ono što je promijenjeno?
Tu je nekakav lagani sintaktička razlika
između ovog i Verzija 0 maloprije.
Ono iskoči na što ako se sjećaš?
Da Cynthia [pretpostavlja pravopis]?
[Nečujno Napomena]
Da. Tako sada imamo liniju od funkciju koja se prošli u.
Mi smo stečen osloboditi od one vrste
od beskorisno nazvana rukovatelj funkcija.
Beskorisno samo da prije čak ga zovete na jednom mjestu,
Ja stvarno ne trebaju gubiti vrijeme kad mu daje ime
i što je teže pročitati kod vrha do dna.
Dakle, neka je samo proglasiti istoj razini je anonimna funkcija.
I radim druge dvije stvari.
Ja sam stvaranje bolje Korištenje dot zapis.
Dakle, kao što je u jQuery, puno čvora Metode se mogu ulancane.
Tako da nakon što ste učinili zovete nešto, nemate
čekati na novu liniju i pozvati neke druge metode,
možete samo lanac ih zajedno.
I tako na ovaj način, možemo jako zategnuti ovo gore.
Dakle, to je doslovce web server u pet redaka
koda ukupno razliku -
za razliku od onoga što možete normalno morate učiniti da biste postavili nešto gore.
Ako idem na poslužitelju 2. Sada, učinimo to.
U poslužitelj 2 - zapravo je neka vratiti na tom poslužitelju 2.
Nemojmo sada otvaraju async-0.js i rješavanje tog problema pri ruci.
Dakle, prvo, idemo naprijed i otvorene
async up-0.js u pregledniku.
Dakle async-0, pusti me Povratak u pregledniku.
Hit reload.
A sada, to je vrsta o pogrešci.
Doista sam vidio 500 u inspektora Chrome.
No, dopustite mi da se preciznije zatražiti hello.txt.
OK. Dakle, ovo izgleda kao da rade.
Dakle async-0.js ne čini posluživati ​​nešto za udarac.
Ona nema podršku propust varalica.
Ali, ako sam izričito zatražiti hello.txt,
da izgleda kao da se podržavaju.
Zašto je to tako?
Pa, ono što sam otišao ovdje
i učinio je implementiran super jednostavan web server
koja pokazuje gdje asynchronicity može biti korisno.
I to se provodi kako slijedi.
Prvo, ja sam koristeći HTTP modul ponovno
ali i FS koji Vjerojatno je kratica za?
Općenito u CS, datotečni sustav.
OK datotečni sustav.
Otuda Forth FS, datotečni sustav.
U redu, pa što to bi me?
Funkcionalnost odnose na slika kao dobivanje prošlo,
otvaranje datoteke, pisanje imenici, čitanje imenika
i sve takve stvari.
Tako sada primjetiti, ovaj kod je isto kao i prije,
stvoriti poslužitelj, prolazi u anonimnom funkciji.
To je vrsta proizvoljna.
To nije jako siguran web poslužitelja.
Zapravo, može se pristupiti najviše bilo koju datoteku na moj hard disk
ili na poslužitelju je teško voziti izvršavajući ovaj kod
jer ja sam samo slijepo pod pretpostavkom da ću
zgrabite sve što korisnik zatražio je u URL-u.
I ja ću se prefiks ga s točkom
, tako da sam na granici biti siguran
rekavši sve što sliku mogu Zahtjev mora barem početak
u trenutnoj imenik.
Naravno, tu je prijetnja ovdje.
Jer, ako se umjesto uključiti što?
U njihovom putu, i oni mogu vrsta od zaobišli da je previše.
Dot, dot, zar ne?
Dakle, ako korisnik samo staviti točku, Točka u URL-u, u teoriji,
oni bi mogli početi dobivanje my - i kažu datoteku lozinke.
Dakle, to nije značilo biti osiguran,
to je značilo da je jednostavno.
Pa evo, imam varijablu koja je lančana povezanost točkom
koji je prisutan imenik i URL zahtjeva
što smo vidjeli prije nego što je kao što slash ili / hello.txt.
Pa sad, to dobiva malo zanimljivije.
Prvo, primijetit dno.
Slušam na Isti port kao i prije.
Dakle, stvarna zanimljivo Rad je unutar odavde.
Svaki put zahtjev dolazi u po prirodi
ovog koda, što to radim?
Zovem datoteku metoda za čitanje datoteka sustava,
prolazi u putu da želim čitati.
A sada, to je ono što je zanimljivo,
ovo je po provedbi u asinkroni metode.
Vi ne možete dobiti povrat vrijednost od čitanja datoteke.
U stvari najave, postoji nema lijevi izraz
na lijevoj čitanje datoteke.
To ne vratiti vrijednost.
Umjesto toga, on poziva za povratni poziv funkcionirati kad je spreman
da vam vratiti odgovor.
Pa opet da bude jasno, dok se u prošlost,
u mnogim programskim jezici, ako ste htjeli
čitati spis u točki PHP,
file donja dobiti naglašavaju sadržaj,
imate izraz lijevi u svim vrijednosti nakon što -
prije znaka jednakosti, to znači da ste dodjeljivanje
za tu varijablu povratak vrijednost te funkcije.
To možete učiniti u node.js, ali obično imaju
nazvati izričito sinkroni verzije funkcija sviđa,
Mislim da je to pročitao sync datoteka ili sinkronizacija pročitati datoteku.
Zaboravio sam kako su ga nazvali.
I to će dati li vratiti vrijednost.
Ali ako je to varalica je na neki daljinski datotečni sustav
ili disk je jednostavno prirodno spor, to bi moglo potrajati 10 milisekundi
ili 2 sekunde za tu datoteku zapravo vratiti.
U međuvremenu, nema druge web Posjetitelji servisiramo
Vaš websit.
Blokirane.
To je ono što se zove blokiranje IO, ulaz / izlaz.
Dakle, ovdje, to je puno pametnije.
Jer ono što se događa node.js
učiniti nakon tumačenje je sljedeća,
to će se zvati metoda za čitanje datoteka,
pokušajte jednog do spisa koji je dobio Put je odredio vrijednost P.
A onda, ako i kad je spreman da ti vratim sadržaj
datotečnog P, to će nazvati funkcija čiji je potpis
po konvenciji sljedeće.
Dva argumenta, prvi od što je možda i objekt pogrešci,
kapitala E, to je predmet zove pogreška ili Null
Ako ne postoji takva pogreška.
I drugi argument - uzeti Pretpostavljam - će biti što?
To se zove podataka očito, ali Što je Data konkretnije?
>> Sadržaj?
>> Sadržaj hello.txt u primjeru sam izvukao
u svom pregledniku trenutak prije.
Dakle, drugim riječima za čitanje datoteke i mnogi node.js funkcije
kao i na ne vraćaju vrijednosti.
Zovu callbacks i proći
onim poziva na intervenciju kako bi izgledala su tradicionalno
vratiti vrijednost.
Upside ovog pristupa je
da bi se moglo nazvati pročitao podnijeti T0.
Povratni poziv funkcija poduzimao Nije se zove jedan krpelj kasnije
takoreći na T, što bi se moglo nazvati T1000,
tisuće krpelja kasnije.
No, stvar je u tome Ostatak koda u ovoj datoteci,
ako je bilo bi odmah se izvršava sve dok node.js
i dok datotečni sustav shvati kako čitati
da sliku i dobiti natrag na vas.
Tako ćete stvoriti to -
tako učinkovito iluzija
paralelizma dok ostavljajući sporiji procesi ne
blokirati važne stvari, Dio koji servisiranje korisnicima.
Dakle, kako ćemo to srediti?
To je vrlo čest node.js paradigme.
I tu je način samo pojednostaviti to ćemo vidjeti pred sobom.
Prvi put sam provjeriti, ako Pogreška nije null.
Dakle, ako to nije lažna zatim došlo je do pogreške.
Ne znam što je to, Možda datoteka ne postoji.
Nisam imao ovlasti.
Ime staze nije u redu.
Bilo koji broj stvari moglo poći po zlu.
Za sada, ja ću samovoljno vrati 500
što je interna pogreška poslužitelja.
Nešto je pošlo po zlu.
Ja stvarno ne zanima da ga dijagnosticirati.
Dakle, neka je samo reći Korisnik je slomljena.
I onda, idem učiniti res.end,
i to je skraćenica.
Podsjetimo da je prošle put sam res.write
a onda sam res.end.
Ako želite samo poslati jednu liniju proizvodnje,
možete jednostavno učiniti sve odjednom s res.end s argumentom,
i da će poslati god poruka o pogrešci
unutar tog objekta do pregledniku.
To je prilično iskrenje sjećam trenutak prije.
Nemam pojma što je to mislio na prvi pogled.
No, kada sam zatražio datoteku koja ne postoji -
Ups, moramo pokrenuti poslužitelj ponovno.
Kad sam zatražio datoteku da nije postojao, EISDIR,
tako nešto to se katalog,
ako radim neki slučajni Niz postoji,
očito da znači file uopće ne postoji.
A to je zato što mi je kod je, jednostavno govoreći pisati
što god Raw Poruka o pogrešci je,
pa nije baš user friendly ali barem sam ja to rukovanje.
Inače, ako to nije greška što to radim?
Ista stvar kao i prije ražnju iz 200 OK, obični -
text / plain tipa um i zatim ispljunuti podatke.
I to je razlog zašto sam uzimajući Sadržaj hello.txt koja je upravo
Za potvrdu da sam gledao na hello.txt,
to je doslovno samo hello, world.
A ako sam promijenio taj hello, world, spremite datoteku,
repriza poslužitelja, ponovno učitati stranicu.
Sada, ja dobiti tu verziju.
Dakle, ja sam zapravo samo reimplemented web poslužitelj
kao što je postojala mnogo godine, ali pomoću node.js.
No, to možemo učiniti čak i više čisto.
Dopustite mi da se otvori async-1.js.
Sada, primijetit sam dodao još jedan modul ovaj put,
očito modul put.
Sada, ovo je dobar prilika da pogledate
na ono što je dokumentacija izgleda.
Node.js je dokumentacija.
Kao PHP mislim da je zapravo prilično dobro
i ravno naprijed.
Ako idem na node.js i Google i tražiti node.js putu,
što ćete vidjeti najčešće je izravna veza na URL
da sam stavio ovdje trenutak prije.
Dakle / API je službeno mjesto ići za dokumentaciju.
A što ćete vidjeti na vrhu
službene dokumentacije čvora je sve metode i
ili svojstva unutrašnjost ovaj modul,
od kojih se zove pridružiti.
I pridružiti se pomagač funkcije da će mi dopustiti
da se ne zamaram s sve pluseve.
I to je dodao bonus kao što ćete vidjeti
s dokova je također normalizira nastalu putanju.
Dakle, ako korisnik ili imate točkice ili točke točka ili bilo koja kombinacija
od one vrste relativna staze, među upsides
spojenih metoda je da se to će očistiti sve što je do
i dati vam Canonical Put bez
od tih točaka ili točaka točaka.
Dakle, to je dobra stvar Općenito za sigurnost najmanje
Ako ste provjeru vratiti vrijednost koju nisam
u ovom jednostavnom slučaju.
Ali sam htjela da ga koristiti.
Dakle, ja sada stvoriti put kojim Malo više programatski
s path.join umjesto sirovog ulančavanje.
Dakle, to je malo čišći nego prije.
I sada primijetiti sam se malo inteligentniji a
nego samo slijepo pokušajte čitati datoteku,
Idem se zapravo nazvati fs.stat.
Dakle, ako ste upoznati
s niskom razinom C funkcije i C, čak i PHP.
Puno knjižnica ima ova funkcija stat vraća
U osnovi statistike na datoteku, veličina datoteke,
dozvole, naziv i slične stvari,
i implicitno, ako datoteka postoji ili ne,
a ako je datoteka ili mapa
ili simbolička veza ili nešto drugo.
Tako sada primjetiti, ja sam pozivom fs.stat.
A onda je očito prema U dokumentaciji,
Trebao bih se vratiti Greška u objektu
ili Null slijedi od strane statistika objekta.
Ali neka se vidi ovo, node.js.fs.
Ovdje je datoteka Dokumentacija sustava.
Dopustite mi tražiti statistike.
Tu je puno više funkcija ovdje.
Ups, to stat sync, fs.stat.
Dakle, ovdje, to je asinkroni statistike (2).
To je znači ako sjećate iz glavne stranice,
Poglavlje 2. glavnoj stranici,
to znači da je to doslovno samo provedba čvor
niske razine Funkcija sustava stat.
Dakle, povratni poziv dobiva dva argumenti, pogreške i stat
gdje je stat fs.stats prigovoriti.
Pa da vidimo što je to objekt je trebala izgledati.
Idemo kliknite na hipervezu i ja to vidim.
Statistika objekt sadrži očito su neki pomagač metoda,
je datoteka, je katalog, je hrpa drugih stvari.
To je "je" datoteka koja mi je stalo o je u ovom konkretnom slučaju.
Dakle, ovdje sam ići.
Ako je došlo do pogreške, a zatim neka mi samo iskočiti ovaj put
i pretpostaviti.
Ako postoji pogreška, to je bio Vjerojatno 404 datoteka nije pronađena.
To bi moglo biti nešto drugo
, ali ja sam se malo lijen ovdje samo da se usredotoče
na više zanimljivih detalja.
No, za korisnika svrhe, datoteka nije pronađena,
ako je bilo pogrešaka navodeći datoteku.
Inače, dopustite mi da provjerite je li Datoteka je doista stvarna datoteka.
Dakle, ako to nije datoteku, ona postoji.
Ima nešto postoji, ali to je vjerojatno imenik
ili možda simbolička veza
ili nešto drugo što je funky na datotečni sustav.
Bilo kako bilo, korisnik Ne treba ga vidjeti.
Pa sad, ja sam samo ću pljuvati
konvencijalno neovlašteno 403.
Ali opet samo konvencija,
Ja mogu imati koristi nešto drugo u teoriji.
I onda na kraju, dopustite mi pokušati pročitati datoteku.
Dakle, neka mi se pomaknite prema dolje.
I sada primjetiti ovo je mjesto gdje kod može dobiti malo neuredan,
primijetiti da zovem fs.readFile prolazu
na istom putu, isto Uzvratni poziv kao zadnji put,
pa prethodna verzija.
A onda, ako bih pronaći -
ako mi se ne nalaze, Pljujem iz 500.
A ako ja ga pronaći, što linija ćemo vidjeti ovdje?
Idemo vidjeti FS pisati zaglavlje 200 vjerojatno
i res.end slanje stvarni podaci.
Ali primijetiti.
I to nije demonstrativno u najgorem scenariju.
Ali ja imam tu stat poziv ovdje nego moram neke stvari.
Zatim, imam još jedan asinkroni poziv ovdje,
tako da više udubljenje.
Dakle, samo vrsta razlučuj ako bi mogao odavde.
Što Problem se javljaju s jezik poput JavaScripta
u ovom okruženju u kojem nemate vrijednosti povratne
nego imate ove uzvratnih poziva.
I naravno, to je samo stilska stvar činjenica
da držim uvlačenje.
Ali to odnijeti logičan sljedeći korak.
Pretpostavimo da su jedan ili Druge dvije ili tri funkcije
da mi je trebalo izvršiti da su po svojoj prirodi asinkroni,
i zato što je nekako držati uvlačenje s njima,
nositi se s njima, da ih obrađuju.
Dobivate kakve povratne pozive pakao kao ga ljudi nazivaju
gdje počinje tvoja koda dobiti vrlo širok
i iskreno jako teško pročitati.
Kao što je to, ja mogu nekako jedva reći da je ova vrsta toka
koja ima ovu vrstu
od stilski kutna što se ovdje događa.
Dakle, to nije idealno, jer to se može vrlo brzo postati
nezgrapan, iako dva asinkroni ne poziva
tako velika stvar.
Dakle, mogli bismo to izbjegli, zar ne?
Možda ste opazili da Ja misclicked trenutak prije.
U dokumentaciji, znate, to izgleda kao da je statSync.
I statSync ne uzima povratni poziv kao argument.
Potrebno je samo put, jer to je očito što radi?
To vraća instancu od fs.stats.
Dakle, ovo bi mogao biti vaš prvi instinkt, zar ne?
Pogotovo ako povratne pozive funkcija
i asynchronicity je malo novi u vas, iskreno,
Najlakši pristup je vjerojatno samo izbjeći problem sve
zajedno, vratite se razvrstati od CS101 stil programiranja
gdje se nazvati funkciju ili metoda, vraća vrijednost,
pozvati funkciju, vraća vrijednost,
funkcija, vraća vrijednost.
A dobro bi mi stoga fs.statSync
koji je doslovce isti ali to je sinkroni verziju
što znači da se vraća vrijednost.
To ne prolazi Cijenimo da je povratni.
Ali zašto bi to vjerojatno biti suboptimal zaobilazno posegnuti
do sinkrone funkcije?
Da?
[Nečujno Napomena]
Točno, to traje dugo vremena.
Vi ste samo usporava sve dolje.
Jer baš kao Shake Shack ili Tasty Burger, ako su se riješili
od onih zujanjem i napravio, Kupac stajati na prednjoj
linije dok se hrana skuha čak i prije uzimanja redoslijed
osobe iza ti očito
kroz staviti usporava.
Ljudi početi ostavljajući, ste vrsta privući pakete.
Možete napraviti bilo koji broj analogija ovdje.
No, ukratko, to je vjerojatno nije dobra stvar
za poslovne ili poslužitelja.
Dakle asinkroni kod obično dobar barem
u ovom slučaju, ali to svakako počinje uzrokovati neke tjeskobe.
I zapravo sam se usudio reći kada Prvi pisanje ove stvari,
to će potrajati malo malo koristi za dobivanje.
Dakle, krenimo za opremanje ste s nekim knjižnicama
i tehnike kako bi ovo malo lakše.
Dakle, jedna od najčešćih knjižnice su popularne biblioteke
ovih dana, ovaj jedan se zove async.js.
I kao puno node.js knjižnice ili module,
to su sve open source.
Oni su gotovo svi žive i dobiti hub spremišta koja je vrsta
od postali de facto mjesto za spremanje tih stvari.
A onda je tu Cijela infrastruktura
za instaliranje tih stvari zove NPM, Node Package Manager
koji, ako ste upoznati s EvanTube je vrsta
od poput app ili app dobiti.
Ako ste upoznati s Red Hat i Fedora
kao u aparat, to je kao yum.
No, to je čvor - to je Voditelj paket samo
za ovaj okoliš.
Dakle, možemo preuzeti i instalirati stvari kao što su async knjižnici
i također još jednom pozvao naglašavaju knjižnicu ili modul.
Ali ovi što se tiče FS, HTTP, put,
oni su svi došli ugrađena u čvor.
Pa ako ćemo ići s API dokumente, vi ste zapravo ćete vidjeti da je izgrađen
u čvoru dobivate besplatno cijela hrpa modula.
No, dosta lijepih ljudi na internet su napravili desetke
ako ne i stotine drugim knjižnicama
raditi stvari bolje ili drugačije.
Dakle, neka je pogledati Kako je ova knjižnica radi.
Dakle, najveći dio ovog kodeksa je identični za trenutak.
Imam put biće stvorio do vrha.
I sad ja zovem async.series.
Dakle async knjižnica, to je Samo knjižnica koja vam omogućuje
proći ili podići obično od Funkcije da se zove jedan
Nakon drugog samo vrste izbjegli tu uvalu pitanje,
a zapravo samo mentalno tjeskobe koja će neminovno nastati
barem kada se prvi put zaroniti u to na svoju ruku
s programiranjem asinkrono.
Kao što je u stranu, ako ste uzeli 161, a vi ste se bavila brave
i podići uvjete i sve toga, asinkroni kôd
i okoliša kao i node.js je zapravo mnogo,
mnogo jednostavnije nedvojbeno
nego zapravo pisanje multithreaded koda.
Bilo kada imate multithreaded koda,
imate, postavlja uvjete.
Vi ne morate brinuti o tome Dvije teme koje sadrže
za iste sredstava disku ili u memoriji.
Ljepota JavaScript
u node.js je tu je doslovno samo jedan thread,
što znači preglednik
ili poslužitelj može samo napraviti jednu stvar odjednom.
To je samo na vama, Programer
zadržati mentalni model za kako ste vrsta red stvari
i shvatiti kako naručiti svoj kôd.
Ali nikad se ne morate brinuti o podizanju uvjeta
u sasvim isti način na Barem s Raw koda kao što je ovaj.
Dakle, to je malo teško grack ovdje.
Ali - Pa neka mi se otvori docs za koji trenutak.
Async.js knjižnica koja na sličan je vrlo googleable,
ona živi u GitHub saksiju kao puno njih.
Ne mislim da je to nedorečena, to nije.
Dopustite mi da se pomaknite prema dolje do Pročitaj mi ovdje.
Dakle, async knjižnica daje hrpu
metoda unutar nje.
Na primjer, postoji metoda zove svaki,
što ako sam to samo kliknite vidjeti svoje dokumente na trenutak,
Ova funkcija ili metoda koji vam omogućuje da učinite nešto
poput svake četiri ali paralelno.
Oni svi će se dogoditi potencijalno paralelno.
I jedni način samo će se vratiti s tobom kad sve
od iteracija su kompletni.
Pa možda im se dogoditi jedan za drugim.
U idealnom slučaju, oni se dogoditi osnovi paralelno.
A metoda ne vas nazove.
To ne ogovarati svoje buzzer dok sve
od elemenata koje ste ponovljena tijekom završili.
Dakle, to je samo lijep način
izbjegavanja korištenja jednostavan četiri petlje
ali zapravo radi nešto asinkrono.
No, sada više izravno odnosi se na ovom primjeru
primijetiti da je ovo Način serije.
I neka mi samo podići Jednostavan kanonski primjer.
Dakle async knjižnice, serija metoda uzima u što implicira
by uglatih zagrada u polju.
Koji su podaci tipovi elemenata
u tom obilju temelji na jednostavnom primjeru?
To je niz dužnosti.
Tako je u C, što bih nazvao ih funkcionirati naputke.
U JavaScriptu, postoje još pravilno upućuje na funkcijama
ili anonimne funkcije.
A to samo znači, nizovi
Naravno su naručili od nula na gore.
Dakle, oni su tvrdili poredak koji je dobar
za seriju, jer serija naravno znači učiniti nešto
kako ne paralelno.
Dakle, to samo znači da je to Funkcija će se izvršiti,
onda je to jedno, onda je to jedan, ovaj jedan, onda je to jedno,
No mnogi su
dok konačno opcija povratni poziv zove.
Dakle, primijetite paradigmu ovdje.
I iako je to je jedan tip knjižnica,
to je predstavnik Vrlo čest JavaScript paradigma
od ponovnog korištenja callbacks.
Dakle, primijetiti ono što radite ovdje.
U prvoj funkciji čemu donesen putem ovog niza,
što definira anonimni funkcija samo s funkcije.
No, obavijest da je očito prema ovom dokumentu,
da je anonimni funkcija treba uzeti argument uzvraćanje.
To će biti pointer ili referenca u funkciji
da bi trebali zvati kad svoje code je spreman vratiti vrijednost.
Pa opet, za razliku za samo obično proceduralno programiranje
gdje ste navikli odmah vraćaju vrijednosti
da je jedna razlika u odnosu na uporabe knjižnice ovako
u asinkroni programiranje više uglavnom, kada ste spremni
da se vrati vrijednost od baza podataka, iz datoteke,
iz aritmetike izraz, to je do vas
pozvati funkciju povratni.
A lijepa stvar o ovoj biblioteci
ako ćemo čitati dokumente pažljivije je da,
ako i samo ako su svi uzvratnih poziva području zvanom
bez objekta pogrešci, će cijela stvar uspjeti?
Dakle, drugim riječima, Ako postoje 2,
ako ima 10 anonimni Funkcije
u ovom polju, dakle u ovoj seriji,
samo ako ih sve uspjeti,
će konačni izborni povratni poziv smatrati uspješnim?
Ako netko od njih ne uspije, svaka funkcija
Nakon što neće čak se izvršiti.
Dakle, to je lijep način vrsta posjedovanja lančano
da prekida prerano ako nešto pođe po zlu.
Pa to vidjeti u kontekstu, ovdje kako bismo mogli ponovno provesti
da je prethodni program.
Ja se put kao i prije, pa to je jednostavno dio.
Ja copy paste ovaj kostur kod
Iz dokumentacije tamo async.series otvorena zagrada,
otvoriti četvornih nosač.
I sad moram primijetiti jednu Funkcija u ovom početku
sekunde, vidjet ćemo gdje idemo od toga.
I sada primijetiti, to je Malo kompleks na prvi
, ali se fokusirati samo na to redak po redak.
Fs.stat znači dobiti statistike ili što ne pripada tom putu.
Nazovite ovaj uzvraćanje kada je spreman.
Ovaj broj je isti kao i ranije.
Ako postoji pogreška, postoji jedna razlika sada.
Opet, vrlo čest paradigma u node.js programiranje
ako nešto pođe po zlu i povratni poziv treba znati
koje po konvenciji, prvi Argument za povratni ide
da se nitko, ako je sve u redu ili referenca na objekt pogrešci,
kapitala E. To je kao da se pogreška klasa koje postoje u svijetu
ali više o tome neki drugi put.
Dakle, na taj način, ako postoji pogreška, što implicira?
Pa na temelju onoga što sam , rekao je serija radi,
je, ako nešto pođe u redu, samo mi nekako žele
za prekid cijeli niz anonymous funkcija poziva.
Dakle, to je dovoljno za mene samo vratiti povratni prolaz
u objektu pogrešaka.
Jer, ako je dao stat ja natrag do pogreške,
Ja bi mogao stvoriti novi Pogreška objekt moja,
ali ja stvarno ne zanima me to,
Ja samo želim da prođe što god Pogreška je u tome što se zapravo dogodilo
tako da mogu proći na ovom povratni.
I samo da bude jasno, povratak nije strogo potrebno.
Ja u biti želim to učiniti ali ja sam htjela sada ne "vratiti;
/ /, Tako da nema više kod ovdje izvršava ".
Dakle, opet još jedna zajednička Konvencija u JavaScript,
iako niste vrati vrijednost po sebi,
Želite li proći na vrijednost funkciji povratni
ali onda želite zaustaviti izvršenje
funkcije si ti u, trivijalne način
za to je upravo nazvati vratiti ovdje.
No, tu je sve u redu,
mi smo samo radi povrata uzvraćanje pogreška iako se događa
da se vrate u nedefiniranom vrijednosti.
U redu, to ne vratiti vrijednost najvjerojatnije.
Sve mi je stalo je ukrcaj daljnje izvršenje.
Dakle, moj stapaju od njih dvije linije je samo stilist
konvenciji samo imaju broj linija
koda sam napisao 2-1.
Dakle, što još?
Ako nema pogrešaka -
zapravo biti jasno Također sam mogao izbjeći
da se radi, ako drugi ne.
Ali opet, još jedan zajednička paradigma je provjera
za svoje pogreške pri vrhu, a zatim samo vratiti nego i dalje
da uvukli kôd sa drukčije i drukčije i drukčije.
Dakle, ako to nije file, sad, znate,
Želim nositi s tim Malo posebno.
Dakle, ovdje kao u Javi ili C + + ili nekoliko drugih jezika,
evo kako se instancu prigovoriti vrsta pogreške prolaz
u zadanom poruke da ne sliku
i to je samo nešto proizvoljno.
Ali ja signalizaciju pogreška moja.
A što znači ovo zadnje linija vjerojatno znači?
Sve je dobro.
Ako prođe u null za Pogreška parametra, koji samo znači
po konvenciji je sve u redu.
Dakle, to znači da ono što će se dogoditi logično?
Ako je prošlo null na povratni
to znači da ovaj anonimni Funkcija je uspjelo
da se tako izrazim.
Dakle, ono što bi trebalo serije metoda prethodi i sada ne temelji
na moje verbalne definicije ranije?
[Nečujno Napomena]
Pomicanje na sljedeći jedan, zar ne?
Ako se vratio nije nula vrijednost, to bi samo pobaciti
i nema više anonimni Funkcija će biti pozvan.
No, budući da nije, onda to će biti pozvan sljedeći.
Dakle, logika je ovdje skoro isti kao i prije
, pa ćemo vidjeti kako se čisti ovo dalje je u trenutku.
Shvaćam da je to neka vrsta puno
apsorbirati sve verbalno i vizualno.
Ali sada primjetiti, drugi anonimna funkcija da želim
izvršiti u nizu je pokušati pročitati datoteku.
Nazovite ovaj callback kad ste spremni.
Ako postoji pogreška, samo signalizirati ga putem povratni poziv
, tako da je ostatak ove stvari prekida.
Inače povratak null.
Ali zašto sam ja prolazu u dva argumenta?
Pa ovaj put, ako sam pročitao datoteku i vratiti
kao varijabla zove podatke,
Želim samo označi sve je dobro po povratku null
prvi argument.
Želim da se vrati stvarna podatke kao drugog argumenta.
Jer ako sam čitati dalje u dokumentaciji,
Primijetit ovaj zadnji komad koda uglata zagrada znači da je
kraj niza.
Bilo je samo dva anonimna funkcije u ovoj seriji.
Ako je došlo do pogreške ovdje, onda Znam da je jedan od linkova
u tom lancu, tako govoriti uspjelo.
Dakle, drugim riječima, ova pogreška će biti predmet Error
da je nula, ako bilo od ovi momci nisu uspjeli.
A ako je to slučaj, ja sam samo će iskočiti, a ja ću
reći 400 koji znači zahtjev uspjeti,
to je vrlo općenito poruka o pogrešci.
A onda, ja ću ispisati poruku o pogrešci.
Dakle, ja ne gnjavi biti super analni ovaj put,
Neću razlikovati između 500 i 404 i 403,
Ja sam samo vrsta slijepo val ruku
i kažu nešto je pošlo po zlu.
No, ako ništa učinio pogriješiti,
Idem poslati to res.end donošenja ove podatke.
Sada to izgleda pomalo zagonetan.
Ali opet, ako sam pročitao dokumentacije,
Drugi argument za taj završni, konačni povratni poziv,
tip koji samo je izvršen Jednom serija je učinio
izvršenja ili dio postoji o, to će biti niz
od svih drugih argumenata
koji su prošli za povratni poziv.
Sada ispada da povezati samo u ovoj seriji
koji zapravo povratak u sekundi Argument je ova ovdje.
Zato ću izdvojiti od na skok vjere jednostavno koristiti pretpostavimo
na trenutak da Posljednji je metoda
koji vam daje zadnji elementi niza.
Budući da je ovaj niz koji je se prošlo
za mene ima dva indicies, nula i jedan.
To je samo nula nema vrijednost jer je taj momak vraća -
ne prođe u sekundi argument, ali taj tip radi.
Dakle, rezultati nosač nula ništa,
Nosač rezultati jedan sadrži ono što je,
Ako ste pratili zajedno do ove točke?
File, hello, Svijet sadržaj vjerojatno,
pa to je kako sam zapravo ispisati ga.
I neka mi završiti jedan detalj ovdje.
Ako sam napraviti ovu vrstu stara škola, ako želim doći
u posljednjih elemenata, kad bih mogao to rezultati [results.length-1],
to je vrsta old school način
pristupa posljednje elemente - ili je nula indeks polja.
No, kako je u stranu, prisjetimo da sam imao tu knjižnicu
ovdje donja koja je po Konvencija je samo nazvao
doslovno donja lik koji nije posebna,
to samo izgleda cool kao znak za dolar čini za jQuery.
Ovo je samo pomagač Način naglašavaju točku posljednju
koji radi upravo ista stvar.
A ako ste nikada koristili Prije naglašavaju JS oba
za strani klijenta kodiranje
i poslužitelja strani je predivno korisna knjižnica
da što više ljudi opisane to mi se jQuery sadrži sve
metoda, ljudi želio došao sa JavaScript sama.
OK.
>> Dakle, kao što je lijepo mi je i Gledala sam je u seriji,
imate kao povratni kao argument?
>> Da.
>> Kao što pa kad zapravo kao pritisak da se u,
i kao što se to radi znači kad se samo
kao Uzvratni poziv, a zatim se to sviđa -
[Nečujno Napomena]
>> OK, dobro pitanje.
Dakle, neka mi podići async Glavna stranica ovdje
ili dokumentacija o GetHub.
Dakle, ovo je kanonski struktura.
Ako poziv koristite ovo Posebno metoda serije,
postoje dvije velike dijelove za njega.
Jedan je niz anonimne funkcije
i dva je konačna povratni poziv funkcija koja je zapravo
pogubljen u vrlo kraj niza.
Sada, ako mi povećavanje malo bliže na prvi
od onih velikih stvari, niz anonimnih funkcija
po zahtjevu ova Dokumentacija momak ima
biti anonimni funkcija koja traje
u jednom argumentu naziva povratni ili Foo ili bar, to ne smeta
, ali je on to zove povratni poziv.
I to je neka vrsta vaše cvrčaka da vas Shake Shack ruke.
To je način na koji se možete vratiti vrijednost
na kupca, jer vam može ne samo doslovno ne vrate.
Morate to učiniti Put ove povratni poziv.
Jer ako unutar toga Funkcija je neki spor pokrenut
Kod poput baza upita, čitati datoteka iz datotečnog sustava,
ne želite čekati tamo i blokirati sve ostale,
želite nazvati uzvraćanje.
Dakle, to je doslovce naziv argumenta.
No, kao u C, što imaju funkciju naputke.
U Java imate metode referentnog sustava
i isto ovdje u JavaScript.
To je varijabla ali njen tip je funkcija.
Tako jednostavno pisanje svoje ime je li povratni poziv ili foo
ili bar, zatim otvorene zagrade te u neposrednoj blizini zagrada,
ti si izvršavanju da na toj funkciji.
I prolaze null koji znači null greška i jedna
što znači da je to Podaci na koje se želim proći u.
A onda komad da bude jasno, ovo je još jedan povratni poziv.
I to se ne zove povratni poziv,
to samo konceptualno je funkcija metoda povratni poziv
jer se zove po definiciji
od ovog autora knjižnici kada Cijela serija je završena
ili njihove podskup ako Pogreška se dogodilo prije.
Dakle, naziv povratni funkcije, pozivom povratni funkciju,
naziv za povratni poziv funkcije, pozivom povratni funkciju,
razlikuju povratni poziv funkcioniraju svi zajedno.
>> Mi sada imamo kao definirati uzvraćanje?
>> Ne, jer taj momak će proći u vašem polju
od anonimne funkcije,
kazaljka na kodu on želi izvršiti.
Točno, u redu.
Dakle, molim te reći da Kod dobiva malo jednostavnije.
Dakle, to može.
A ako ste poput mene, uzeti udobnost u barem znajući,
je potrebno neko vrijeme da se naviknuti na to.
Ali možemo očistiti ovo gore malo,
da ne bacaju previše na vama ali evo još jedna varijanta
i njegove druge metode
u istom knjižnici zove slap.
Upside od kojih je za razliku od serije u kojoj svaki
onih anonimni Funkcije izvršiti suštinski
neovisno svaki od drugih.
Vodopad kao što ime sugerira omogućuje najgornji funkcije
na vrsta prođe u vrijednosti na donjem funkcije,
Otprilike kao kaskadu vode.
Dakle upside toga je u tome što ja mogu vrsta
o koristiti to moju korist.
U async.waterfall, primijetiti sljedeće.
Ja samo mogu nazvati fs.stat prolazi u putu
da želim doći statistika o.
A onda se sjetiti prije nego što sam imala anonimnu funkciju
da je imao dva argumenta griješiti,
esults a onda sam nazvala povratni poziv funkcija ručno?
U drugu riječ je samo da bude Jasno, podsjetiti da je ranije
async u 2, ja sam sve od ove neugodne rada.
Nazvao sam fs.stat prošao u P,
proglasio moja anonimna funkcija.
I onda provjeriti, ako je pogreška Ne null onda sam to učinio,
drugo sam to učinio, cijela Ljepota sljedeće konvencije
kao u node.js je da se u povratnom Funkcije općenito su namijenjena
uzeti barem jedan argument, Pogreška objekt slijedi nulu
ili više korisnih vrijednosti.
Dakle primijetiti paradigmu ovdje,
ovaj povratni poziv funkcija sam proglašenja slijedi točno
paradigma da je ovaj tip je async knjižnica radi.
Koji je to reći, zašto ja Ja provedbi svoju por
metoda kada autor ovog Knjižnica doslovno mi hendikep
na pladnju da se tako izrazim, povratni poziv funkcije mogu koristiti?
Dakle, ja samo mogu proći u referenca dao mi
, tako da se odmah, moji nekoliko redaka
koda postao jedan redak koda.
Sada, gdje ćemo ići s tim?
Sljedeći funkcija koja Želim da izvrši,
Sljedeći anonimni funkcija u ovom polju
funkcija radi sljedeće.
Obavijest prva postaja je Prvi argument.
Dakle, nešto što ima promijenio već.
Sad, ovaj momak koji je napisao u knjižnicu -
i ja govorim momka jer je momak.
Ovaj tip koji je napisao ovu knjižnicu je dokumentacija jamstava
da li ova funkcija ovdje prolazi mi vratiti predmet pogrešci
ili null slijedi komi odijeljen popis drugih vrijednosti,
on će se pobrinuti da oni ostale vrijednosti su ruku
na ovom anonimnom funkciji kako bi s lijeva na desno.
I ono što je nekad bila samo povratni poziv funkcije sami jednostavno
postaje posljednji takav argument.
Sad, ne znam tko sam s naglaskom na samo znaš.
Ali sada, ono što je preuzeti ovdje daleko?
Dakle, mi znamo iz dokumentacije
ili prije par primjera
da fs.stat konačnici očekuje povratni poziv s dva argumenta,
Pogreška objekt koji je Pogreška predmet ili null slijedi
upućivanjem na stats prigovoriti.
Dakle, ako mislim o tome, Pogreška objekt coma stats prigovoriti,
koji se uklapa u paradigmi od te osobe knjižnici.
Dakle, ja jednostavno ne može reći, jer I nema drugog argumenta
to je to - to se događa koji donosi fs.stat
na povratni je griješiti, stats po definiciji ove knjižnice,
Ja mogu staviti drugi Argument ime ovdje
ili što god to mogu preimenovati
ako želim slijediti od strane povratni ovdje.
Dakle, ja mogu proći jedan Cijenimo odavde do ovdje.
Sada, sve to kod iako doduše pomalo zagonetan je
barem kopirati zalijepiti za Najveći dio od prije.
Jedina razlika je obavijest Ovdje sam proglašenju Error
prigovoriti, a sada želim da se malo ljubitelj.
Ja zapravo želim znati što Došlo je do pogreške, pa ću
ugurati unutar ovog objekta a imovinu samovoljno zove kod
, tako da znam da je ovo nije file
koja bi trebala biti bez nje, to je HTTP 403.
Dopustite mi da se sjetiti da je prije I prođe objekta greške
za povratni poziv.
I onda na kraju pokušati čitati datoteka, tako da u ovom slučaju,
Slap, ja sam slomljena Kod sa dva velika koraka
u tri manje koraka.
Obavijest ljepotu ovdje,
Ja mogu nazvati fs.readFile prolaze na putu.
I onda tvrdi dio psihički, je li samo proći
u tip je povratni poziv.
Što on mi predaje, sam će proći na fs.readFile.
Budući da smo svi držeći na iste konvencije,
Prvi argument za povratni poziv Pogreška predmet ili null slijedi
komom ili odvojeni Popis korisnih stvari.
Dakle, što to znači da je sada, a ako sam pročitajte dokumentaciju ću znati
ovaj, posljednji povratni poziv, ovaj tip ovdje vani
od uglate zagrade ide biti donesen u pogrešci objekta
ili null što bih trebao provjeriti kao i uvijek s ovim kodom ovdje.
I onda po definiciji ove metode
u dokumentaciji tip je, Zadnja vrijednost vratio
od zadnjeg postupka u mom anonimnom niz -
moj niz anonimnih funkcija.
Dakle, ono što ne cita povratak sliku
i ja sam koristeći povratak labavo sada.
Mislim ono ne čita file pass kao argumente
metodi povratni njegova ruku?
Dva argumenta, prvi je Pogreška predmet ili null,
to je gotovo uvijek će biti odgovor.
A druga stvar je idući da se ono za čitanje datoteke?
Sadržaj datoteke, podatke kao što smo ga pozvali ranije.
Dakle, jednostavnim progla griješiti, rezultat,
i provjeriti za pogreške ovog je vrsta dosadno danas.
Inače, ja res.end prolaze u tom rezultatu.
To će nesumnjivo Ne sinkronizirati savršeno
dok se zapravo napišite ga sami.
No, za sada, uzeti udaljen najmanje činjenica
da je to očito zajednička paradigma, pri čemu ako se
a autori knjižnicama sve nekako štapom
s ovim konvencije metoda povratni.
I prvi argument Pogreška predmet ili null.
I druga i treća
i četvrti objekti su stvari nam je stalo i mi vrsta
u skladu s pravilima i dokumentacije.
Počeli smo s kodom koji iskreno je prilično ružno.
I iako najnovija Primjer je iskreno vrsta teško
završiti svoj um okolo, to je barem vizualno,
Izgleda kao da je puno čvršće.
A nakon što se udobno s njim, to je tako puno lakše
i to je tako mnogo manje skloni bube od toga prethodnom primjeru.
Dakle, neka mi pokaže Jedna stvar ovdje.
Ova je verzija od tri.
I - Ne, ostavimo ovo sam.
Pusti me u par ostala zadnja stvari kao mozgalice.
U redu, tako da u server 2.
OK. Prvo, bilo kakva pitanja, Znam da je ovo dosta
ali ti htio više upute, tako?
Nisi rekao dobri upute nužno.
Da?
[Nečujno Napomena]
Točno, ti si u biti blaži za operativni sustav
shvatiti kako žonglirati sve od tih kuglica u jednom
čitanje iz datoteke, čitanje iz baze.
I to je to JavaScript server Sam je to jedan navojem.
A u biti i zapravo,
ima jedna slika Nisam povratiti,
i to nije nužno sve to rasvijetliti
ali možda ćemo dati li mentalni model.
JavaScript sama i čvora
posebno je to tzv događaj petlje.
Čime, možete misliti od node.js, programa,
je doslovno kao klapa.
To je samo divlja petlje, čeka i čeka i čeka,
u potrazi za zadatak završi.
A zadatak može se, idite dohvatiti nešto iz baze podataka
ili ovdje je vrijednost od baza podataka ili ići dobiti ovu datoteku
s diska ili evo zahtjev korisnika.
Svaka vrsta događaja, baš kao i preglednici događaj driven,
kako poslužitelja side event driven.
A svaki od tih stvari predstavljaju događaje.
Dakle, netko u node.js, samo Napisao beskonačnu petlju,
Velika divlja petlje, čeka za stvari dogoditi.
A što se stvari ne dogodi, to završava u redu, zar ne?
Dakako, baze podataka možda vratiti vrijednost.
I datotečni sustav, operacijski Sustav može vratiti vrijednost
u otprilike isto vrijeme ali vjerojatno će
biti neki naručivanje za njih.
I node.js će imaju suštinski redu
kao veliko polje ili vektor, neki struktura podataka
da puferi sve od tih stvari.
Jer to može doslovno samo nositi jedan od njih u isto vrijeme.
Dakle, kada ste, programer,
pisanje asinkroni JavaScript Kod koriste asinkroni
funkcija, koju omogućuje ova Takozvani događaj petlje ići
na sljedeću krpelja, zar ne?
Dakle, dok se odmah vratiti kao i sve
ovih asinkroni metoda ne sviđa čitanje datoteka i stat,
oni odmah vratiti jer se u povratnom kraju
vrati.
Čim se vratite,
to znači da netko drugi ne može dobiti popped off dionica ovdje
ili da se može dobiti popped off ispred red ovdje.
I tako, ne postoji u Činjenica serialization
o svemu što se događa,
iako sve te stvari može se događa paralelno
na multithreaded sustava.
Ali se i node.js poslužitelja su trčanje
kao jedna nit.
A dolje strana koja je t ti ne nužno max
iz vašeg računala sposobnost je kao posebno
Ako imate 16 jezgri ili čak 2 core računalo
a vi ste samo trčanje jedna instanca čvora.
Ali, ako ste ponovno uzeti nešto poput 161,
ste izbjegli veliku noćnu moru glavobolje, kada je u pitanju
za utrku uvjete i brave i semafor
i pisanje doista multithreaded koda,
pa upsides i mane.
OK. Dakle, natrag kod ovdje, neka mi predložiti da počnemo
pojednostaviti stvari malo.
Vidjeli smo jedan server malo Prije koji izgleda ovako.
Dakle, to je nedvojbeno prilično jednostavna.
No, baš kao iu svijetu PHP, tu su okviri
kao Laravel a tu je stvari kao što šina i Django,
Ista stvar u node.js svijetu.
I mi ćemo potrošiti više Vrijeme na to u srijedu
iu sljedećem projektu.
Ali ako idem u server 2 katalog,
primijetiti par paradigme ovdje.
Dakle, ovo je - tu ide da se ekvivalentna Primjer
ali to je pomoću Okvir naziva express.js,
koji je besplatan open source softver poput šina i Django,
kao Laravel, to je Upravo u konačnici ide
da se pridavalo dovoljno pozornosti danas Jer smo bili pisanje
takve jednostavne primjere.
Ali, vjerujte nam.
To će vrlo brzo postati vaš prijatelj
jer će uštedjeti ti puno TDS koda.
A zajednička paradigma express.js prijava
da imaju app.js ili server.js datoteka koja sadrži logiku
vašeg programa ili Najmanje polazna točka.
Možete imati više datoteka.
Čvor modul poddirektorij koji ima knjižnice
koje ste preuzeli kao async
i izraziti sebe u drugima.
I onda package.json, package.json izgleda ovako,
a vi ga možete stvoriti ručno ili alate ga izraditi za vas
i to je doslovno json sliku
i zanimljiv dio je ovisnost ovdje.
Baš kao u Laravel, što je da je prodavač imenik
a vi morali brinuti o paketima i radi -
zapravo ažuriranja s Obrtnik ili slične naredbe,
You knjižnice su instalirani,
na sličan način s package.json ovdje i upravljanju knjižnicama
i verzije koje vam je stalo.
Dakle, ako imam package.json, Ja jednostavno ne NPM,
Čvor paket Manger instalaciju, to će automatski tražiti
na toj package.json datoteku.
Pogledajte i uvjerite se, to sam imati najnoviju verziju
svih distributera modula
u čvoru naglašavaju modula katalog ovdje ili možda
na neki roditelj ili predak imenik.
A ako ne, to je će ih preuzeti
i vidjet ćete hrpu
od HTTP stvari ide preko žice.
Tako na primjer, neka mi pokazati vam sadržaj
čvora modula samo izraziti.
Dopustite mi da ide naprijed i hrabro brisanje čvora module
, tako da sve što imam sada je to.
A ako sam NPM nemojte instalirati, vi ćete vidim da će to pročitati
da package.json datoteku i vidjeli smo izlaz slična
to u Laravel svijetu.
To je skidanje cjelinu hrpa stvari, a to je
jer express pak ovisi cijela hrpa
drugih naroda knjižnicama.
Dakle, svi oni su neka vrsta se skinuti rekurzivno.
Do sada, ako ja radim u LS opet,
Evo mog čvor modula Natrag
i izraziti kao back.
Dakle, to je samo način pojednostavljivanja upravljanja paket.
Sada, ako pogledamo app.js datoteka, to se događa
da se na vraćanje Naš najstariji web poslužitelj
gdje smo samo pljuvati out "Hello, World".
Ali primijetite paradigme ovdje,
Prvi tražimo izričitog modul, onda imamo ovu liniju
koda koji znate Iz dokumentacije.
Vi doslovno liječenje koje modula varijabla u funkciji,
tako otvorena zagrada u neposrednoj blizini zagrada znači izvršiti ga.
To će očito vratiti nešto idemo
općenito nazvati aplikaciju.
Kako to radi?
Ja stvarno ne znam.
Pustit ću da netko drugi, znate, u ekspresnom svijeta pišu da.
Idem sad stati na njegovog ili njezinog ramena kako
da bi moj zahtjev trčanje malo jednostavnije.
Evo, ja ću slušati Na toj luci
koji bi mogao biti najveći ništa.
I ovdje je kod koji je možda i više podsjeća sada
od Laravel i routes.php.
Dakle, ovo je večera jednostavna, ja sam Upravo će odrediti rutu
za slash zvijezda, tako da je sve koja će se apsorbira
ovaj zahtjev rukovatelj.
Paradigma za zahtjev rukovatelja je njegova anonimna funkcija
sa zahtjevom argument
i objekt odgovor baš kao i prije.
I res.send u izričitim sredstvima šaljete kod slijedio
koji god želite poslati.
I naravno, možete učinite nešto ljubitelj
by zapravo slanje datoteke ili HTML
ili dinamički generirane sadržaja.
No, za sada, sve što smo učinili je ispljune Hello, World.
Ako idemo u poslužitelju tri, to je još samo ljubitelj
da vam pokazati neke funkcionalnosti.
A mi ćemo vam pokazati čak i seksi verziju
ovo je u srijedu.
Ali, ako ste ikad čuli od Socket IO možda,
kako mislim Jonathan ili je netko prije rekao,
jedna od stvari čvor u stvarnosti
za njegov realnom vremenu ponašanje, zar ne?
Razmislite o PHP-u MySQL, ako su za provedbu chat poslužitelj
u PHP-u pri čemu su dvije osobe mogli otvoriti prozor preglednika na foo.com
a zatim početi IMING svaka drugo, Alice u jednom prozoru,
Bob je u još jedan, tako da je svaki od njih sebe vidi
ili njezine poruke u drugi prozor.
Kako bi to učinio u PHP i MySQL?
Korištenje ili ne koriste Laravel vrsta nematerijalnih, možete imati
kao index.php datoteke.
I moraš imati - u U nekim slučajevima to mora pljuvati
izvan forme, pa je će biti HTML oblik
da vjerojatno ne podnosi putem normalnog slanje obrasca
ali Ajax vjerojatno, zar ne?
Dakle, o dostavi rukovatelj, pa upišete u tekstualnom polju,
hit ući i onda dobiva poslana na poslužitelj putem Ajax.
Što vi činite učiniti na poslužitelju?
Dakle, imaš index.php
ili nešto dot PHP koji je primila je u HTTP parametra
od korisnika, Alice i Bob instant poruka, što da radim
s njim kako bi ga propagirati Bobu ili Alice, odnosno?
Ja vas znači doslovno imati alate s kojima
to učiniti u vašem min.
Dakle kao što biste učinili?
Imate jednu minutu na provedbu ovog programa.
Da?
[Nečujno Napomena]
Savršeno. Desno, pa imaš bazu podataka.
Znamo malo malo o MySQL.
Dakle, imate tablicu to je poruka,
Možda ima vremena Pečat, korisničko ime,
Tijelo poruke Sam stvorio da,
izmijenjena da i sve to.
Dakle, možete pohraniti u bazu podataka.
I pretpostavljam da Alice šalje Prva poruka, kako se Bob dobiti
ta je poruka danas iz baze podataka?
>> To bi moglo biti neke Ajax odgovor koji se stalno događa
natrag u bazu Najbolje se [nečujan].
>> Točno.
Dakle Bob code koji je kod Isto kao Alice je samo neka vrsta
simetrične odnosa
Bob je browser ima Ajax kod to je vjerojatno možda svaki 30
sekunde povlačenjem poslužitelja putem Ajax sync,
postoje nove poruke?
Ima li novih poruka?
Svakih 30 sekundi ide biti vrsta suboptimal
jer on mora čekati čak
ako Alice doslovno Upravo je poslao poruku.
Dakle, Bob preglednik mogli svaki drugi pogodak poslužitelj.
No, to znači Alice browser je udaranje poslužitelj
svaki drugi.
Što je s Charliejem [Pretpostavlja pravopis]
David [pretpostavlja pravopis] i Edward [pretpostavlja pravopis]
i svaki drugi pismo abecede?
U čemu je problem ovog pristupa?
Puno hitova pretjeranih -
Mislim da si samo učinkovito Doziranje svoj vid
ili DDOSing, Distributed Denial of Service napada
na svoju stranicu, tako da sve
od tih korisnika izvoditi JavaScript kod koji je samo pinging
pakao iz vašeg poslužitelja čak i ako je proizvoljan broj,
80 posto vremena nitko nije rekao ništa
u sobi za razgovor.
Ali, vi ste samo provjerom kako bi bili sigurni od takvih.
Dakle PHP u puno jezici su samo ne dobar
za komunikaciju u stvarnom vremenu.
Budući da u PHP opoziva postoji središnja memorije, zar ne?
Imate session objekte što stvara iluziju
središnje pohrane, ali to je na po korisniku osnovi.
Vi ne morate globalnu memoriju kao što to u Java servlet
u poznato ili u drugom Okvir radi tako.
Node.js ipak, vi nemate Globalni memorije jer imate
jedan poslužitelj i da 'može sjećam se ničega što želi
o svim korisnicima.
I što je možda još imaju bazu podataka.
No, lijepa stvar o node.js previše je da je puno bolje
nego nešto poput PHP i stvara iluziju
rukovanja višekratnik stvari odjednom.
A u stvari, kao u stranu, možete provedbu chat poslužiteljima u PHP,
ali ti bi obično učiniti nešto što se zove dugo glasovanje
pri čemu ne ping poslužitelja svaki drugi.
Vi ping pronaći poslužitelj poslužitelj ne reagira na vas
za gore od 30 sekunde, što doslovno sjedi
u petlju čekanja i čekanja.
I poslužitelj provjerava da li Tu je novi podaci u bazi podataka
i tek kada to ne vidi, "Oh, Ovdje je poruka Bob "
to odgovoriti na HTP poslužitelj?
Tako učinak u pregledniku je da ikona IE ili Mozilla
ili bilo što samo čuva vrti 30 sekundi na vrijeme.
Ali Naopako je, ne znaš imaju 30 zahtjeva za vezu
u 30 sekundi, imate jedan.
Dakle, to se zove dugo glasovanje.
No, čak i bolje u modernom webu preglednici nešto što se zove
WebSocket, koji uzmete CS143,
učinkovito možete napraviti TCP vezu s klijentima
kao preglednik na poslužitelju a zatim objesiti na njega
bez gotovo kao mnogi izvori
kao HTTP tradicionalno mogli učiniti.
I Socket IO je node.js knjižnica
, što ga čini mnogo lakše napraviti utičnicu veze
ili iluzija na za stare preglednike
tako da možete provesti ovo u realnom vremenu funkcionalnost a.
Dakle, ovdje je primjer.
Ova stvar do vrha dobiva malo složeniji
, ali je uglavnom kopirajte i zalijepite iz socket.io 's dokumentacijom.
Evo sada više precizan zahtjev rukovatelj.
Ako zahtjev korisnika Slash, što sliku ću
biti očito služe se s njima?
Index.html.
I tu je neki novi neki ovdje potok
koje ću vam pokazati u samo nekoliko trenutaka.
No, to je samo još jedan način
od grabbing podnijeti Malo učinkovitije
nego samo radi fs.readFile.
To je malo pametniji pogotovo za velike datoteke.
Dakle, ne duljimo, Te linije samo služiti
se datoteka pod nazivom index.html
koji je za sada pretpostavljaju sadrži HTML oblik kojim Alice
i Bob moglo komunicirati.
Konačno, io.sockets.on, tako da je ovo dolazi iz ove linije ovdje.
Dakle, ja samo čitam Dokumentacija io.socket mi daje
pristup tzv WebSocket s preglednikom,
između pregledniku i poslužitelja.
Slušam za posebna Priključak događaja, dakle
kada korisnik prvi put pogodi poslužitelj pokušava
otvoriti ovu vezu, ja sam će nazvati ovaj poziv.
I sad, idem učiniti sljedeće.
Svakih pet sekundi, ono što ću učiniti?
Idem se emitiraju ili emitiraju ako se sjećate ispočetka,
grafički jezik bi da li se prijenos blokovi?
Dakle, ti ćeš emitiraju
ili pokrenuti događaj pod nazivom samovoljno od poslužitelja.
I to će se sadržavati Ping poruku
i tekući datum.
Dakle, to je stvarna chat poslužitelj koji Alice
i Bob mogu koristiti, ali to je neka vrsta automatizirani chat poslužitelju
gdje su poruke pings samo vrsta sonara.
To je samo danas u vremenima koja su šalju svakih pet sekundi.
Dakle, ako sam zapravo pokrenuti ovaj stvar - i to je to.
Da bude jasno ovdje, obavijest ovo je samo prijavite se ovdje.
Dakle, dopustite mi da slijep na to.
Dopustite mi da to čvor app.js.
Pusti me na moj pregledniku.
Reload početnu stranicu ovdje.
[Pauza]
I neka mi zatvoriti inspektora.
Svakih pet sekundi, ja imam demonstracije, iako ne
interaktivne za čovjeka
o nečemu što je događa asinkrono.
U obavijesti preglednika, nema ikona vrti.
To je pomoću ljubitelj značajku Chrome je u modernim preglednicima
održavanja utičnicu Priključak ispod haube
i to je ono što se zove općenito pub / sub modela,
objavljivati ​​/ pretplatite modela, gdje nismo učinili
da je vrlo eksplicitno ovdje.
No, ono što je lijepo o tome Općenito pub / sub paradigma
da možete imati jednu izdavača.
U tom slučaju Središnji server i sve
pojedinca preglednici su klijenti.
Alices i Bobs od Svijet se pretplatiti na njega,
tako da možete prenositi poruke među bilo kojim brojem korisnika.
I iako opet smo ne vidim interaktivnost,
imali smo možda 12 redaka koda upravo to učiniti.
I to je vjerojatno nije prijestupna zamisliti kako možda bič
iz index.html datoteku da ima pravi HTML obrasca,
Malo jQuery koda s Ajax da ne šalje dnevna
ali samo šalje god Alice ili Bob tipa na poslužitelj
te server će ga proslijediti out.
I obećajem da nazrijeti na jednu stvar samo
da zafrkavati s tim.
Ako idemo u potok nula i jedan,
vidjet ćete kod koji je samo Malo drugačiji ovdje.
Samo da ste ga vidjeli, to je alternativa
onome što sam nazvao fs.readFile metoda ranije, pri čemu,
možete reći node.js, "Idi pročitati ovu datoteku u memoriju.
Ali, ako je velika samo dati mene komad na vrijeme. "
I možda znate iz CS165
ili 161 će datotečni sustav imaju različite
svojstva performansi.
Možda želite pročitati u blokovima od 512 bajtova
ili 2 kilobajta ili bilo što drugo.
To je optimizirati način vratiti datoteke iteratively
, tako da možete ga pljuvati se malo brže
preglednik ili na tko kraj klijent.
Dakle, ogromna količina sadržaja danas i idemo roniti
u više detalja u srijedu s Timom [pretpostavlja pravopis]
posebice gledajući kako mi može prevesti neke od ideja
iz prve polovine Naravno Laravel i modeli
u knjižnicu da je on sam napisao je pozvao Bookshelf.js
koja je postala sve popularan u zajednici
jer vam daje većinu toga,
Ako se ne više od Funkcionalnost elokventna
koji je podsjetiti da je Knjižnica uvid Laravel,
tako da više na to i još više kako
razviti punopravnog aplikacije u srijedu.
Vidimo se onda.