>> Visas tiesības.
Tāpēc cliffhanger bija, kas ir node.js kā jūs to pazīstam šodien?
Kaut ko? Yeah?
>> Tas bija kā ietvars rakstot JavaScript
pieteikumi plašāk -
>> OK, kas darbojas.
>> - Es zinu, piemēram, kopīgas izmantošanas, piemēram, -
vai kaut kas jums var darīt, ir, piemēram, -
[Nedzirdams Piezīme]
>> OK labi.
Jā, tāpēc tas ir pamats.
Tas ir motors, ar kuru jūs var izpildīt JavaScript kodu
servera vietā.
Tas var nozīmēt Vienkāršākais lietas
piemēram, rakstot komandrindu Skripts nav Python vai Bash
vai Ruby un PHP, bet tikai JavaScript pati
un izpildot to mirgo komandrindas.
Vai jūs faktiski var darbināt tā laikā web serveri.
Un faktiski laikā node.js pati,
šis regulējums ir visai ķekars Bibliotēku kuru vidū ir
HTTP serveri iebūvēts.
Tātad, jūs faktiski var rakstīt serveri, jo mēs redzēsim
tikai brīdi, super viegli , tikai lai saprastu mazliet
HTTP un TCP un ostu.
Un jūs varat nārstot klausīšanās web servera bez Apache,
bez Microsoft IIS.
Bez jebkāda cita instalēto programmatūru,
Jūs varat nārstot šo un klausīties vairumā jebkurā ostā
uz sistēmu, kas jūs esat atļauts.
Tātad gadījumā, un norāda, ļaujiet man iet un atvērt
līdz šim, piemēram, servera 0.js.
Tā ievēroju, ka top Šis fails, tikai ķekars
un neinteresantas komentārus, un tad tur ir pāris
reprezentatīvo rindas kodu ka mēs redzēsim recurringly.
Tātad, VAR HTTP izpaužas pieprasīt "HTTP".
Tā iebūvētas node.js " infrastruktūra ir visai ķekars
Moduļu kas ir patiešām vienkārši bibliotēkas un viss ir sava
nosaukuma telpa ar unikālais identifikators
kā šis viens ir "HTTP".
Tā, ka, piemēram, ir daudz valodas, piemēram, Java un C + +
un C, tikai tad, kad importēt vai ietver
vai mezglu runāt nepieciešama modulis dara savu bitiem.
Un visi atmiņa prasa saņemt piekrauts
RAM un tādēļ izmanto.
Tātad, jūs veida slodze šajā bibliotēkas vai moduļi pēc pieprasījuma.
Tas nozīmē, ka iet uz priekšu, un ir nepieciešama
šai programmai HTTP bibliotēka,
un atsaucas uz šo bibliotēku, Panākot mainīgo sauc HTTP.
Bet tas kreisā simbols varētu ir saukta jebkas, foo,
bārs, BAZ, tas nav svarīgi.
Tātad, atšķirībā no C + + un Java un C, kur, kad jums ir nepieciešama
vai importēt bibliotēku, tas vienkārši veida
un kļūst par pasaulē pieejamu,
node.js moduļi ir ciešāk namespace.
Tāpēc, ka pašu - ka funkcionalitāte ir pieejams tikai tajā brīdī
veidā šī mainīgā nosaukumu.
Jūs nevarat vienkārši sākt rakstīšanas metodes, kas pastāv
tajā tiesības veids kas, iespējams, ir labi,
jo tad jūsu namespace nesaņem gandrīz tikpat pārblīvēta
kā daudz valodu.
Labi, tāpēc tagad kā kopīga liecina, radot HTTP serveri
Jonathan [pieņemts pareizrakstību] bija iespējams, ir burtiski
tik vienkārši, kā zvanot izveidot serveri metodi iekšpusē
HTTP moduli.
Tātad, tas ir atpakaļ atsauces
ar kādu web serveri.
Tas nāca pie Apache, ne vienmēr kā smago svaru.
Šis viena ir nedaudz vienkāršāka.
Un tagad man ir tikai vienkārši darīt dažas lietas.
Tātad, pirmkārt, ļaujiet man ritiniet uz leju līdz šeit
un izlaist apdarinātājs metode brīdi.
Un paziņojums par šo koda rindu,
server.on kas būtībā nozīmē serveris -
klausīties tāpat kā jQuery kodu,
klausīties notikumu sauc pieprasījums
un lietojiet tikai minējums ko man darīt
kad pieprasījums notikums ugunsgrēki serveri.
Yeah?
>> Zvanu funkcijas apdarinātājs.
Tātad, burtiski izpildīt kodu, kas ir piesaistītas
ar šo mainīgo un faktiski ne mainīgais simbolu šeit
kas tas ir simbols atsaucoties uz?
Nu, šis nosaukums darboties šeit
un kopējs acīmredzot aizņem divus argumentus.
Kāpēc divas? Nu, ja jūs vienkārši lasīt nekādu dokumentu
par šo konkrēto moduli, jūs būs teicis, ka kopējs
, kas tiks izmantot, būs pagājis vismaz divi argumenti,
atsauce uz pieprasījuma
un iekšpusē pieprasījuma mēs burtiski nozīmē HTTP pieprasījumu.
Tātad, visiem tiem, HTTP galvenes lai jūs varētu atcerēties
no sākuma semestris vai kādu iepriekšēju klase
vai pieredzi, piemēram, get līniju un uzņēmēja līniju
un User-Agent līnijas, visu, kas ir iekapsulēti un vairāk iekšā
Šā pieprasījuma objektu.
Un atbilde objekts sakārtoti ārzemju datiem.
Tātad, jums ir atsauce uz iebilst, ka notiek, lai ļautu jums
nosūtīt informāciju atpakaļ pārlūku, zvanot metodes
uz šo pēdējo argumentu aicināja Res par atbildi.
Bet tas varētu saukt foo vai bārs, tas ir tikai konvencijas.
Tātad tagad, ko man darīt?
Nu, šķiet, ka iekšā Šīs super vienkāršu web serveri
ka es esmu īstenošanas, es esmu gatavojas darīt šādi.
Es esmu gatavojas rakstīt HTTP header ar statusa kodu 200,
200 nozīmē OK, viss ir labi.
Un tad, es esmu gatavojas nodot acīmredzot.
Kas ir datu tips Otrs arguments uz labo galvu?
>> Tas ir objekts?
>> Tas ir objekts ar cik atslēgas un vērtības?
Tikai vienam no katra, pa labi, viens no galvenajiem vērtību pāri.
Tātad, "satura tips".
Un vienīgais iemesls Es citēju to šeit ir
jo defise varētu būt conflated par mīnus zīmi
vai kaut kas tamlīdzīgs.
Tātad, man ir citēt to šeit, apsvilināt vai pēdiņas.
Bet atkal bieži paradigma
JavaScript kods ir bieži vienu pēdiņām šajās dienās,
resnās zarnas un tad vērtība.
Tātad, tas ir tikai tā saukto prāta tipa.
Tas ir HTTP galvenes kas ir burtiski notiek
būt satura defise veids resnās zarnas Teksta slash skaidrs, ka notiek
jāsūta no servera pārlūku
tāpēc, ka pārlūks zina vai, lai palaistu šo par Raw tekstu
vai HTML vai kā attēlu vai filmu
vai flash fails vai kaut kas cits.
Tagad, kad es tiešām gribu nosūtīt uz ķermeņa lapu?
Nu, vienkārši lasījumā dokumentācija
par atbildes objekta iekšpusē šīs bibliotēkas.
Es redzu, ka tur ir tiesības metodi, un tas prasa virkni,
varbūt citas lietas, bet minimāli virkne.
Un string ir tas, kas ir izspļaut pārlūku.
Šajā gadījumā tā super vienkārša, tā sveiki pasaule,
bet tas varētu būt opne bracket, html, netālu kronšteins,
atvērt kronšteins galvu, netālu kronšteinu un tā tālāk,
tas varētu būt Raw vietu.
Bet mēs esam tur piemēru vienkārši, tikai spļaut
no vienkāršākais prāta tipiem kas ir apstrīdami text / plain.
Un tad response.end tikai nozīmē aizvērtu savienojumu
un nosūtiet viss man ir veida buferēts iekšpusē
šī objekta muguras pārlūku.
Es esmu darījis. Labi.
Tātad, pēdējā lieta Es daru leju šeit
un tas ir nedaudz patvaļīga un domāts, lai būtu forši,
ir es saku serveris beidzot ieklausīties
uz noteiktu TCP pēc noklusējuma portu.
Atsauktu no sākuma no klases, ka pakalpojumi -
vai jūs parasti unikāli identificēt to ar skaitļiem,
AD ir web, 443 ir HTTP balstīta mājas lapas, 22 ir SSH, 21 ir FTP
un 1337 ir tikai patvaļīgi bet tas ir augstāks nekā 1024
kas nozīmē, ka uz lielāko daļu sistēmu, es varu izmantot to
bez nepieciešamības super lietotāju privilēģijas.
Tāpēc tas ir tikai ērts.
Bet 8080 ir off - kopēja viens, 8088, tiešām kaut kas liels
tūkstošos, par kopīgiem bet tas ir tikai vēl elite.
Labi, lai to, kas notiek kad es tiešām palaist šo?
Nu, es ne tikai apmeklēt lapa pārlūkprogrammā.
Šis fails tiek saukts servera 0.js.
Jo atkal, Apache ir Tagad no attēla
par otrā pusē kursa.
Ja es gribu, lai web serveris, man ir nepieciešams, lai rakstītu
un tad palaist šo tīmekļa serveri.
Bet izrādās, ka JavaScript gan uz klienta pusē
un servera pusē ir interpretē valoda.
Tātad, viss, kas man nepieciešams, ir tulks.
Tātad it's - ja uzstāt, lai palaistu mezglu un tad servera 0.js,
Es var vai nevar redzēt daži jauda atkarībā
par to, ko bibliotēkām es esmu iekļauts, nekas, šķiet, notiek.
Bet ļaujiet man iet pārlūku un ļaujiet man iet
ar to pašu IP adresi no maniem CS50 klientiem.
Bet tas varētu vienkārši kā arī mans Mac
vai manu datoru, un pēc tam nospiediet enter.
Kas faktiski izskatās Apache.
Tas ir tāpat kā direktoriju sarakstā mēs skatījāmies
at pirmajā pusē.
Tātad, ko es daru nepareizi?
Jā.
[Nedzirdams Piezīme]
Tieši tā, vai ne?
Tātad, Apache joprojām klausās uz noklusējuma portu 80.
Pat ja es varētu mainīt, ka, Es varētu to izslēgtu visu kopā
bet tas joprojām darbojas.
Bet šie puiši var protams līdzās.
Man vienkārši ir likts resnās 1337 un tad varbūt
vai varbūt nav slīpsvītru pie end, lai piekļūtu šo portu
ka serveris darbojas uz.
Un tagad es redzu, ka Sveiki, pasaule ir atgriezusies.
Un es varu hit papildināšanas, kā daudzas reizes, kā es gribu,
tas joprojām kalpo up lapu.
Patiešām, ja es atvērtu Chrome inspektors, dodieties uz tīklu
un pēc tam pārlādēt visu lapu,
paziņojums, ka patiesībā tas bija pieprasījums, kas tika nosūtīts.
Ja es paskatos Raw avotā,
pamanīt mana pārlūkprogramma sūta visas šīs lietas.
Un tad atbilde no serveris bija super vienkārši.
Ir 200.
Ja tas nav pārāk zems ekrānā,
ir satura tips.
Un tad node.js kārtot automātiski
man piebilda datumu un visiem citiem stuff
ka pārlūkprogrammas parasti sagaida.
Tātad, pieņemsim tikai redzēt maz veselība pārbaudītu.
Ļaujiet man iet atpakaļ uz kodu servera-0.js un ļaujiet man -
Katru reizi, kad es iedziļināties apdarinātājs,
ļaujiet man tikai saka console.log.
("Mums bija apmeklētājs! ').
Man nav nepieciešams recompile vai kaut kā tā,
tas ir interpretēts valodu.
Tāpēc tagad, ļaujiet man iet atpakaļ uz lapas, papildināšanas viens, divi,
trīs reizes un iet atpakaļ pie mana loga.
Un tagad es redzu.
Labi, ka ir dīvaini, Es redzu sešas rindas.
Interesanti web nieki, kāpēc to darīja Es iegūt sešus pieprasījumu ne trīs?
Yeah?
[Nedzirdams Piezīme]
Jā. Tātad, kā jūs varat zināt nedaudz stulba ikona augšpusē
pārlūka joslā, ka daudz
no mājas lapas, ko izmanto spēku būt Harvard cekuls,
tas varētu būt uzņēmuma logo vai kaut kā tā.
Tātad, pārlūkprogrammām šajās dienās veida
gada pārgalvīgi padara papildu HTTP pieprasījums
gandrīz katru mājas lapā, ka jūs apmeklējat pārbaudīt, ja ir
pēc noklusējuma failu sauc favicon.ico
tajā pašā direktorijā fails pieprasīts.
Un ja tā, tas liek ikona tur.
Tātad viss, mēs redzam ir tieši tā.
Un patiesībā, redzēsim, ja mēs var redzēt, nevis veidam
veic tikai, "Mums bija apmeklētājs".
Ļaujiet man iet uz priekšu un izejas.
Un es tikai zinu to no izskatot dokumentus.
Tur ir īpašums iekšpusē pieprasījums objektu sauc URL
kas notiek, ceļš
, kas tika pieprasīta faktisko URL.
Tātad, ja es restart serveri vienkārši atkārtojot mezglu
uz servera 0.js un Tagad izdarītu viens, divi,
trīs un atgriezties šeit.
Tur tas ir.
Slash ir tas, ko es - pieprasīja cilvēka
in favicon.ico ir kāda pārlūkprogramma ir
pārgalvīgi pieprasa.
Bet jautājums nav tik daudz favicon sīkumi
bet kā serveris tiek darbināts.
Yeah?
>> Kāpēc tas ir būt daži pieprasījums?
>> Kāpēc tas ir - pēc būtības, kā HTTP darbu.
Tātad, HTTP var tikai lūgt vienu failu vienlaicīgi.
Pārlūkprogrammas var būt gudri šajās dienās
un saglabāt TCP savienojums ir atvērts.
Ja jūs pārņēma CS143 vai vispār iepazinušies ar tīklu,
lai jūs varētu saņemt efektivitātes pieaugumu
saglabājot tīklu ligzda atvērts
padarot vairāku HTTP pieprasījumus sērijveidā pār to
bet viņi viens fails par pieprasījumu.
Tātad, ja jūs apmeklējat kaut ko līdzīgu -
Es domāju, mēs varam doties uz lielākā daļa jebkuras tīmekļa vietnes.
Ja jūs iet - pieņemsim uzvilkt Chrome inspektors šeit.
Tā var iegūt aizpildīt lielāko daļu lapas.
Dodieties uz cilni tīkla un doties uz www.cnn.com.
Un, kad jūs apmeklējat cnn.com, savā mājas lapā -
pārlūkprogramma diezgan atrociously padara - vēl skaitīšanas.
OK. Vismaz 289 HTTP pieprasījumi atkal un atkal.
Un tas ir iemesls, kāpēc, kad jūs apmeklējat īpaši uzpampis mājas lapas,
viņi ir lēns, lai ielādētu jo visu
Aktīvu viņi iekraušanas.
Tātad, tas izskatās 298.
Tur varētu būt daži Ajax notiek šajā brīdī vai dažu
Aktīvu ir tikai zemas.
Tātad, katrs no tiem ir individuāla pieprasījuma atgriežās
priekšu un atpakaļ, un atpakaļ.
Un tas ir iemesls, kāpēc agrāk, pat ja mēs veida runājām
par to nedaudz fancifully kur jūs varat ievietot skriptu tag,
absolūti padara atšķirība, ja jums ir -
tas sāk ir daudz satiksmes un daudz
gada faili tiek pieprasīta.
Un katrs no tas veido iespējams, attēls, multivides failu,
JavaScript failu, CSS fails vai tamlīdzīgi.
Tātad, mēs esam jau līdz daži 4 megabaiti vienkārši
apskatīt šodienas ziņas.
Labs jautājums.
Labi.
Tātad, kādi ir daži no Upsides gan?
Labi, mēs zinām, kā padarīt Web lapas jau ar PHP.
Un daudzi no jums nāca, lai klases zinot Django
un Python vai sliedes ar Ruby.
Tātad, kāpēc mums vajag vēl vienu valoda un infrastruktūra?
Kas ir node.js īpaši labi, ja jūs zināt?
[Pauze]
Dažas lieta?
Nē? Yeah?
>> Pārvietošanai ziņas.
>> Tātad, izklāšanas ziņas.
Tātad, tā ir taisnība, un tā ir taisnība par daudz tehnisku iemeslu dēļ
un ka node.js un patiešām JavaScript ir īpaši
labi piemērots, lai asinhrono kods,
ja saskaņā ar kuru jūs izveidojat ilūzija
darīt vairākus lietas uzreiz.
Tātad, pat ja viņi īsti notiek sērijveidā,
patiešām vairumā gadījumu, JavaScript gan klienta pusē
un servera pusē ir viena vītni.
Kas, ja jūs lietojat 161 vai pat 61 nozīmē to, ka -
Šīs programmas zina,
tulks var burtiski darīt tikai vienu lietu vienlaicīgi.
Bet tas nav liels kaut kā web serveri
kur jūs varētu būt desmitiem vai simtiem vai varbūt pat tūkstošiem
Lietotāju visi cenšas , lai piekļūtu jūsu mājas lapā
tajā pašā laikā.
Un tomēr, tas liek domāt, ka apstrādes tos vienu
pēc otras pēc citi īpaši, ja daži
no tiem lūguma, kā mēs redzējām CNN varētu prasīt apkalpo
līdz 300 failus, pirms pat nokļūt uz nākamo lietotāju
kurš vēlas redzēt saka ziņas.
Node.js ir labāk piemērota uz vidi, piemēram, ka.
Jo to, kas notiek, ir jebkurš lēnas skriešanas process
piemēram, lasot failu no diska vai meklēšana datu bāzē vai runājot
uz kādu citu tīkla serveri,
kas mēdz būt latentuma, vai ne?
Ja jūs ņemt 61 vai 161 it visiem šāda veida
perifēro pakalpojumu mēdz būt daudz lēnāks
nekā darīt kaut ko iekšā pats RAM un tas pats CPU
proti, ka šajā gadījumā serveris ir faktiski darbojas.
Bet to, kas ir jauka par node.js ir tas, ka jūs varat -
un JavaScript plašāk ir tas, ka jūs varat darīt, kaut ko
un tad saka: "Hmm, tas notiek
veikt man dažas milisekundes vai pat dažas sekundes.
Ļaujiet man veida dakša, ka off, " bet tas nav taisnība process.
Un tad, kad tas ir izdarīts dara ka lēnas skriešanas process
piemēram, satveršanas rindas no datu bāzē vai lasīt failu. html
no diska, tas būs nokļūt atpakaļ uz mani, nevis
par mani, negaidot par to.
Tātad, lai padarītu to skaidrāku.
Šis ir mans līdzeklis padarot šo vairāk pazīstams.
Labi, tāpēc tas ir Krata būda laukumā.
Tas ir sava veida bieži paradigma
lai izskaidrotu asynchronicity.
Tas ir tiešām labs piemēram, tāpēc, ka Shake Shack
un Tasty Burger ir ļoti lēni par to, ko viņi dara.
Bet jautājums ir, ka viņi ļoti labi, ņemot pasūtījumus
un ņemot savu naudu pēc tam, kad kas jūs gaidāt jūsu pārtiku.
Tātad, tas ir faktiski labāk dizains nekā alternatīva.
Jo domāju, ka jūs ieejat veikalu, piemēram, šo un jums
uz priekšu no līnijas, un jūs ievietots jūsu pasūtījumu, un jūs vēlaties
ar Bürger, kā vislabāk varu pateikt, tas aizņem vismaz piecas
vai vairāk minūtes faktiski iegūtu Bürger.
Tātad, tas būtu sava par sliktu uzņēmējdarbības modeli
ja, kamēr jūs gaida jūsu Bürger, Alice [pieņemts pareizrakstību]
un Bob [pieņemts pareizrakstību] un Charlie [pieņemts pareizrakstību]
un visi pārējie ir rindā aiz jums
un jūs burtiski bloķē līnija gaida jūsu pārtiku.
Tātad, protams, pie Shake Shack
un citas ātrās ēdināšanas vietas nav to izdarītu,
viņi kaut kas līdzīgs šim.
Viņi jums svilpe.
Un viņi veida nosūtīt jums pa ceļam.
Un tie zvanu jums atpakaļ padarot šo maz lieta vibrēt
vai flash, lai saņemtu savu uzmanību.
Tātad, tas ir burtiski, ko?
Kaut kas līdzīgs node.js dara.
Ja node.js vai JavaScript plašāk tiek izmantota
un programmētājs ir pietiekami gudrs
realizēt, "Jūs zināt, ko?
Kāds man jādara tiesības Šeit var aizņemt kādu numuru
milisekunžu vai sekundēs.
Jūs zināt, ko?
Ļaujiet man iet uz priekšu, un nav to sauc sinhroni -
"Tas ir puisis bloķēšana visi pārējie rindā, "-
ļaujiet man iet uz priekšu un veida paiet malā
un vienkārši piezvanīt sevi atpakaļ
ja, ka ilgi darbojas darbība ir pabeigta. "
Un zvanu atpakaļ, protams, ir tādu, šajā gadījumā
uz atzvanīšanas funkciju, atsauce uz patronā kodu
kas saņems izpildīts ja jūsu Bürger ir gatavs,
daudz, piemēram, šī lieta ir daži veida funkcionalitāti iebūvētu
tas sāk vibrēt, vai buzzing, kad ir pienācis laiks, lai jūs
saukt atpakaļ priekšējā līnijas.
Tātad, ko tas nozīmē reālā izteiksmē?
Nu, mums ir strādāt savu ceļu augšup.
Tātad, ļaujiet man iet uz priekšu un pirmo reizi to izdarītu.
In servera 1.js, ļaujiet man Pirmais vienkāršotu kodu
lai mēs varētu veikt bērnu pasākumus pret vairāk pārliecinoša problēma.
Tas ir tieši tāds pats programma, es uzrakstīju pirms tam.
Bet to, kas ir mainījies?
Tur ir sava veida neliela sintaktisko atšķirība
starp šo un versija 0 pirms brīža.
Kas lec ārā pie jums, ja jūs atceraties?
Yeah Cynthia [pieņemts pareizrakstību]?
[Nedzirdams Piezīme]
Jā. Tāpēc tagad mums ir līnija un funkcija tiek nodota collas
Ka esam tikuši vaļā no veida
gada nelietderīgi nosaukts apdarinātājs funkcija.
Bezjēdzīgi tikai, ka pirms pat aicinot to vienā vietā,
Man nav tiešām ir nepieciešams, lai tērēt laiku, dodot tai nosaukumu
un padarot to grūtāk lasīt kodu augšas uz leju.
Tātad, pieņemsim tikai paziņot, inline ir anonīma funkcija.
Un es to daru divas citas lietas.
Es esmu padarot labāk izmantošana dot apzīmējumu.
Tātad, piemēram, jQuery, daudz mezglu metodes var chained kopā.
Tā, ka tad, kad jūs esat darījuši zvana kaut ko, jums nav
jāgaida uz jaunu līniju un izsauktu citu metodi,
Jūs varat vienkārši ķēdes tos kopā.
Un tā šādā veidā, mēs varam tiešām pastiprinātu šo uz augšu.
Tātad, tas ir burtiski web serveris piecām līnijām
Kodu kopā atšķirībā -
atšķirībā Ko jūs varētu parasti ir jādara, lai uzstādītu kaut augšu.
Ja es dodos uz servera 2 Tagad, pieņemsim to izdarītu.
Serverī 2 - faktiski pieņemsim nāk atpakaļ uz šo serveri 2.
Pieņemsim tagad atvērt async-0.js un risinātu šo problēmu pie rokas.
Tātad, pirmkārt, iesim priekšu un atvērt
līdz async-0.js pārlūkprogrammā.
Tā async-0, let me go atpakaļ uz pārlūku.
Hit papildināšanas.
Un tagad, tas ir sava veida of kļūdas ziņojumu.
Patiesi es esmu redzēt 500 in Chrome inspektors.
Bet ļaujiet man precīzāk pieprasīt hello.txt.
OK. Tātad, tas, šķiet, darbojas.
Tā async-0.js nešķiet kalpot pat kaut ko slīpsvītru.
Tam nav noklusējuma failu atbalsts.
Bet, ja es nepārprotami pieprasa hello.txt,
, kas, šķiet, ir atbalstīt.
Kāpēc tā?
Nu, ko es esmu gājusi šeit
un darīts tiek īstenota super vienkāršu web serveri
, kas parāda, kur asynchronicity var būt noderīga.
Un tas tiek īstenots šādi.
Pirmkārt, es esmu, izmantojot HTTP modulis atkal,
bet arī FS kas iespējams, nozīmē?
Kopumā CS, failu sistēma.
Labi failu sistēma.
Tātad tālāk FS, failu sistēma.
Labi, lai to, ko tas dod man?
Funkcionalitāte, kas saistīti ar failus, piemēram, kļūst pagājis,
atverot failus, rakstot katalogi, lasot katalogi
un visi šāda veida stuff.
Tātad tagad paziņojums, šo kodu ir tāds pats, kā iepriekš,
izveidot serveri, kas iet anonīmā funkciju.
Tas ir sava veida patvaļīga.
Tas nav ļoti drošu web serveri.
Patiesībā, jūs varētu piekļūt vairums jebkuru failu uz manu cieto disku
vai servera cietā vadīt, izpildot šo kodu
tāpēc, ka es esmu tikai akli pieņemot, ka es esmu gatavojas
sagrābt kāds lietotājs Pieprasītais URL.
Un es esmu gatavojas prefiksu to ar punktu
tāpēc, ka es esmu nedaudz ir droši
, sakot, neatkarīgi no faila viņi var pieprasījums ir vismaz sākums
pašreizējā direktorijā.
Protams, tur ir drauds šeit.
"Iemesls, ja tās vietā ietver to, ko?
Savā ceļā, viņi var kind gada strādā ap to too.
Dot, dot, vai ne?
Tātad, ja lietotājs vienkārši ielieciet dot, dot URL, teorētiski,
viņi varētu sākt saņemt mana - un saka paroli failu.
Tātad, tas nav domāts tiks nodrošināta,
tas ir domāts, lai būtu vienkārši.
Tātad šeit, man ir mainīgais, kas ir konkatenācija DOT
kas ir klāt katalogs un pieprasījums URL
ko mēs redzējām pirms piemēram slash vai / hello.txt.
Tāpēc tagad, tas izpaužas nedaudz vairāk interesants.
Pirmkārt, paziņojums apakšā.
Es esmu klausoties par pati osta kā iepriekš.
Tātad reālā interesanti darbs ir iekšā šeit.
Katru reizi, kad pieprasījums nāk pēc būtības
Šī koda, ko es daru?
Es esmu aicinot failu Sistēmas lasīt failu metodi,
iet ceļā ka es gribu lasīt.
Un tagad, tas ir kas ir interesanti šeit
tas ir, īstenojot asinhronā metodi.
Jūs nevarat saņemt peļņu vērtība no nolasīt failu.
Paziņojumā Patiesībā ir ne kreisā izteiksme
pa kreisi lasīt failu.
Tas neatgriež vērtību.
Drīzāk, tas izsauc atzvanu funkcija, kad tas ir gatavs
lai dotu jums atpakaļ atbildi.
Tātad vēlreiz, lai būtu skaidrs, tā kā vakardienas,
daudzās programmēšanas valodas, ja jūs vēlaties
lasīt failu lietu punktā PHP,
file pasvītrojums saņemt uzsvērt saturu,
Jums ir kreisās puses izteiksme visās vērtībā pēc -
Pirms vienādības zīmi, tas nozīmē, ka jūs esat piešķirot
ar šo mainīgo atgriešanās vērtību šo funkciju.
Jūs varat darīt, ka node.js, bet jums parasti ir
zvanīt skaidri sinhronā versijas funkcijas, piemēram,
Es domāju, ka tas ir izlasījis sinhronizācija failu vai sinhronizācijas nolasīt failu.
Es aizmirsu, kā viņi nosauca to.
Un kas dotu Jums atgriešanās vērtību.
Bet, ja tas fails ir daži attālās failu sistēma
vai diska ir tikai dabiski lēni, tas varētu veikt 10 milisekundes
vai 2 sekundes šo failu faktiski atgriezties.
Tikmēr neviens cits web apmeklētāji tiek apkalpoti
Jūsu websit.
Jūs bloķēšanu.
Tas ir tas, ko sauc bloķējot IO, ievades / izvades.
Tātad šeit tas ir daudz gudrāki.
Jo tas, ko node.js notiek
ko darīt pēc interpretējot ir šādi,
tas notiek, lai izsauktu lasīt failu metodi,
mēģiniet vienu līdz failam, kurš ir ieguvuši ceļš ar vērtību P. norādīta
Un tad, ja un kad tas ir gatavs lai dotu jums atpakaļ saturu
faila P, tas prasīs funkcija, kura paraksts ir
pēc vienošanās tekstu.
Divi argumenti, pirmais kas ir varbūt kļūda objekts,
kapitāls E, tas ir objekts sauc par kļūdu vai Null
ja tur nav tādas kļūdas.
Un otrs arguments - ņemt minējums - būs ko?
To sauc par datu protams, bet Kas ir datu konkrētāk?
>> Saturs?
>> Saturs hello.txt piemērā I velk
manā pārlūkprogrammā pirms brīža.
Tātad, citiem vārdiem sakot, lai lasītu failu un daudzi node.js funkcijas
kā pie neatgriežas vērtības.
Viņi sauc atzvani un nodot
tiem callbacks kādi būtu ir tradicionāli
atgriešanās vērtību.
Šīs pieejas Otrādi
ka jūs varētu aicināt lasīt failu T0.
Atzvanīšanas funkcija varenība nedrīkst saukt par vienu ērču vēlāk
tā sakot T, tas varētu saukt T1000,
tūkstoš ērces vēlāk.
Bet ir tas, ka pārējā kodu šo failu,
ja tādi būtu nekavējoties izpildīts, kamēr node.js
un, kamēr failu sistēma skaitļi, kā lasīt
ka failu un saņemt to atpakaļ uz jums.
Tātad jums izveidot šo -
tik efektīvi ilūzija
paralēlisma ļaujot lēnāk darbojas procesiem nav
bloķēt svarīgi sīkumi, daļa, kas apkalpo lietotājus.
Tātad, kā mēs rīkoties ar šo?
Tas ir ļoti bieži node.js paradigma.
Un tur ir veids, kā tikai, lai vienkāršotu Tas ir, mēs redzēsim pirms līdzi.
Es vispirms pārbauda, ​​vai Kļūda nav null.
Tātad, ja tas nav viltus tad tur bija kļūda.
Es nezinu, kas tas ir, varbūt fails neeksistē.
Man nebija atļaujas.
Ceļavārdiem ir nepareizi.
Jebkurš vairākas lietas varētu noiet greizi.
Tagad es esmu gatavojas patvaļīgi atpakaļ 500
kas ir iekšēja servera kļūda.
Kaut kas nogāja greizi.
Man nav īsti aprūpi diagnosticēt to.
Tātad, pieņemsim tikai pateikt lietotājs tas ir bojāts.
Un tad, es esmu gatavojas darīt res.end,
un tas ir saīsinājums notācija.
Atgādināt, ka pagājušajā reizi I did res.write
un tad es darīju res.end.
Ja jūs tikai vēlaties nosūtīt vienu rindiņu produkciju,
jūs varat darīt to visu uzreiz ar res.end ar argumentu,
un kas notiek, lai nosūtītu neatkarīgi no kļūdas ziņojums ir
iekšpusē šo objektu pārlūku.
Tas bija diezgan dzirksteļošanu atceros pirms brīža.
Man nav ne jausmas, ko tas nozīmēja, pēc pirmā acu uzmetiena.
Bet, kad es lūdza failu, kas nepastāvēja -
Hmm, mums ir nepieciešams, lai palaistu serveris atkal.
Kad es lūdza failu ka nepastāvēja, EISDIR,
lai kaut ko par tas ir katalogs,
ja man daži izlases string tur,
acīmredzot tas nozīmē, ka fails nav pat neeksistē.
Un tas ir tāpēc, ka mans kods vienkārši sakot, lai rakstītu
veic neatkarīgi Raw Kļūdas ziņojums,
tāpēc nav ļoti lietotājam draudzīgi bet vismaz es esmu to apstrādāt.
Cits, ja tas nav kļūda, ko es daru?
Pats kā iepriekš iesma no 200 OK, plain -
text / plain prātā veidu un tad izspļaut datus.
Un tas ir iemesls, kāpēc es saņemu saturs hello.txt kas tikko
lai apstiprinātu, ja es paskatījos pie hello.txt,
tas ir burtiski tikko sveiki, pasaule.
Un, ja es to nomainīja hello, world, saglabājiet failu,
atkārto serveri, pārlādēt lapu.
Tagad man šo versiju.
Tātad, es esmu patiešām tikai reimplemented web serveri
kā tas pastāv jau daudzus gadiem, bet, izmantojot node.js.
Bet mēs varam izdarīt vēl tīri.
Ļaujiet man atvērt async-1.js.
Tagad, ievērosiet, es esmu pievienojot vēl viens modulis šoreiz,
acīmredzot ceļš moduli.
Tagad tas ir labs iespēja meklēt
kādi dokumenti izskatās.
Node.js ir dokumentācija.
Piemēram, PHP, manuprāt, ir faktiski diezgan labi
un taisni uz priekšu.
Ja es eju uz node.js un Google un meklēt node.js ceļu,
ko jūs redzēsiet parasti ir tieša saite uz URL
ka man šeit pirms brīža.
Tāpēc / API ir oficiālais vieta iet dokumentāciju.
Un ko jūs redzēsiet augšpusē
mezgla oficiālajā dokumentācijā ir visas tās metodes un
vai īpašības iekšpusē šo konkrēto moduli,
no kuriem viens sauc pievienoties.
Un pievienoties ir palīgs funkcija kas notiek, lai ļautu man
ne apgrūtināt ar visi plusi.
Un tā ir pievienota bonuss, kā jūs redzēsiet
no dokiem tas ir arī normalizē rezultātā ceļu.
Tātad, ja lietotājs vai jums ir punkti vai dot punkti vai to apvienojums
no šiem radinieks veidu ceļi, vidū upsides
no pievienojās metode ir tāda, ka tas notiek, lai attīrītu visu, kas uz augšu
un jums kanoniskās ceļš bez jebkāda
no šiem punktiem, vai dot punktiem.
Tātad, tā ir laba lieta Kopumā drošības vismaz
Ja jūs pārbaudīt atgriešanās vērtību, ko es neesmu
šajā konkrētajā vienkāršā lietā.
Bet es vēlos to izmantot.
Tātad, es tagad izveidot karjera Nedaudz vairāk programmatiski
ar path.join vietā Raw konkatenācija.
Tātad, tas ir maz tīrāks nekā agrāk.
Un tagad paziņojums es esmu to Nedaudz vairāk viedo, nevis
nevis tikai akli mēģināt lasīt failu,
Es esmu gatavojas faktiski zvaniet fs.stat.
Tātad, ja jūs esat pazīstami
ar zema līmeņa C funkcijas un C, pat PHP.
Bibliotēku daudz ir Šī funkcija stat atgriež
būtībā statistika uz failu, faila izmērs,
atļaujas, vārds un lietām, piemēram, ka,
un arī netieši, ja fails eksistē vai nē,
un, ja tas ir fails vai direktorija
vai simboliska saite vai kaut kas cits.
Tātad tagad paziņojums, es esmu zvana fs.stat.
Un tad acīmredzot saskaņā uz dokumentāciju,
Man vajadzētu saņemt atpakaļ kļūdas objektā
vai Null sekoja ar stats objektu.
Bet pieņemsim pārbaudīt to, node.js.fs.
Šeit ir fails sistēmas dokumentācija.
Ļaujiet man meklēt stats.
Tur ir daudz vairāk Funkciju šeit.
Hmm, ka stat sinhronizācija, fs.stat.
Tātad šeit tas ir asinhrono stats (2).
Kas ir kas nozīmē, ja jūs atceros no galvenajām lapām,
Galvenās lapas 2 nodaļā,
tas nozīmē, ka tas ir burtiski tikai mezglu ieviešana
no zema līmeņa sistēmas funkciju stat.
Tātad, atzvanīšanas saņem divas argumentus, kļūdas un stat
kur stat ir fs.stats objektu.
Tātad, pieņemsim redzēt, kas šo objektu ir paredzēts, lai izskatās.
Pieņemsim, noklikšķiniet uz hipersaites un es redzu, ka.
Statistika objekts satur acīmredzot daži palīgs metodi,
ir fails ir direktorijā, ir ķekars citas lietas.
Tas "ir" fails, kas man rūp par šajā konkrētajā gadījumā.
Tātad, šeit es iet.
Ja tur bija kļūda, tad ļaujiet man tikai bail šoreiz
un uzņemties.
Ja tur ir kļūda, tas bija iespējams, 404 fails nav atrasts.
Tas varētu būt kaut kas cits
bet es esmu to nedaudz slinks šeit tikai koncentrēties
par vairāk interesantu informāciju.
Bet lietotāja mērķiem, fails nav atrasts,
ja ir kāds kļūda norādot failu.
Pretējā gadījumā, ļaujiet man pārbaudīt, vai fails ir patiešām faktisko failu.
Tātad, ja tas nav failu, tā pastāv.
Tur ir kaut kas tur, bet tas ir iespējams katalogs
vai varbūt simboliska saite
vai kaut kas cits, kas ir funky par failu sistēmu.
Nu tā, lietotājs nedrīkst redzēt.
Tāpēc tagad, es esmu tikai gatavojas spļaut
kas parasti neatļautu 403.
Bet atkal tikai konvencija,
Es varētu izmantot kaut kas cits teorētiski.
Un tad visbeidzot, ļaujiet man mēģināt nolasīt failu.
Tātad, ļaujiet man ritiniet uz leju.
Un tagad paziņojums tas ir, ja kodu var iegūt mazliet netīrs,
paziņojums, ka es esmu aicinot fs.readFile iet
tādā pašā ceļā, tajā pašā atzvanīšanas kā pēdējo reizi,
tā iepriekšējā versijā.
Un tad, ja es gribētu atrast -
ja man nav atrast to, Es izspļaut 500.
Un, ja man atrast to, ko line mēs redzēsim šeit?
Mēs ejam, lai redzētu FS rakstīt header 200 iespējams
un res.end nosūtot faktiskie dati.
Bet pamanīt to.
Un tas nav demonstratīvs sliktāko scenāriju.
Bet man ir šī stat aicinājumu šeit nekā Man ir daži sīkumi.
Tad man ir cits asinhrono zvanu šeit
tāpēc vairāk iespiedumiem.
Tātad, tikai veida ekstrapolē ja jūs varētu no šejienes.
Kādas problēmas mēdz rasties ar piemēram, JavaScript valoda
Šajā vidē, kur Jums nav atgriešanās vērtību
bet jums ir šie atzvani.
Un, protams, tas ir tikai stilistisko lieta fakts
ka es glabāt indenting.
Bet ņemt to, lai loģisks nākamais solis.
Pieņemsim, ka tur bija viena vai divas vai trīs citas funkcijas
ka man vajadzēja izpildīt, ka bija par dabas asinhronā,
un tāpēc jūs vienkārši veida saglabāt indenting rīkoties ar tām,
rīkoties ar tiem, rīkoties ar tām.
Jūs saņemsiet veida atzvanu elle, jo cilvēki to sauc par
kur jūsu kods sākas lai saņemtu ļoti plašs
un atklāti tiešām grūti lasīt.
Kā tas ir, es varu veida tikko pateikt, ka tas ir sava veida plūsmas
, kas ir šāda veida
un stilistiski leņķveida lieta notiek šeit.
Tātad, tas nav ideāls, jo tas var ļoti ātri kļūt
smagnēja, lai gan divi asinhrono prasa ne
šāds liels darījumu.
Tātad, mēs varētu izvairīties no tā, vai ne?
Jums var būt glimpsed ka Es misclicked pirms brīža.
Dokumentācijā, jūs zināt, izskatās, ka ir statSync.
Un statSync neņem atzvanīšanas kā argumentu.
Tas aizņem tikai ceļu, jo tas acīmredzot nav ko?
Tā atgriež instancē gada fs.stats.
Tātad tas varētu būt jūsu pirmais instinkts, vai ne?
It īpaši, ja atzvanīšanas funkcijas
un asynchronicity ir nedaudz jauns, lai jums, atklāti sakot,
Vieglākais pieeja ir iespējams vienkārši izvairīties no problēmas visu
kopā, iet atpakaļ, lai kārtotu gada CS101 stila programmēšanas
kur jūs zvanu funkciju vai metode, kas atgriež vērtību,
zvanu funkciju, atgriežas vērtību,
funkcija, atgriež vērtību.
Un es varētu tādējādi izmantot fs.statSync
kas ir burtiski pats bet tas ir sinhronais versija
kas nozīmē, ka atgriežas vērtību.
Tas nepāriet vērtību atzvanīšanas.
Bet kāpēc tas, ka, iespējams, būs optimāls risinājums ķerties
ar sinhrono funkcijas?
Yeah?
[Nedzirdams Piezīme]
Tieši tā, tas aizņem ilgu laiku.
Jūs vienkārši palēninot viss uz leju.
Jo līdzīgi Shake Shack vai Tasty Burger, ja tās vaļā
Šo Kontroles mehānismi un kas jums, klients stāvēt priekšā
līnijas līdz jūsu ēdiens ir gatavs Pirms pat ņemot kārtību
personas aiz Jūs, protams,
caur izvirzīti palēnina.
Cilvēki sāk atstājot, jūs veida izdarīt paketes.
Jūs varat veikt jebkuru numuru analoģiju šeit.
Bet īsi sakot, tas ir iespējams, nav laba lieta
biznesa vai serveri.
Tāpēc asinhrono kods parasti good vismaz
Šajā gadījumā, bet tas noteikti sāk izraisīt angst.
Un patiesībā es uzdrošinos teikt, kad Pirmais rakstot šo stuff,
tā ņemšu mazliet mazliet kļūst izmantoti, lai.
Tātad, sāksim aprīkot jūs ar dažiem bibliotēkām
un metodes, lai padarītu Tas mazliet vieglāk.
Tātad, viens no visbiežāk bibliotēkas ir populāri bibliotēkas
šajās dienās, tas viens sauc async.js.
Un, tāpat kā daudz node.js bibliotēkas vai moduļi,
tie visi ir open source.
Viņi gandrīz visi dzīvo un saņemt rumbas krātuves, kas ir sava veida
un kļūt de facto vieta, lai saglabātu šīs lietas.
Un tad tur ir Visa infrastruktūra
uzstādot šīs lietas sauc NPM, Mezgls Package Manager
kas, ja jūs esat pazīstami ar EvanTube ir veida
, piemēram app vai app saņemt.
Ja Jūs esat iepazinušies ar Red Hat un Fedora
kā ierīcē, tas ir tāpat kā Yum.
Bet tas ir mezglu - tas ir paketes vadītājs tikko
šajā konkrētajā vidē.
Tātad, mēs varam lejupielādēt un instalēt lietas, piemēram, async bibliotēkā
un arī vēl viena sauc uzsvērt bibliotēku vai moduli.
Bet šie kā šim fs, HTTP, ceļš,
tie visi nāk uzcelta uz mezglu.
Tātad, ja mēs ejam uz API Docs, jūs faktiski redzēt, kas būvēts
uz mezglu jums par brīvu viss ķekars moduļiem.
Bet daudz jauku cilvēku, par internets ir veikuši desmitiem
ja ne simtiem citām bibliotēkām
darīt lietas labāk vai savādāk.
Tātad, pieņemsim to apskatīt kā tas bibliotēkas darbojas.
Tātad, lielākā daļa šo kodu ir identiska brīdi.
Man ir ceļš būtne izveidots up top.
Un tagad es esmu aicinot async.series.
Tāpēc async bibliotēka, tā ir tikai bibliotēka, kas ļauj jums
nodot vai paaugstināt parasti ir funkcijas, lai saņemtu sauc par vienu
pēc tam, kad otra tikai veida izvairītos no šajā iedziļinājumā jautājumu,
un tiešām tikai garīgās angst, kas vienmēr rodas
vismaz tad, kad jūs pirmo reizi nirt, lai šo par savu
ar plānošanu asinhroni.
Kā malā, ja esat lietojis 161 un esat nodarbojas ar slēdzenēm
un paaugstināt nosacījumus un visiem Minētā asinhroni kodu
un vide, piemēram, node.js faktiski ir daudz,
daudz vienkāršāk varbūt
nekā faktiski rakstot multithreaded kodu.
Anytime jums ir multithreaded kods,
jums ir paaugstināt nosacījumus.
Jums nav jāuztraucas par divi pavedieni, kas satur
tiem pašiem līdzekļiem diska vai atmiņas.
JavaScript skaistums
in node.js ir tur burtiski tikai viens pavediens,
kas nozīmē, pārlūku
vai serveris var tikai darīt vienu lietu vienlaicīgi.
Tas ir tikai atkarīgs no jums, programmētājs
saglabāt garīgo modeli kā jūs veida rindā lietas
un izdomāt, kā pasūtīt savu kodu.
Bet jums nekad nav jāuztraucas par paaugstināt apstākļus
diezgan pašā veidā pie Vismaz ar Raw kodu, kā šis.
Tātad, tas ir maz grūti grack šeit.
Bet - Tātad, ļaujiet man atvērt docs tikai brīdi.
Async.js bibliotēka, kas tāpat ir ļoti googleable,
tā dzīvo GitHub repot, piemēram, daudz no tiem.
Nedomāju, ka tas ir paviršs, tas nav.
Ļaujiet man ritināt uz leju uz Lasīt Me šeit.
Tātad, async bibliotēka nodrošina visu ķekars
Metožu iekšpusē no tā.
Piemēram, tur metode, ko sauc par katra,
kas, ja es uz šo tikko lai redzētu tās docs uz brīdi,
tas ir funkciju vai metode , kas ļauj kaut ko darīt
kā četriem katrā bet paralēli.
Viņi visi, kas notiks potenciāli paralēli.
Un metode katrs ir tikai atgriezīsies pie jums, kad visi
no iterācijas ir pabeigta.
Tāpēc varbūt tie notiek viens aiz otra.
Ideālā gadījumā tās notiek būtībā paralēli.
Bet metode nav jums atzvana.
Tas nav baumas savu svilpe, kamēr visas
no elementiem, jums ir atkārtoja laikā ir pabeigti.
Tātad, tas ir tikai jauks veids
izvairīties, izmantojot vienkārša četru cilpa
bet patiesībā dara kaut asinhroni.
Bet tagad tiešāk , kas saistīti ar šim piemēram,
paziņojums ir tas series metodi.
Un ļaujiet man tikai uzvilkt vienkāršs kanonisko piemērs.
Tāpēc Asinhronā režīma bibliotēkas, sērija Metode ņem tik netieši
ar kvadrātiekavās masīvs.
Kādi ir dati veidu elementiem
šajā masīvā, pamatojoties uz vienkāršu piemēru?
Tas ir masīvs funkcijas.
Tātad C, jūs gribētu nosaukt viņiem darboties norādes.
JavaScript ir vairāk pareizi atsauces uz funkciju
vai anonīmas funkcijas.
Un tas tikai nozīmē, masīvi
Protams, ir pasūtīts no nulles uz augšu.
Tātad, tie ir jāsaglabā rīkojumu, kas ir labs
virkne, "izraisīt sērija , protams, nozīmē kaut ko darīt
lai ne paralēli.
Tātad, tas tikai nozīmē, ka šis funkcija saņems izpildīts,
tad šī, tad šis vienu, šo vienu, tad šī,
tomēr daudzi ir
līdz beidzot pēc izvēles atzvanīšanas sauc.
Tātad, paziņojums paradigmu šeit.
Un, pat ja tas ir viens puisis bibliotēka,
tā pārstāvis ļoti bieži JavaScript paradigma
un vēlreiz, izmantojot atzvani.
Tātad, paziņojums, ko jūs darāt šeit.
Pirmajā funkcija ir pieņemts, izmantojot šo masīvu,
Jūs definēts anonīms funkcija tikai ar funkciju.
Bet paziņojums, kas acīmredzot saskaņā ar šo dokumentāciju,
ka anonīms funkcija būtu veikt arguments atzvanu.
Kas būs rādītājs vai atsauce uz funkciju
ka jums vajadzētu zvanīt, ja jūsu kods ir gatavs, lai atgrieztu vērtību.
Tātad vēlreiz, atšķirībā no tikko parasti procesuālo programmēšana
kur jūs izmantoti, lai atgriežoties vērtības uzreiz
ka viena atšķirība izmantojot bibliotēku, piemēram, tas
asinhronā programmēšana vairāk vispār, ir tad, kad jūs esat gatavs
lai atgrieztu vērtību no datu bāzi, no faila,
no aritmētikas izteiksme, tas ir atkarīgs no jums
lai izsauktu atzvanīšanas funkciju.
Un jauka lieta par šo bibliotēku
ja mēs lasīt docs rūpīgāk ir tas, ka,
vienīgi tad, ja visi atzvani rajonā, ko dēvē
bez Error objektu, būs viss izdosies?
Tātad, citiem vārdiem sakot, ja ir 2,
ja ir 10 anonīms funkcijas
šajā masīvā tādēļ Šajā sērijā
tikai tad, ja visi no tiem izdodas,
būs galīgais izvēles atzvanīšanas var uzskatīt par veiksmīgu?
Ja kāds no tiem neizdodas, katru funkciju
pēc tam, kad tas nav pat izpildīts.
Tātad, tas ir jauks veids, kā atrisināt Kam ziedlapķēde
ka aborts notiek priekšlaicīgi ja kaut kas noiet greizi.
Tātad, lai redzētu to kontekstā, šeit ir tas, kā mēs varētu atkal ieviest
ka iepriekšējās programmas.
Man ceļu, kā līdz šim, tāpēc tas ir viegli daļu.
Es kopēt ielīmēt šo skelets kodu
no dokumentiem tur async.series atvērt iekavas,
atvērt kvadrātiekavas.
Un tagad paziņojums man ir viens funkcijas šajā sākumā
par otru, mēs redzēsim kur mēs ejam no tā.
Un tagad paziņojums, tas ir nedaudz sarežģīti sākumā
bet koncentrēties tikai uz tā pozīcijai.
Fs.stat nozīmē iegūt statistiku vai kas nav šajā ceļā.
Nosaukt šo atzvana, kad gatavs.
Šis kods ir tāds pats, kā iepriekš.
Ja tur ir kļūda, tur ir viena atšķirība tagad.
Atkal, ļoti bieži paradigma in node.js programmēšana ir
ja kaut kas noiet greizi, un atzvanīšanas jāzina
ka pēc vienošanās, pirmais arguments atzvanīšanas notiek
ka nav, ja viss ir labi, vai atsauce uz Error objektu,
kapitāla E. Tas ir tāpat kā kļūda klase, kas pastāv pasaulē
bet vairāk par to kādu citu reizi.
Tātad, ko darīt, ja tur kļūda, kāda ir saistība?
Nu, pamatojoties uz to, ko es teica, ka sērija nav,
ir, ja kaut kas notiek nepareizi, mēs vienkārši veida vēlaties
pārtraukt visu sēriju no anonīma funkcija zvanus.
Tātad, pietiek man tikai atpakaļ atzvanīšanas tuvo
ar kļūdu objektu.
Jo, ja stat sniedza me back kļūda,
Es varētu izveidot jaunu Kļūda objekts mana,
bet man nav īsti aprūpi,
Es tikai gribu, lai iet neatkarīgi kļūda ir tā, ka patiešām notiek
lai es varētu nodot šajā atzvanu.
Un tikai, lai būtu skaidrs, atgriešanās nav absolūti nepieciešams.
Es būtībā gribu to darīt bet es gribēju tagad darīt "atgriežas;
/ / Tā, ka ne vairāk kodu šeit izpilda ".
Lai atkal vēl viens kopīgs konvencija JavaScript,
pat ja jūs neesat atgriežas vērtību per se,
Jūs vēlaties iet vērtību uz atzvanīšanas funkciju
bet tad jūs vēlaties lai apturētu izpildi
Funkcijas tu esi in, trivial veidā
to izdarītu, ir tikai zvanīt atgriezties šeit.
Bet tur nekas nepareizs,
mēs vienkārši darām atgriešanās atzvanu kļūdas, pat ja tas notiek
atgriezties nenoteiktu vērtībā.
Labi, tas nav atgriešanās vērtību visticamāk.
Viss, ko es rūp, ir iekāpšanas turpmāku izpildi.
Tātad, mans saplūšana no šiem divas rindas ir tikai stilists
lai konvenciju tikai ir vairākas līnijas
Koda es tikai uzrakstīju 2-1.
Tātad, ko vēl?
Ja tur nav kļūda -
patiesībā, lai būtu skaidrs Es varētu arī izvairīties
ka darot, ja cits.
Bet atkal, cits bieži paradigma ir pārbaude
Jūsu kļūdas up top, un tad tikai atpakaļ, nevis turpināt
ievilkumu savu kodu ar elses un elses un elses.
Tātad, ja tas nav failu, tagad, jūs zināt,
Es gribu, lai risinātu šo nedaudz speciāli.
Tātad, šeit, piemēram, Java vai C + + vai dažas citas valodas,
šeit ir, kā var instantiate iebilst rakstīt kļūdas tuvo
pēc noklusējuma ziņojumu ne faila
un tas ir tikai nedaudz patvaļīgi.
Bet es esmu signalizācijas kļūda mana.
Un ko tas pēdējais līnijas, iespējams neizsaka?
Viss ir labi.
Ja jūs iet null attiecībā kļūda parametrs, tas tikai nozīmē
pēc vienošanās visi ir labi.
Tātad, tas nozīmē, ka tas, ko notiks loģiski?
Ja null ir pagājis uz atzvanu
tas nozīmē, ka šis anonīms funkcija ir izdevies
tā runāt.
Tātad, kādi būtu sērijas metode ir pirms un tagad darīt, pamatojoties
par manu verbālo definīciju agrāk?
[Nedzirdams Piezīme]
Pāriet uz nākamo, vai ne?
Ja tas bija atgriezušies, kas nav Null vērtību, tas vienkārši pārtraukt
un ne vairāk anonīms funkcija varētu saņemt sauc.
Bet tāpēc, ka tā nav, tad tas get sauc nākamo.
Tātad, loģika šeit ir diezgan daudz tāds pats kā pirms tam
un mēs redzēsim, kā tīrīt šo augšu vēl brīdi.
Es saprotu, tas ir sava veida partijas
uzņemt visas mutiski un vizuāli.
Bet tagad paziņojums, otrais anonīms funkciju, es gribu
izpildīt virknē ir mēģināt nolasīt failu.
Nosaukt šo atzvanu kad esat gatavs.
Ja tur ir kļūda, vienkārši signālu tā, izmantojot atzvanu
tā, ka pārējā šo stuff Pārtrauc.
Vēl atgriezties null.
Bet kāpēc man iet divos argumentus?
Nu šoreiz, ja es izlasīju failu un saņemt atpakaļ
kā mainīgo sauc datiem,
Es vēlos ne tikai neizsaka viss ir labi, atgriežoties null
par pirmo argumentu.
Es vēlos atgriezties faktisko dati, kā otro argumentu.
Jo, ja es lasīt tālāk dokumentācijā,
pamanīt šo pēdējo gabalu koda kvadrātiekavas nozīmē, ka ir
gals sēriju.
Tur bija tikai divi anonīmi funkcijas šajā sērijā.
Ja tur bija kļūda šeit, tad Es zinu, ka viens no saitēm
šajā ķēdē tā runāt neizdevās.
Tātad, citiem vārdiem sakot, šī kļūda būs kļūda objekts
ka ir nulle, ja tādi un šie puiši neizdevās.
Un, ja tas ir gadījumā, es esmu tikai dodas glābt, un es esmu gatavojas
teikt 400, kas nozīmē pieprasījuma neizdodas,
tas ir ļoti vispārīgas kļūdas ziņojums.
Un tad, es esmu gatavojas izdrukāt kļūdas paziņojumu.
Tātad, es nedomājot super anālais šoreiz,
Es neesmu gatavojas, lai atšķirtu starp 500 un 404 un 403,
Es esmu tikai veida akli vilnis savu roku
un teikt kaut kas nogāja greizi.
Bet, ja nekas nebija noiet greizi,
Es esmu gatavojas nosūtīt šo res.end garām šos datus.
Tagad tas izskatās nedaudz noslēpumains.
Bet atkal, ja es izlasīju dokumentācija,
Otrs arguments šis pēdējais, gala callback,
puisis, kas ir tikai izpildīts pēc tam, kad series tiek darīts
izpildot vai daļa tur gada, tas būs masīvs
no visa otrā argumentus
, kas tika nodots uz atzvanu.
Tagad izrādās, ka tikai saiti šajā sērijā
kas faktiski atgriezties sekundē arguments ir šeit tas viens.
Tāpēc es esmu gatavojas, lai sakārtotu un par lēciens ticības vienkārši izmantot pieņemsim
uz brīdi, ka pēdējais ir metode
kas sniedz jums pēdējā elementi masīva.
Jo šis masīvs kas ir tiek nodots
man ir divi indeksi, nulle un viens.
Tas ir tikai nulle nav nekādas vērtības jo šis puisis atgriežas -
neiztur sekundē arguments, bet tas puisis dara.
Tāpēc rezultāti kronšteins nulle ir nekas,
rezultāti kronšteins viens ir tas, ko,
Ja jums ir pēc pa līdz šim punktam?
Fails, sveiki, pasaules saturs, iespējams,
tā, ka tas, kā es tiešām izdrukāt.
Un ļaujiet man pabeigt viena detaļa šeit.
Ja man šāda veida vecs skola, ja es vēlos saņemt
uz pēdējiem elementiem, ja es varētu to rezultāti [results.length-1]
tas ir sava veida vecās skolas ceļu
Piekļūt pēdējās elementus in - vai nulles indekss masīvs.
Bet kā šajā pusē, atgādināt ka man bija šī bibliotēka
šeit pasvītrojums, kas pēc Konvencija ir tikai sauc
burtiski pasvītrojums raksturs, kas nav īpašs,
tas tikai izskatās cool, piemēram, dolāra zīmi dara jQuery.
Tas ir tikai palīgs Metode uzsvērtu dot pēdējo
kas dara tieši pats.
Un, ja jūs nekad neesmu to izmanto Pirms uzsvērtu JS gan
par klienta pusē kodēšana
un servera pusē ir lieliski noder bibliotēka
aprakstīta kā daudzi cilvēki tas patīk jQuery ietver visu
no metodēm, cilvēki vēlējās nāca ar JavaScript pati.
OK.
>> Tātad, piemēram, diezgan man un Es biju skatoties sērijā,
Jums patīk atzvanu kā argumentu?
>> Jā.
>> Tāpat kā tad, kad jūs tiešām, piemēram, push, ka,
un to, ko tā dara nozīmē, ja jums vienkārši ir
piemēram, atzvanīšanas un tad patīk -
[Nedzirdams Piezīme]
>> OK, labs jautājums.
Tātad, ļaujiet man uzvilkt async galvenā lapa šeit
vai dokumentāciju par GetHub.
Tāpēc tas ir kanonisko struktūru.
Ja jūs zvanu, izmantojot šo īpašu metodi sērija,
tur ir divas lielas daļas to.
Viens no tiem ir masīvs anonīmas funkcijas
un abiem ir galīgs atzvanīšanas funkcija, kas ir faktiski
izpildīts ļoti gals sēriju.
Tagad, ja mēs tuvinātu nedaudz tuvāk par pirmo
no šīm lielajām lietām, masīvs anonīmu funkciju
ar prasību šā puisis dokumentācija ir
būt anonīms funkcija, kas notiek
Vienā arguments sauc atzvanu vai foo, vai bar, tas nav svarīgi
bet viņš aicinot to atzvanu.
Un tas ir sava veida jūsu svilpe ka Shake Shack rokas jums.
Tas ir līdzeklis, ar kuru Jūs varat atgriezties vērtību
klientam, jo ​​Jums nevar vienkārši burtiski atgriezties.
Jums ir jādara tas, ko veids, kā šo atzvanīšanas.
Jo, ja iekšpusē tā funkcija ir daži lēna skriešana
kods, piemēram, vaicājumu datu bāzē, lasīt failu no failu sistēmas,
Jūs nevēlaties gaidīt tur un bloķēt visiem pārējiem,
Jūs vēlaties, lai izsauktu atzvanu.
Tātad, tas ir burtiski nosaukums argumentu.
Bet, piemēram, C, jūs ir funkciju norādes.
Java jums atsauces sistēmas metodes
un pats šeit JavaScript.
Tas ir mainīgs lielums, bet tā tips ir funkcija.
Tik vienkārši rakstot tās nosaukumu vai atzvanīšanas vai foo
vai bar, tad atvērt iekavas un tuvu iekavas,
jūs izpildes, ka par šo funkciju.
Un iet null kas nozīmē null kļūda un viens
, kas nozīmē, ka šis ir dati, kas es gribu iet iekšā
Un tad gabals, lai būtu skaidrs, tas ir vēl viens atzvanu.
Un tas nav sauc callback,
tas vienkārši konceptuāli ir atzvanīšanas metodi funkcija
jo tā tiek saukta pēc definīcijas
šī autora bibliotēkā, Visa sērija ir pabeigta
vai apakšgrupā to, ja ir noticis kļūda ātrāk.
Tātad, nosaukums atzvanīšanas funkciju, zvana atzvanīšanas funkcija,
nosaukums, atzvanīšanas funkciju, zvana atzvanīšanas funkcija,
atšķirīgs atzvanīšanas darbotos kopā.
>> Mums tagad ir, piemēram, definēt atzvanu?
>> Nē, jo šis puisis nokļūs jūsu masīvs
anonīmu funkciju,
rādītāju uz kodu viņš grib izpildīt.
Tieši tā, viss ir labi.
Tātad, lūdzu, teikt, ka kods kļūst mazliet vienkāršāka.
Tātad, tas ir iespējams.
Un, ja jūs esat līdzīgi man, ņem komforts vismaz zinot,
tas notiek laikā, lai pierast pie to.
Bet mēs varam tīrīt šo up mazliet,
nevis mest pārāk daudz, lai jūs bet šeit ir vēl viena variācija
un tās, izmantojot citu metodi
tajā pašā bibliotēkā sauc ūdenskritums.
No kuriem ir otrādi atšķirībā no sērijas, kur katra
no tiem anonīms funkcijas izpilda galvenokārt
neatkarīgi no katra no citiem.
Ūdenskritums kā nosaukums liecina, ļauj augšējā funkciju lietošana
lai veida caurlaide vērtības apakšējai funkciju,
veida, piemēram, kaskādes ūdens.
Tāpēc otrādi tas ir tā, ka es varu veida
un izmantot to, lai manu priekšrocības.
In async.waterfall, pamanīt sekojošo.
Es varu tikai aicināt fs.stat iet ceļā
, ka es vēlos, lai saņemtu statistika.
Un tad atceries, pirms es bija anonīmu funkciju
, kas bija divi argumenti grēkot,
esults un tad es piezvanīju atzvanīšanas funkcija manuāli?
Citiem vārdiem, ir tikai, lai būtu skaidrs, atceros, ka agrāk
in async 2, es darīju visu Šīs šķebinošs darbu.
Es piezvanīju fs.stat pieņemts P,
deklarēta mana anonīms funkcija.
Es tad pārbauda, ​​vai kļūda ir nav spēkā, tad es izdarīju to,
cits, es to izdarīju, viss skaistums pēc konvencijas
tāpat node.js ka atzvanīšanas funkcijas vispār ir domāti
veikt vismaz vienu arguments, Kļūda objekts, kam seko nulle
vai vairāk noderīgas vērtības.
Tātad paziņojums paradigmu šeit
Tas atzvanīšanas funkcija es esmu pasludina izriet tieši
paradigma, ka šis puisis ir async bibliotēka dara.
Kas nozīmē to, kāpēc es Es īstenojot savu atzvanu
metode, kad autors šo Bibliotēka ir burtiski nododot man
uz paplātes tā sakot, atzvanīšanas funkciju es varu izmantot?
Tātad, es varu tikai pāriet atsauce viņš ir devis man
tā, ka uzreiz, mans vairākas līnijas
Koda kļuvusi par vienu rindiņu kodu.
Tagad, kad mēs iet ar to?
Nākamais uzdevums, kas Es gribu izpildīt,
nākamais anonīms funkcija šajā masīvā
Funkciju dara šādi.
Paziņojumā vispirms stat ir Pirmais arguments.
Tātad kaut kas ir jau ir mainījies.
Tagad šis puisis, kurš rakstīja bibliotēku -
un es saku puisis jo tas ir cilvēks.
Šis puisis, kas rakstīja šo bibliotēka ir dokumentācija garantijas
ka tad, ja šī funkcija šeit iet mani atpakaļ kļūda objektu
vai null seko koma atdalīts saraksts ar citām vērtībām,
viņš būs pārliecināties, ka tie citas vērtības ir roku
šajā anonīmu funkciju secībā no kreisās uz labo pusi.
Un ko izmanto, lai būtu tikai atzvanīšanas funkcija vien vienkārši
kļūst pēdējais šāds arguments.
Tagad, es nezinu, kas es esmu pievēršoties tikai jūs zināt.
Bet tagad, kas ir atņemt šeit?
Tātad, mēs zinām no dokumentācija
vai pirms pāris piemēri
ka fs.stat galu galā sagaida atzvanīšanas ar diviem argumentiem,
Kļūda objektu, kas ir Kļūda objekts vai null sekoja
ar atsauci uz stats objektu.
Tātad, ja es domāju par to, ka, Kļūda objekts koma stats iebilst,
kas iekļaujas paradigmā Šīs personas bibliotēkā.
Tātad, es varu tikai pateikt, jo Es nē otro argumentu
ka tas ir - kas notiek, jānodod ar fs.stat
uz atzvanu ir grēkot, statistika pēc definīcijas šo bibliotēkas,
Es varu likt otro arguments vārds šeit
vai kāds man var pārdēvēt
ja es gribu pēc ar atzvanu šeit.
Tātad, es varu iet viens vērtējam no šejienes līdz šejienei.
Tagad visu šo kodu, lai gan protams, nedaudz mistisks ir
vismaz kopēt paste Lielākā daļa no iepriekš.
Vienīgā atšķirība ir paziņojums šeit es esmu pasludinātu kļūda
iebilst un tagad es gribu lai iegūtu mazliet mīļotājs.
Es tiešām gribu zināt, ko kļūda bija, tāpēc es esmu gatavojas
iešūt iekšpusē šo objektu a īpašuma patvaļīgi sauc kodu
tāpēc, ka es zinu, ka tas nav fails
kas būtu atļauta, tas ir HTTP 403.
Ļaujiet man atcerēties, ka pirms Es iet Kļūda objektu
uz atzvanu.
Un tad visbeidzot mēģināt lasīt failu, lai šajā gadījumā
ūdenskritums, es esmu sadalīti kodu no diviem lieliem soļiem
trīs mazākos posmos.
Pamanīt skaistumu šeit
Es varu piezvanīt fs.readFile iet ceļā.
Un tad cietā daļa garīgi, ir es tikai iet
jo puisis atzvanu.
Lieta viņš nododot mani, es esmu gatavojas pāriet uz fs.readFile.
Tāpēc, ka mēs visi esam stingri ar tiem pašiem konvencijas,
Pirmais arguments atzvanīšanas ir Kļūda objekts vai null sekoja
ko koma vai atdalītas sarakstu noderīgas lietas.
Tātad, ko tas nozīmē tagad, un, ja es lasīt dokumentāciju es zinu
Tas, ļoti pēdējā atzvanīšanas, šis puisis šeit ārpuses
no kvadrātiekavās notiek jānodod kļūdas objektā
vai null, ko man vajadzētu pārbaudīt kā vienmēr ar šo kodu šeit.
Un tad pēc definīcijas Šī metode
jo puisis dokumentāciju, pēdējā atgrieztā vērtība
No pēdējās metodi Manā anonīma masīvs -
mans masīvs anonīmu funkciju.
Tātad, ko tas lasa failu atdevi
un es esmu, izmantojot peļņu brīvi tagad.
Es domāju, ko tas lasa failu pass kā argumenti
uz atzvanīšanas metodi savu roku?
Divi argumenti, pirmkārt, ir Kļūda objekts vai null,
tas ir gandrīz vienmēr būs atbilde.
Un otrā lieta, kas notiek lai tas, ko par lasīšanas failu?
Saturu failu, dati, kā mēs to sauca agrāk.
Tātad, vienkārši paziņojot, grēkot, rezultātā,
un pārbaudīt kļūdas šajā ir sava veida garlaicīgi tagad.
Else, man res.end iet ar šo rezultātu.
Tas neapšaubāmi nav sinhronizēt perfekti
līdz brīdim, kad jūs faktiski rakstīt pats.
Bet tagad, ņem prom vismaz fakts
ka acīmredzot tas bieži paradigma, kurā, ja mēs
un autori bibliotēku visu veida stick
ar šo konvenciju no atzvanīšanas metodēm.
Un pirmais arguments ir Kļūda objekts vai null.
Un otrais un trešais
un ceturtā objekti ir lietas Mēs rūpējamies par to, un mēs kārtot
un ievērot noteikumus un dokumentācija.
Mēs sākām ar kodu, kas godīgi ir diezgan neglīts.
Un, pat ja pēdējā piemērs ir atklāti veida grūti
wrap savas domas ap, tas vismaz vizuāli,
Izskatās, ka tas ir daudz stingrāka.
Un, kad jūs iegūt apmierināti ar to, tas ir tik daudz vieglāk
un tas ir tik daudz mazāk pakļauti bugs nekā šī iepriekšējā piemērā.
Tātad, ļaujiet man parādīt, viena pēdējā lieta šeit.
Šī ir versija trīs.
Un - Nē, Atstāsim alone šīs.
Ļaujiet man iet uz pāris Citi pēdējā lietas kā spēles.
Labi, tāpēc serveri 2.
OK. Pirmkārt, kādi jautājumi, Es zinu, tas ir daudz
bet jums gribēja vairāk instrukciju, lai?
Jums nav teikt labas instrukcija obligāti.
Yeah?
[Nedzirdams Piezīme]
Pareizi, jūs būtībā bargas uz operētājsistēmas
izdomāt, kā žonglēt visas šīs lodītes uzreiz,
lasot no faila, lasījums no datu bāzes.
Un tā tas ir JavaScript serveri par to, ka ir viena vītni.
Un pēc būtības un faktiski,
tur ir viena bilde Man nebija ne uzmest,
, un tas ne vienmēr viss, kas izskaidrojošs
bet varbūt mēs sniegsim Jūs garīgo modeli.
JavaScript sevi un mezglu
jo īpaši ir tas tā saukto notikums cilpu.
Saskaņā ar kuru, jūs varat domāt no node.js, programma,
ir burtiski, piemēram, bezgalīga cilpa.
Tas ir tikai savvaļas cilpa, gaidot un gaida, un gaida,
meklē uzdevumu, lai pabeigtu.
Un uzdevums varētu būt, dodieties atnest kaut ko no datu bāzes
vai šeit ir vērtība no datubāzi vai iet saņemt šo failu
no diska vai šeit lietotāja pieprasījumu.
Jebkāda veida ziņā, tāpat kā pārlūkprogrammām notikumu orientētu,
lai serveris sānu notikumu orientētu.
Un jebkura no šīm lietām veido notikumus.
Tātad kāds node.js, tikko rakstīja bezgalīgu cilpu,
liels savvaļas cilpa, gaidot lai sīkumi notikt.
Un kā sīkumi notiek, tas nonāk rindā, vai ne?
Protams, datu bāzi varētu atgriezties vērtību.
Un failu sistēma, darbības sistēma varētu atgriezties vērtību
pie aptuveni tajā pašā laikā bet tur droši vien būs
būt daži pasūtīšana uz tiem.
Un node.js gatavojas būtībā rindā
kā liels masīvs vai vektoru, daži datu struktūra
ka buferi visi no šīm lietām.
Jo tas var burtiski tikai galā viens no tiem vienlaicīgi.
Tātad, ja jūs, izstrādātājs,
Rakstot asinhrono JavaScript kodu, izmantojot asinhrono
funkciju, jūs ļaujot šo tā saukto notikums cilpa iet
uz nākamo ērču, vai ne?
Tātad, kamēr jūs uzreiz atgriezties, jo visi
Šo asinhronajiem metodēm patīk lasīt failu un stat,
viņi atgriežas uzreiz jo atzvanīšanas beidzot
saņem atpakaļ.
Tiklīdz jūs atpakaļ,
tas nozīmē, ka kāds cits var get popped off krājumu šeit
vai arī, ka tā var iegūt popped off priekšā rindā šeit.
Un tā, ka ir Fakts serialization
par visu, kas notiek,
lai gan visi šie sīkumi var notiek paralēli
uz multithreaded sistēmu.
Bet node.js sevi un serveris darbojās
kā viens pavediens.
Un uz leju pusē, kas ir t jums nav obligāti max
no datora spējas ir īpaši
Ja jums ir 16 kodols vai pat 2 core datoru
un jūs tikai darbojas viens gadījums mezglā.
Bet, ja jūs esat atkal jāņem kaut kas līdzīgs 161,
jums izvairīties milzīgs murgs galvassāpes, kad runa ir par
rase nosacījumus un slēdzenes un semafors
un rakstot patiesi multithreaded kods,
tāpēc upsides un downsides.
OK. Tātad, atpakaļ uz kodu šeit, ļaujiet man ieteikt, ka mēs sākam
vienkāršot lietas mazliet.
Mēs redzējām serveri viens mazliet Pirms kas izskatījās.
Tātad, tas ir apstrīdami diezgan vienkārši.
Bet, tāpat kā visā pasaulē PHP ir sistēmas
piemēram Laravel un tur lietas, piemēram, sliedes un Django,
Tas pats, kas node.js pasaulē.
Un mēs tērēt vairāk laika par šo trešdien
un nākošajā projekta.
Bet, ja es eju uz servera 2 direktoriju,
pamanīt pāris paradigmas šeit.
Tātad tas ir - tur notiek būt līdzvērtīga piemērs
bet tas ir, izmantojot regulējums sauc express.js,
kas ir bezmaksas open source programmatūru, piemēram Rails un Django,
piemēram Laravel, kas ir tikai galu galā iet
būt nenovērtēts šodien "Jo mēs esam rakstiski
šādus vienkāršus piemērus.
Bet ticiet mums.
Tas būs ļoti ātri kļūt jūsu draugs
jo tas ļaus ietaupīt Jūs daudz TDS kodu.
Un kopēju paradigmu express.js pieteikums ir
lai būtu app.js vai server.js failu, kas satur loģiku
par savu programmu vai Vismaz sākumpunkts.
Jums var būt vairākus failus.
Mezgls modulis apakšdirektorijā kas ir bibliotēkas
ka esat lejupielādējis piemēram async
un izteikt sevi citiem.
Un tad package.json, package.json izskatās šādi,
un jūs varat izveidot to manuāli vai instrumenti radīt to you
un tas ir burtiski JSON fails
un interesantākais ir atkarības šeit.
Tāpat kā Laravel, jūs bija, ka pārdevējs katalogs
un jums bija jāuztraucas par iepakojumu un dara -
faktiski atjaunināšanu ar Artisan vai līdzīgas komandas,
bibliotēkas jūs ir uzstādītas,
tāpat ar package.json šeit un jums pārvaldīt bibliotēkas
un versijas ka jums rūp.
Tātad, ja man ir package.json, Es varētu vienkārši darīt NPM,
Mezglu Package Manger uzstādīt, tas notiek automātiski meklēt
tajā package.json failu.
Skatīties un redzēt, man ir jaunākā versija
Visu pārdevēji moduļiem
ar mezglu uzsvērtu moduļi direktoriju vietas vai varbūt
dažās no vecākiem vai sencis katalogs.
Un, ja ne, tas ir gatavojas lejupielādēt tos
un jūs redzēsiet visu ķekars
HTTP sīkumi notiek pāri vadu.
Tātad, piemēram, ļaujiet man parādīs saturu
Mezglu moduļu tikai izteikt.
Ļaujiet man iet uz priekšu un droši dzēst mezglu moduļus
tā, ka viss, kas man ir tagad tas ir.
Un, ja es NPM instalēt, jums būs redzēt, ka tas notiek, lai lasītu
ka package.json failu un mēs esam redzējuši produkciju līdzīgs
tam ir Laravel pasaulē.
Tas lejupielādējot visu stuff ķekars, un tas ir
jo express savukārt ir atkarīga no visu ķekars
Citu tautu bibliotēkām.
Tātad, visi no tiem ir sava veida tiek lejupielādēta rekursīvi.
Līdz šim, ja man LS atkal,
tur ir mana mezglu moduļi direktorija atpakaļ
un izteikt kā atpakaļ.
Tātad, tas ir tikai veids, kā vienkāršojot iepakojuma apsaimniekošanu.
Tagad, ja mēs skatāmies app.js fails, tas notiek
būt atjauno Mūsu agrākais tīmekļa serveris
kur mēs vienkārši spļaut out "Hello, World".
Bet paziņojums paradigmas šeit
vispirms mums ir nepieciešama Express moduli, tad mēs esam šo līniju
kodu, ko jūs zināt no dokumentiem.
Jūs burtiski ārstēt, ka Moduļa mainīgs atkarībā,
tik atvērta iekavas aizvērt iekavas nozīmē izpildīt.
Kas notiek, lai acīmredzot atgriezties kaut mēs ejam
parasti pieprasa app.
Kā tas darbojas?
Es īsti nezinu.
Es let kāds cits, jūs zināt, ar skaidru pasaulē raksta, ka.
Es esmu gatavojas tagad stāvēt uz Viņa vai viņas pleciem tā,
lai manu pieteikumu darbojas nedaudz vienkāršāka.
Lūk, es esmu gatavojas, lai klausītos par konkrēto ostas
kas varētu būt lielākā daļa kaut ko.
Un šeit ir kods, kas ir varbūt vairāk atgādina tagad
gada Laravel un routes.php.
Tāpēc tas ir vakariņas vienkārši, es esmu tikai gatavojas, lai norādītu ceļu
par slash zvaigzni, tāpēc viss tiks absorbēts
šī pieprasījuma apdarinātājs.
Pēc pieprasījuma apdarinātājs paradigma ir tā anonīma funkcija
ar pieprasījuma argumentu
un atbilde objekts tāpat kā agrāk.
Un res.send kurjerpasta līdzekļiem jūs sūtat kods, kam
ar ko jūs vēlaties nosūtīt.
Un, protams, jūs varat darīt kaut mīļotājs
ko faktiski nosūtot failu vai HTML
vai dinamiski radīts saturu.
Bet tagad, viss, ko mēs darījām Tika izspļaut Hello, World.
Ja mēs ejam uz serveri trīs, tas ir pat mīļotājs tikai
, lai parādītu jums dažas funkcijas.
Un mēs jums parādīsim pat sexier versija
Šī trešdien.
Bet, ja jūs esat kādreiz dzirdējuši gada Socket IO varbūt,
tā kā es domāju, Jonathan vai kāds teica agrāk,
viena no lietām mezgls ir patiešām zināms
lai ir tā reālā laika uzvedību, vai ne?
Padomājiet par to, PHP MySQL, ja jums bija īstenot tērzēšanas serveri
PHP, kurā divi cilvēki varētu atvērt pārlūka logu, lai foo.com
un tad sākt IMing katru otrkārt, Alice vienā logā,
Bob citā tā, ka katra no tām uzskata, ka viņa
vai viņas ziņas citu logu.
Kā jūs to izdarītu PHP un MySQL?
Vai nav izmantoti Laravel veida un nav nozīmes, var būt
piemēram, index.php failu.
Un jums, lai jau - Dažos gadījumos tas ir nokļuvis spļaut
no formas, tāpēc ir būs HTML forma
kas, iespējams, norāda ne izmantojot parasto veidlapu iesniegšanas
bet Ajax iespējams, vai ne?
Tātad, apstiprināšanas apdarinātājs, tāpēc rakstot uz teksta laukā,
jūs hit ievadīt, un tad tas kļūst nosūta uz serveri, izmantojot Ajax.
Ko jūs tad darīt uz servera?
Tātad, jūs esat ieguvuši index.php
vai kaut ko dot PHP, kas ir saņemti HTTP parametrs
no lietotāja, Alises un Boba tērzēšanas ziņu, ko jūs darīt
ar to, lai izplatītu to Bobam vai Alice, attiecīgi?
Es domāju, jūs burtiski ir instrumenti, ar kuriem
to darīt savā min.
Tātad, piemēram, ko tu darītu?
Jums ir viena minūte, lai īstenotu šo programmu.
Yeah?
[Nedzirdams Piezīme]
Perfekta. Pa labi, lai tev datubāzi.
Mēs zinām maz mazliet par MySQL.
Tātad, jums ir tabula tas ir ziņas,
varbūt tur ir reizes zīmogs, lietotāja ID,
ķermenis ziņojuma pati radīja tas,
papildināta ka un tas viss.
Tātad, jūs uzglabāt datu bāzē.
Un pieņemsim, ka Alise nosūta pirmais ziņojums, kā tas Bob nokļūt
ka ziņa tagad no datu bāzes?
>> Tas varētu būt daži Ajax reakcija, kas ir pastāvīgi notiek
atpakaļ uz datubāzes top get [nedzirdama].
>> Tieši tā.
Tāpēc Boba kods, kurš kods ir tāds pats kā Alise ir tikai sava
par simetrisku attiecības,
Boba pārlūkprogramma ir dažas Ajax kodu tas ir iespējams, varbūt ik pēc 30
sekundes vilkšana serveri, izmantojot Ajax sinhronizāciju,
vai ir jauni ziņojumi?
Vai ir jaunas ziņas?
Ik pēc 30 sekundēm, kas notiek būt sava veida optimāls
jo viņš ir jāgaida vēl
ja Alice burtiski tikko nosūtīju ziņu.
Tātad, Boba pārlūks varētu katru otro hit serveri.
Bet tas nozīmē, ka Alises pārlūkprogramma hitting serveri
katru otro.
Kas par Charlie [Pieņemts pareizrakstības]
un David [pieņemts pareizrakstību] un Edward [pieņemts pareizrakstību]
un visi citi vēstule alfabēta?
Kas ir problēma Šīs pieejas?
Daudz hits pārmērīgu -
Es domāju, jūs esat tikai efektīvi Dozēšanas savu redzi
vai DDOSing, Distributed Pakalpojumu atteikšanas uzbrukums
uz savu vietu, līdz ar visiem
no šiem lietotājiem izmantot JavaScript kodu, kas ir tikai pinging
heck no servera pat ja jebkuram skaitam,
80 procentiem no laika neviens nav teicis neko
čata istabā.
Bet jūs vienkārši pārbaudīt lai pārliecinātos par tādu.
Tāpēc PHP ir daudz valodas ir tikai nav labi
reālā laika sakariem.
Jo PHP atsaukšanu tur nav centrālās atmiņas, vai ne?
Jums ir sesijas objekti kas rada ilūziju
centrālās glabāšanas bet tas ir uz vienu lietotāju pamata.
Jums nav globāla atmiņu kā jūs darīt ar Java Serversīklietotne
kas pazīstami vai cita rāmis darbojas tāpat.
Node.js, lai gan, jums ir global atmiņa "izraisīt jums
viens serveris un ka "var atcerieties kaut ko tā vēlas
par visiem lietotājiem.
Un jūs varētu vēl ir datu bāze.
Bet jauka lieta par node.js Arī tas, ka tas ir daudz labāk
par kaut ko, piemēram, PHP un radot ilūziju
apstrādāt vairākus lietas uzreiz.
Un faktiski kā malā, jūs varat īstenot tērzēšanas serverus PHP,
bet jūs parasti darīt kaut ko sauc par garo aptaujas
saskaņā ar kuru jums nav ping serveri katru sekundi.
Jūs ping serveri, serveris nereaģē uz jums
uz augšu par 30 sekundes, tas burtiski sēž
cilpa gaida, un gaida.
Un serveris pārbauda, ​​vai tur ir jauni dati bāzē
un tikai pēc tam, kad tā jūs redz, "Ak, šeit ir ziņa no Bob, "
tas atbildi uz HTP serveri?
Tāpēc efekts savā pārlūkprogrammā ir tas, ka IE ikona vai Mozilla
vai kāds vienkārši tur vērpšana 30 sekunžu laikā.
Bet otrādi ir, jums nav ir 30 savienojuma pieprasījumus
30 sekunžu laikā, jums ir viens.
Tāpēc to sauc sen aptaujas.
Bet vēl labāk mūsdienu web pārlūkiem ir kaut kas ko sauc
WebSocket, kas esat lietojis CS143,
Jūs varat efektīvi veikt TCP savienojumu no klientiem
kā pārlūku uz serveri un tam jābalstās uz to
neizmantojot gandrīz tik daudz resursu
kā HTTP tradicionāli varētu darīt.
Un Socket IO ir node.js bibliotēka
kas padara to daudz vieglāk padarīt kontaktligzdas savienojumi
vai ilūzijas tur pie veciem pārlūkiem
lai jūs varētu īstenot šo reālā laika funkcionalitāte ir.
Tātad, šeit ir piemērs.
Šī stuff up augšu izpaužas nedaudz sarežģītāks
bet tas ir galvenokārt nokopēt un ielīmēt No socket.io 's dokumentāciju.
Lūk, tagad vairāk precīzs pieprasījuma apstrādātājiem.
Ja lietotājs pieprasījums slash, ko failu es esmu gatavojas
būtu acīmredzami kalpo līdz viņiem?
Index.html.
Un tur ir dažas jaunas sīkumi šeit plūsma
ko es tev parādīšu tikai brīdi.
Bet tas ir tikai vēl viens veids,
no satveršanas iesniegt nedaudz efektīvāk
nekā tikai darot fs.readFile.
Tas ir mazliet gudrāki jo īpaši attiecībā uz lieliem failiem.
Tik garš stāsts īss, šīs līnijas tikai, lai kalpotu
up failu ar nosaukumu index.html
kas tagad uzņemties satur HTML formu, ar kuru Alise
un Bobs varētu savienoti.
Visbeidzot, io.sockets.on, tāpēc šis nāk no šīs pozīcijas šeit.
Tātad, es esmu tikai lasījums dokumentācija io.socket dod man
piekļuvi tā saukto WebSocket ar pārlūku,
starp pārlūkprogrammu un serveri.
Es esmu klausoties īpašu Pasākums savienojums, kas nozīmē
kad lietotājs pirmo reizi hits serveris mēģina
atvērt šo savienojumu, es esmu saukšu šo aicinājumu atpakaļ.
Un tagad, es esmu gatavojas darīt šādi.
Ik pēc piecām sekundēm, ko es esmu gatavojas darīt?
Es esmu gatavojas emitēt vai pārraidīt Ja jūs atceraties nulles,
grafiskais valoda būtu ka raidījums bloki?
Tātad, jūs gatavojas emitēt
vai izraisīt notikumu sauc patvaļīgi no servera.
Un tas notiek, lai ietver ziņu Ping
un pašreizējais datums.
Tātad, tas ir faktiskais tērzēšanas serveri, ka Alise
un Bobs var izmantot, bet tas ir sava veida automatizēta tērzēšanas serveri
ja ziņojumi vienkārši veida hidrolokatoru impulsus.
Tas ir tikai šim pie reizes, kas ir tiek nosūtīti ik pēc piecām sekundēm.
Tātad, ja es tiešām palaist šo lieta - un tas arī viss.
Lai būtu skaidrs, šeit lejā, paziņojums tas ir tikai piesakoties uz leju šeit.
Tātad, ļaujiet man savukārt neredzam to.
Ļaujiet man darīt mezgla app.js.
Ļaujiet man iet uz manu pārlūku.
Pārlādēt mājas lapā šeit.
[Pauze]
Un ļaujiet man aizveriet inspektors.
Ik pēc piecām sekundēm, man ir demonstrācija, lai gan nav
interaktīvs cilvēka
par kaut ko, kas ir notiek asinhroni.
Pārlūkprogrammā paziņojumā, nav vērpšanas ikonas.
Tas ir, izmantojot mīļotājs funkciju Chrome mūsdienu pārlūkprogrammām
uzturēt socket savienojums zem pārsega
un tas ir tas, ko sauc parasti pub / sub modelis,
publicēt / abonēt modeli, kur mēs neesam darījuši
ka diezgan skaidri šeit.
Bet kas ir jauka par šo Kopumā pub / sub paradigma
ka jums var būt viens izdevējs.
Šajā gadījumā centrālā servera un viss
indivīda pārlūki ir klienti.
Alices un Bobs, kas pasaule var parakstīties uz to,
lai jūs varētu releju ziņas starp jebkuru lietotāju skaitam.
Un, pat ja mēs atkal esam neredzam interaktivitāti,
mums bija varbūt 12 līnijas kodu tikai, lai to paveiktu.
Un tas droši vien nav lēciens iedomāties, kā jūs varētu sakult
out index.html failu kas ir patiess HTML formu,
Mazliet jQuery kodu ar Ajax, kas nenosūta dienas laikā
bet tikai sūta neatkarīgi Alice vai Bob veids ar serveri
un tad serveris relejs to ārā.
Un es apsolu, lai paskatītos pie viena pēdējā lieta tikko
ķircināt jums ar to.
Ja mēs iedziļināties plūsmā nulle un viena,
jūs redzēsiet kodu, kas ir tikai mazliet atšķirīgs šeit.
Vienkārši, lai jūs esat redzējuši, tas ir alternatīva
to, ko es sauc fs.readFile Metode iepriekš, saskaņā ar kuru,
Jūs varat pateikt node.js, "Go lasīt šo failu atmiņā.
Bet, ja tas ir liels tikai dot me gabalu laikā. "
Un jūs varētu zināt, no CS165
vai 161 failu sistēmas ir dažādi
veiktspējas īpašības.
Jūs varētu vēlēties, lai izlasītu blokos 512 baitu
vai 2 kilobaiti vai neatkarīgi.
Tas ir optimizēt veids saņemt atpakaļ faila iteratīvi
lai jūs varat spļaut to kas nedaudz ātrāk
pārlūku vai kurš beigās klients.
Tik liels saturu šodien, un mēs ejam nirt
uz sīkāk trešdien ar Tim [pieņemts pareizrakstību]
jo īpaši, skatoties uz to, kā mēs var tulkot dažas idejas
no pirmajā pusē Protams Laravel un modeļi
uz bibliotēku, ka viņš pats rakstīja sauc Bookshelf.js
kas ir kļuvusi aizvien populāri sabiedrībā
jo tas dod jums lielākā daļa no tā,
ja ne vairāk kā funkcionalitāte daiļrunīgs
kas atgādināt, ka bibliotēka ieskatu par Laravel,
tā vairāk, un vairāk kā
attīstīt pilnvērtīga progr trešdien.
Mēs jūs redzēt, tad.