>> Selvä.
Joten jännitysnäytelmä oli, mikä on Node.js kuten tiedätte sen tänään?
Mitään? Yeah?
>> Se oli kuin puitteet kirjallisesti JavaScript
sovellukset laajasti -
>> OK, joka toimii.
>> - Tiedän like Tavallisia käyttötarkoituksia, kuten -
tai jotain voi tehdä on kuin -
[Inaudible Huom!]
>> OK hyvä.
Joo, niin se on kehys.
Se moottori, jolla voit voi suorittaa JavaScript-koodin
Server-sivusto.
Tämä voi tarkoittaa Yksinkertaisin asioita
kuin kirjallisesti komentoriviltä kirjoitus ei Python tai Bash
tai Ruby tai PHP, mutta vain JavaScript itse
ja suorittamalla sen osoitteessa vilkkuu komentoriville.
Tai voit itse ajaa se sisällä web-palvelin.
Ja itse asiassa sisällä Node.js itse,
Tässä yhteydessä on koko joukko kirjastojen kesken, jotka ovat
HTTP-palvelin sisäänrakennettu.
Joten, voit itse kirjoittaa palvelin kuten tulemme näkemään
vain hetken, super helposti vain ymmärrystä vähän
HTTP ja TCP ja satamat.
Ja voit kutemaan kuuntelu Web-palvelimeen ilman Apache,
ilman Microsoftin IIS.
Ilman muita ohjelmisto on asennettu,
voit vain kutemaan tämän ja kuunnella eniten tahansa satamaan
järjestelmän, joka olet saa.
Joten asia ja pisteitä, anna minun mennä ja avaa
tätä esimerkiksi palvelin-0.js.
Niin huomaa, että huipulle tiedoston, vain nippu
ja mielenkiinnoton kommentteja, ja sitten on pari
edustavien riviä koodia että näemme recurringly.
Joten, var HTTP saa vaativat "HTTP".
Joten sisäänrakennettuna Node.js " infrastruktuuri on koko joukko
moduuleja, jotka ovat oikeastaan ​​vain kirjastojen ja kaikki on tavallaan
Nimen tilaa yksilöllinen tunniste
kuten tämä on "HTTP".
Niin, että kuten paljon kieliä kuten Java ja C + +
ja C, vain silloin, kun tuoda tai sisällyttää
tai solmun puhua edellyttävät moduuli tekee sen bittiä.
Ja kaikki muisti vaatii saada ladattu
RAM ja siksi sitä käytetään.
Joten, te tavallaan lataa tätä kirjastojen tai moduuleja kysyntään.
Tämä tarkoittaa sitä, mennä eteenpäin ja vaatia
tämän ohjelman HTTP kirjasto,
ja viitata kyseiseen kirjastoon tapa muuttuja nimeltä HTTP.
Mutta tämä vasen symboli voisi on kutsuttu mitään, foo,
bar, Baz, sillä ei ole väliä.
Joten toisin kuin C + + ja Java ja C jossa kun tarvitset
tai tuoda kirjastoon, se vain eräänlainen
ja tulee maailmanlaajuisesti käytettävissä,
Node.js moduulit ovat tiukemmin namespace.
Niin että omat - että toiminnallisuus pääsee vain tällä hetkellä
Poiketen tämän muuttujan nimi.
Et voi vain aloittaa tyypitysmenetelmiä, että on olemassa
siinä oikealla tavalla joka on todennäköisesti hyvä,
koska sitten namespace ei saada läheskään niin sekavaa
kuin paljon kieliä.
Okei, joten nyt yhteinen ehdottaa, luo HTTP-palvelin
Jonathan [oletetaan kirjoitustapa] oli mahdollista, on kirjaimellisesti
yhtä helppoa kuin soittamalla luoda Server menetelmä sisällä
HTTP-moduuli.
Niin, tämä on palaamassa viite
jonkinlaiseen web-palvelin.
Se tuli Apache, ei välttämättä niin raskas paino.
Tämä yksi on hieman yksinkertaisempi.
Ja nyt, minun täytyy vain yksinkertaisesti tehdä muutamia asioita.
Joten ensin haluan selaa pohjaan täällä
ja ohittaa ohjaaja Menetelmä hetki.
Ja huomaavat tämän Koodirivin
server.on joka on tarkoittaa sitä, palvelin -
listen kuten jQuery koodi,
kuuntele tapahtuma nimeltään pyynnöstä
ja vain ottaa arvaus mitä minun pitäisi tehdä
kun pyyntö tapahtuma tulipalot palvelimelle.
Yeah?
>> Call-toiminto käsittelijä.
Joten, kirjaimellisesti toteuttaa koodi, joka on viitattu
Tämän muuttujan ja oikeastaan ei muuttuja symboli täällä,
mikä on että symboli viittaa?
No, tämä nimi toimia jopa täällä
ja ohjaaja ilmeisesti ottaa kaksi argumenttia.
Miksi kaksi? No, jos vain lue mitään asiakirjoja
tätä erityistä moduulin avulla kerrotaan, että ohjaaja
että joudumme turvautumaan tulee kulunut vähintään kaksi argumenttia,
viittaus hakemukseen,
ja sisältä Pyynnöstä kirjaimellisesti tarkoittaa HTTP-pyynnön.
Joten, kaikki HTTP-otsikoita että saatatte muistaa
alusta lukukausi tai jotkut ennen luokan
tai kokemus kuin saada linja ja isäntä linja
ja User-Agent linja, kaikki tämä on kapseloitu ja enemmän sisällä
tämän pyynnön kohteen.
Ja vastaus esine on lajitellaan lähtevän datan.
Niin, sinulla on viittaus esine, joka tulee avulla voit
lähettää tiedot takaisin selain soittamalla menetelmillä
Tämän viimeksi mainitun väitteen kehotti Res vastausta.
Mutta tämä voisi olla nimeltään foo tai baari, tämä on vain yleissopimukset.
Joten nyt, mitä teen?
Hyvin, näyttää siltä, ​​että sisällä tämän super yksinkertaisia ​​web-palvelin
että olen täytäntöön, olen aikoo tehdä seuraavaa.
Aion kirjoittaa HTTP header Status Code 200,
200 merkitys OK, kaikki on hyvin.
Ja sitten, aion välittää ilmeisesti.
Mikä tietotyyppi Toinen argumentti oikealle pään?
>> Se on esine?
>> Se on objekti kuinka monta avaimet ja arvot?
Vain yksi kutakin, oikealle, yksi keskeinen arvo parin.
Joten, "sisällön tyyppi".
Ja ainoa syy Lainausta se tässä
koska yhdysmerkki voi olla conflated varten miinusmerkki
tai jotain sellaista.
Joten, minun täytyy lainata sitä täällä, Yhdelle tai lainausmerkkeihin.
Mutta jälleen kerran yhteinen paradigma
JavaScript-koodi on usein puolilainausmerkkejä näinä päivinä,
paksusuolen ja sitten arvo.
Niin, tämä on vain ns mieli tyyppi.
Tämä on HTTP-otsikko joka on kirjaimellisesti menossa
tyytymään väliviivaa tyyppi paksusuolen tekstiä slash plain että menee
voidaan lähettää palvelin selain
niin, että selain tietää onko suorittaa tämän raaka teksti
tai HTML-muodossa tai kuvaa tai videota
tai flash-tiedoston tai mitään muuta.
Nyt, jos voin itse halua lähettää kehossa sivun?
No, vain lukemalla asiakirjat
vastauksesta objektin sisällä tätä kirjastoa.
Näen, että siellä on oikea menetelmällä ja joka vie merkkijono,
ehkä muita asioita, mutta minimaalisesti merkkijono.
Ja merkkijono on mitä sylkemään selaimen.
Tässä tapauksessa sen Super yksinkertainen, sen hello world,
mutta se voisi olla opne kiinnike, html, loppusulkumerkki,
alkusulkumerkki pää, close teline ja niin edelleen,
tämä voisi olla Raw html.
Mutta me pitää esimerkiksi yksinkertaisina vain sylkeminen
ulos yksinkertaisin mielen tyypit joka on kiistatta text / plain.
Ja sitten response.end vain tarkoittaa sulkea yhteyden
ja lähettää kaikki, mitä olen tavallaan puskuroitu sisällä
Tämän objektin takaisin selaimelle.
Olen valmis. Selvä.
Niin, viimeinen asia Teen täällä
ja tämä on hieman mielivaltaisia ​​ja tarkoitus olla viileä,
on Kerron palvelin vihdoin kuunnella
tietyllä TCP oletuksena portti.
Recall alusta Luokan että palvelut -
tai normaalisti yksilöllisesti tunnistaa sen numerot,
AD on web, 443 on HTTP perustuu sivustot, 22 on SSH, 21 on FTP
ja 1337 on vain mielivaltainen mutta se on suurempi kuin 1024
mikä tarkoittaa useimmissa järjestelmät, voin käyttää sitä
ilman Super käyttäjän oikeuksilla.
Joten se on vain kätevä.
Mutta 8080 on off - yhteinen yksi, 8088, oikeastaan ​​mitään suuria
tuhansia yhteisenä mutta tämä on vain enemmän eliittiä.
Okei, niin mitä tapahtuu kun olen itse suorittaa tämän?
No, en vain vierailla sivu selaimessa.
Tämä tiedosto on nimeltään server-0.js.
Koska jälleen, Apache on nyt poissa kuvasta
jälkipuoliskon Kurssin.
Jos haluan web palvelin, Minun täytyy kirjoittaa
ja suorita sitten tämä web-palvelin.
Mutta näyttää siltä, ​​että JavaScript sekä asiakkaan puolella
ja palvelimen puolella on tulkittu kieli.
Joten, en tarvitse tulkki.
Joten Se on - jos kiinni ajaa solmu ja sitten palvelin-0.js,
En voi tai saa nähdä Joissakin lähtö riippuen
mitä kirjastoissa olen mukana, mikään ei tunnu tapahtuvan.
Mutta anna minun mennä selain ja anna minun mennä
on sama IP-osoite minun CS50 asiakkaille.
Mutta tämä voisi vain yhtä hyvin olla Macin
tai minun PC ja paina enter.
Joka todella näyttää Apache.
Se on kuin hakemisto listaus me katsoimme
klo alkupuoliskolla.
Joten, mitä tein väärin?
Joo.
[Inaudible Huom!]
Tarkalleen, eikö?
Joten, Apache kuuntelee edelleen oletuksena porttia 80.
Vaikka voisin muuttaa, että Voisin sammuttaa sen kaikki yhdessä
mutta se on edelleen käynnissä.
Mutta nämä kaverit voivat varmasti rinnakkain.
En yksinkertaisesti täytyy laittaa paksusuolen 1337 ja sitten ehkä
tai ehkä ei kauttaviiva end pääsyn tähän porttiin
että tämä palvelin on käynnissä.
Ja nyt näen, että hei, maailma on palannut.
Ja voin lyödä reload kuin monta kertaa kuin haluan,
se on edelleen palvelevat jopa sivun.
Tosin jos Avaan Chromen tarkastaja, mene verkkoon
ja sitten uudelleen koko sivun
huomaa, että todellakin tämä oli pyyntö, joka lähetettiin.
Jos katson Raw lähde,
Huomatkaa selain lähettää kaikki nuo asiat.
Ja sitten vastausta palvelin oli super yksinkertainen.
On 200.
Jos se ei ole liian alhainen ruudulla,
on sisällön tyyppi.
Ja sitten Node.js tavallaan automaattisesti
minulle lisättyä päivämäärä ja kaikki muut jutut
että selaimet tyypillisesti odottaa.
Joten, haluan vain nähdä pikku järki tarkistaa.
Anna minun mennä takaisin koodia server-0.js ja haluan -
joka kerta menen ohjaaja,
haluan vain sanoa console.log.
("Meillä oli vierailija!").
Minun ei tarvitse kääntää tai mitään sellaista,
se on tulkittu kieli.
Joten nyt, anna minun mennä takaisin sivu, lataa yksi, kaksi,
kolme kertaa ja mennä Takaisin omaan ikkunaan.
Ja nyt näen tämän.
No se on outoa, Näen kuusi riviä.
Mielenkiintoisia Web-trivia, miksi Saan kuusi pyyntöä ei kolme?
Yeah?
[Inaudible Huom!]
Joo. Joten, kuten ehkä tiedätte vähän tyhmä kuvaketta alkuun
selaimen bar, että paljon
sivustoja käyttää voimin olla Harvard Crest,
se voisi olla yrityksen logo tai jotain sellaista.
Joten, selaimet näinä päivinä tavallaan
ja ylimielisesti tehdä HTTP-pyynnön
lähes jokainen sivusto, joka Käyt tarkistaa, jos on
oletuksena tiedosto nimeltään favicon.ico
samassa hakemistossa kuin tiedosto pyysit.
Ja jos on, se asettaa kuvaketta siellä.
Joten kaikki näemme on juuri näin.
Ja itse asiassa, katsotaanpa jos voi nähdä tämän sijaan tyyppi
ulos vain, "Meillä oli vierailijan.
Anna minun mennä eteenpäin ja lähtö.
Ja minä vain tiedä tätä alkaen katsot asiakirjat.
Siellä omaisuutta sisällä pyyntö esineen nimeltä URL
joka sattuu olemaan polku
pyydettyjä todellinen URL.
Joten, jos en käynnistä palvelin yksinkertaisesti käynnistät solmun
palvelimelle-0.js ja nytkö tämä yksi, kaksi,
kolme ja palata tänne.
Siinä se on.
Slash minä - ihmisen pyydetyt
in favicon.ico on mikä selain on
ylimielisesti pyynnön.
Mutta kohta ei ole niin paljon favicon tavaraa
mutta miten palvelin toimii.
Yeah?
>> Miksi jotka ovat olevan jonkin verran pyyntöön?
>> Miksi tuo on - luonteen mukaan, miten HTTP toimii.
Joten, HTTP voi vain pyytää yhden tiedoston kerrallaan.
Selaimet voivat olla fiksu näinä päivinä
ja pitää TCP yhteyden auki.
Jos otit CS143 tai yleisesti perehtynyt verkostoituminen,
niin voit saada tehokkuusetuja
pitämällä mediassa socket open
tekemään useita HTTP pyynnöt sarjatuotantona yli
mutta he ovat yksi tiedosto pyyntöä kohden.
Joten, jos käyt jotain -
Siis voimme mennä eniten tahansa verkkosivuilla.
Jos menet - nyt vedä ylös Chromen tarkastaja täällä.
Se voi saada täyttää useimmat sivun.
Siirry verkkoon välilehti ja mene www.cnn.com.
Ja kun käyt cnn.com, sen kotisivulle -
selaimen melko atrociously tekee - laskenta jatkuu.
OK. Vähintään 289 HTTP pyynnöt uudelleen ja uudelleen.
Ja siksi kun käyt erityisesti paisunut sivustot,
he hidas ladata koska kaikki
varojen he latautuu.
Niin, se näyttää 298.
Saattaa olla joitakin Ajax tapahtuu tässä vaiheessa tai jokin
varoista ovat vain alhaiset.
Niin, jokainen näistä on henkilökohtaisen pyynnön menee takaisin
edestakaisin, edestakaisin.
Ja siksi aikaisemmin, vaikka vaikka me tavallaan puhuneet
siitä hieman fancifully jos laitat komentosarjatunnus,
ehdottomasti tekee eroa, kun sinulla on -
se alkaa olla paljon liikennettä ja paljon
Tiedostojen pyydetään.
Ja kukin tämä merkitsee todennäköisesti kuva, mediatiedoston,
JavaScript-tiedoston, CSS-tiedosto tai vastaavaa.
Joten, olemme jo jopa noin 4 megatavua vain
katsomaan päivän uutiset.
Hyvä kysymys.
Selvä.
Joten, mitkä ovat joitakin upsides vaikka?
Oikea, osaamme tehdä verkkosivut jo PHP.
Ja monet teistä tulivat luokan tietäen Django
ja Python tai kiskot Ruby.
Joten, miksi tarvitsemme vielä toinen kieli ja infrastruktuuri?
Mikä on Node.js erityisen hyvä jos tiedät?
[Tauko]
Jokin asia?
Ei? Yeah?
>> Uudelleensijoitusalueella viestejä.
>> Joten, uudelleensijoittamista viestejä.
Niin se on totta ja se on totta entistä teknisistä syistä
ja että Node.js ja oikeastaan JavaScript on erityisen
sopii hyvin asynkroninen koodia,
jos jolloin luot illuusio
tehdä useita asiaa kerralla.
Joten, vaikka ne ovat todella tapahtuu sarjatuotantona,
itse asiassa useimmissa tapauksissa, JavaScript sekä asiakkaan puolella
ja palvelimen puolella on Yksisäikeisessä.
Jotka, jos olet ottaen 161 tai jopa 61 tarkoittaa, että -
Tämän ohjelman tietävät,
tulkki voi kirjaimellisesti vain tehdä yksi asia kerrallaan.
Mutta tämä ei ole suuri jotain web-palvelin
jos saatat olla kymmeniä tai satoja tai ehkä jopa tuhansia
Käyttäjien kaikki yrittävät käsiksi verkkosivun
juuri samaan aikaan.
Ja vielä, jotka viittaavat että niiden käsittely yksi
sen jälkeen, kun toinen sen jälkeen, kun muut varsinkin jos jotkin
näiden pyynnöstä kuten näimme CNN saattavat vaatia palvelevat
jopa 300 tiedostot ennen jopa saada seuraavalle käyttäjälle
joka haluaa nähdä sanoo uutinen.
Node.js on paremmin ympäristöihin niin.
Sillä mitä tapahtuu on tahansa hidas käynnissä prosessi
kuten lukeminen levyltä tai hakea tietoja tietokannasta tai puhumisen
johonkin muuhun verkko-palvelin,
että yleensä on latenssi, eikö?
Jos et ota 61 tai 161 etenkin kaikille tämmöinen
ja oheispalveluja yleensä paljon hitaampaa
kuin olla tekemättä mitään sisällä sama RAM ja sama CPU
jotka sanovat tässä tapauksessa palvelin on käynnissä.
Mutta mikä on mukavaa noin Node.js on, että voit -
ja JavaScript yleisemmin on, että voit tehdä jotain
ja sitten sanoa, "Hmm, tämä on menossa
ottaa minut muutaman millisekunnin tai jopa muutaman sekunnin.
Saanen tavallaan haarautuvat, että pois, " mutta se ei ole totta prosessi.
Ja sitten kun se on tehty tekee että hidas käynnissä prosessi
kuten tarttumalla rivit tietokanta tai lukea tiedoston. html
levyltä, se saada takaisin minulle melko
kuin minä tarvitse odottaa sitä.
Joten, jotta tämä selvempi.
Tämä on minun keino joten tämä tutumpi.
Okei, joten tämä on Ravista Shack aukiolla.
Tämä on eräänlainen yhteinen paradigma
selittämiseksi asynchronicity.
Tämä on todella hyvä Esimerkiksi siksi, Shake Shack
ja Tasty Burger ovat hämmästyttävän hidas, mitä he tekevät.
Mutta kohta on ne todella hyvä ottaa tilauksia
ja otat rahaa, kun joka odotat ruokaa.
Niin, tämä on oikeastaan ​​parempi muotoilu kuin vaihtoehto.
Koska Oletetaan kävelet myymälä näin ja sinulla
eteen ja komento tilauksesi ja haluat
Burger, parhaan kykyni kertoa, se kestää vähintään viisi
minuuttia tai enemmän itse saada hampurilainen.
Niin, se olisi eräänlainen huono liiketoimintamalli
jos kun olet odottanut teidän burger, Alice [oletetaan kirjoitustapa]
ja Bob [oletetaan kirjoitustapa] ja Charlie [oletetaan kirjoitustapa]
ja kaikki muu on jonotuksen takanasi
ja olet kirjaimellisesti esto rivi odottamassa ruokaa.
Joten ilmeisesti kello Shake Shack
ja muut pikaruokaa paikat eivät tee tätä,
he tekevät jotain tällaista.
Ne antavat sinulle summeri.
Ja he tavallaan lähettää teitä tapa.
Ja ne soittaa sinulle takaisin joten tämä pikku juttu värisemään
tai flash saada huomiota.
Niin, tämä on kirjaimellisesti mitä?
Jotain Node.js tekee.
Jos Node.js tai JavaScript yleisemmin käytetään
ja ohjelmoija on fiksu
ymmärtää, "Tiedätkö mitä?
Mitä minun täytyy tehdä oikein tässä voi kestää jonkin numero
millisekunteja tai sekuntia.
Tiedätkö mitä?
Anna minun mennä eteenpäin eikä kutsuvat sitä synkronoidusti -
"Että on kaveri esto kaikki muutkin linjassa, "-
anna minun mennä eteenpäin ja tavallaan astua syrjään
ja yksinkertaisesti kutsua itseäni takaisin
kun tuo pitkään käynnissä operaatio on loppuun suoritettu. "
Ja soittaa takaisin tietenkin on viitteitä, tässä tapauksessa
to takaisinkutsufunktio, Viittaus Chuck koodia
että saavat toteutetaan kun hampurilainen on valmis,
paljon kuin tämä asia on jonkin verran sellaista toiminnallisuutta sisäänrakennettu
että se alkaa täristä tai pörinä, kun se on aika voit
kutsua takaisin rivin.
Joten, mitä tämä tarkoittaa reaalisesti?
No, meidän on jatketaan ylös.
Joten, anna minun mennä eteenpäin ja tehdä sen ensin.
Server-1.js, haluan ensin yksinkertaistaa koodin
jotta voimme ottaa vauvan askeleita kohti enemmän pakottavia ongelma.
Tämä on täsmälleen sama ohjelma, jonka kirjoitin ennen.
Mutta mitä on muuttunut?
On tavallaan hieman syntaktinen ero
tämän ja versio 0 hetki sitten.
Mitä hyppää ulos jos muistatte?
Joo Cynthia [oletetaan kirjoitustapa]?
[Inaudible Huom!]
Joo. Joten nyt meillä on linja Funktion siirrellään sisään
Olemme saaneet eroon sort
ja turhaan nimetty käsittelyfunktio.
Hyödytön vain, että ennen jopa kutsuen sitä yhteen paikkaan,
En todellakaan tarvitse tuhlata aikaa antaa sille nimi
ja vaikeuttaa lukea koodia ylhäältä alas.
Joten, nyt vain julistaa inline on anonyymi funktio.
Ja olen tekemässä kaksi muuta asiaa.
Teen paremmin käyttö dot merkintätapa.
Joten kuten jQuery, paljon solmun menetelmiä voidaan ketjuttaa.
Niin, että kun olet tehnyt kutsuvan jotain, sinun ei tarvitse
odottaa uuden linjan ja kutsua toista menetelmää,
voit vain ketjun ne yhteen.
Ja niin tällä tavalla, voimme todella tiukennettava.
Niin, tämä on kirjaimellisesti www-palvelin viisi riviä
koodia yhteensä toisin -
toisin kuin mitä voisi normaalisti on tehtävä sopia jotakin.
Jos menen palvelimen 2 nyt tehdään tämä.
Palvelimen 2 - itse asiassa nyt palata kyseiseen palvelimeen 2.
Katsotaanpa nyt avata async-0.js ja Tämän ongelman ratkaisemiseksi käsillä.
Joten ensin, mennään eteenpäin ja avoin
up async-0.js selaimessa.
Joten async-0, anna minun mennä takaisin selaimen.
Hit reload.
Ja nyt, tämä on tavallaan virheilmoituksen.
Itse näen 500 Chromen tarkastaja.
Mutta haluan tarkemmin pyytää hello.txt.
OK. Niin, tämä tuntuu toimivan.
Joten async-0.js ei näytä tarjoilla jotain slash.
Sillä ei ole oletuksena tiedostojen tuki.
Mutta jos I nimenomaan pyytää hello.txt,
joka tuntuu olevan tukemiseen.
Miksi näin?
No, mitä olen mennyt täällä
ja tehty toteutetaan Super yksinkertainen web-palvelin
joka osoittaa, missä asynchronicity voi olla hyödyllistä.
Ja joka toteutetaan seuraavasti.
Ensinnäkin olen käyttäen HTTP-moduuli uudelleen,
mutta myös FS joka luultavasti tarkoittaa?
Yleisesti CS, tiedostojärjestelmä.
OK tiedostojärjestelmä.
Siksi esiin FS, tiedostojärjestelmä.
Okei, niin mitä tämä antaa minulle?
Liittyvät toiminnot tiedostoja, kuten saada kulunut,
tiedostojen avaamisesta kirjallisesti hakemistoja, lukeminen hakemistoja
ja kaikki tuollaista kamaa.
Joten nyt huomaa, tämä koodi on sama kuin ennen,
luoda palvelin, kulkee vuonna Nimetön toiminto.
Tämä on tavallaan mielivaltainen.
Tämä ei ole kovin turvallinen web-palvelin.
Itse asiassa, voit käyttää eniten minkä tahansa tiedoston minun kovalevy
tai palvelimessa kovaa ajaa suorittamalla tämän koodin
koska olen vain sokeasti olettaen, että aion
napata mitä käyttäjä pyydetty URL.
Ja aion etuliite on piste
niin että olen hieman turvalliseksi
sanomalla mitä tiedosto he voivat Hakemuksessa tulee ainakin alussa
nykyiseen hakemistoon.
Tietenkin on olemassa uhka täällä.
Koska jos he sen sijaan kuuluu mitä?
Tieltään, ne voi sellaista ja kiertää liikaa.
Piste, piste, eikö?
Joten, jos käyttäjä vain laittaa piste, piste URL teoriassa
he voisivat alkaa saada minun - ja sanovat salasana tiedosto.
Niin, tämä ei ole tarkoitus turvattava,
se on tarkoitus olla yksinkertainen.
Joten tässä, minulla on muuttuja, joka on ketjuuntuminen piste
joka on läsnä hakemisto ja URL-osoitteen
jonka näimme ennen on kuten slash tai / hello.txt.
Joten nyt, se saa hieman mielenkiintoisemman.
Ensinnäkin huomaa pohja.
Olen kuuntelee samaan porttiin ennen.
Joten todellinen mielenkiintoinen työ on sisällä täältä.
Joka kerta, kun kysely tulee luonteeltaan
Tämän koodin, mitä teen?
Soitan tiedosto järjestelmän Tiedoston lukeminen menetelmä,
kulkee polku että haluan lukea.
Ja nyt tämä on Mielenkiintoista tässä,
tämä on täytäntöönpano asynkroninen menetelmä.
Et voi saada tuottoa arvo lukea tiedoston.
Itse ilmoitus on no vasen ilme
vasemmalla lukea tiedoston.
Se ei palauta arvoa.
Pikemminkin se vaatii soittopyynnön toimimasta, kun se on valmis
antaa sinulle takaisin vastauksen.
Joten jälleen oltava selkeitä, ottaa huomioon menneiden,
monissa ohjelmointi kieliä, jos halusi
lukea tiedoston tapauksessa kohdassa PHP,
tiedosto alaviiva saada korostaa sisältö,
sinulla on vasemmalla ilmaisun kaikissa arvon jälkeen -
ennen yhtäläisyysmerkki, se tarkoittaa, että olet määrittämällä
kyseiselle muuttujalle paluu arvo tämän tehtävän.
Voit tehdä sen Node.js, mutta sinulla on yleensä
soittaa nimenomaan synkroninen versiot toimii kuten,
Minusta se on lukenut sync tiedoston tai sync lukea tiedostoa.
Unohdin miten he nimesivät sen.
Ja joka antaisi voit paluuarvo.
Mutta jos tiedosto on Joissakin etätiedostojärjestelmässä
tai levy on vain luonnostaan ​​hidasta, se voi kestää 10 millisekuntia
tai 2 sekuntia tuon tiedoston todella tulla takaisin.
Samaan aikaan mikään muu web Vierailijat huolletaan
teidän websit.
Estät.
Sitähän kutsutaan esto IO, input / output.
Joten tässä, tämä on paljon fiksumpia.
Koska mitä Node.js on menossa
tehdä kun tulkkaus on seuraava,
se tulee soittaa Tiedoston lukeminen menetelmä,
yrittää yksi ylös tiedoston kenellä polun määrittämän arvon P.
Ja sitten jos ja kun se on valmis antaa sinulle takaisin sisällön
tiedoston P, se soittaa funktio, jonka allekirjoitus on
sopimuksen mukaan seuraavat.
Kaksi väitettä, joista ensimmäinen joka on ehkä virhe objektin,
pääoman E, se on esine kutsutaan virheestä tai Null
jos ei ole sellaista virhettä.
Ja toinen argumentti - ottaa arvaus - tulee olemaan mitä?
Sitä kutsutaan tietojen ilmeisesti vaan Mikä on tiedon konkreettisemmin?
>> Sisältö?
>> Sisältö hello.txt esimerkissä Vedin
ylös selain hetki sitten.
Eli toisin sanoen lukea tiedosto ja monet Node.js toimintoja
kuten at eivät palaa arvoja.
He kutsuvat kutsuja ja välittää
niille kutsuja mitä olisi ovat perinteisesti olleet
palata arvo.
Ylösalaisin tässä lähestymistavassa on
että voisi kutsua Lue tiedosto T0.
Takaisinkutsufunktio voimin ei voi kutsua yksi rasti myöhemmin
niin sanotusti T, se voisi kutsua T1000,
tuhat punkkeja myöhemmin.
Mutta kohta on, että Loput koodin tämän tiedoston,
jos jokin olisi välittömästi toteutetaan samalla Node.js
ja vaikka tiedostojärjestelmä keksii miten lukea
tiedoston ja saada sen takaisin sinulle.
Joten luot -
niin tehokkaasti illuusion
rinnakkaisuus kun kerroit hitaampaa käynnissä olevista prosesseista ei ole
estää tärkeitä juttuja, osa, joka huolto käyttäjille.
Joten, miten voimme hoitaa tämän?
Tämä on hyvin yleinen Node.js paradigma.
Ja siellä on tapa vain yksinkertaistaa tämä on näemme ennen pitkin.
Haluan ensin tarkistanut, jos Virhe ei ole nolla.
Joten, jos se ei ole väärä sitten oli virhe.
En tiedä mikä se on, Ehkä tiedostoa ei ole olemassa.
En ole oikeuksia.
Polkunimi on väärä.
Tahansa joukko asioita voisi mennä pieleen.
Nyt aion mielivaltaisesti palauttaa 500
joka on internal server error.
Jokin meni pieleen.
En todellakaan välitä diagnosoida sitä.
Joten, haluan vain kertoa Käyttäjä se on rikki.
Ja sitten, aion tehdä res.end,
ja tämä on lyhennetty merkintätapa.
Muistuttaa, että viime aikaa tein res.write
ja sitten tein res.end.
Jos haluat vain Lähetä yksi rivi lähtö,
voit vain tehdä kaikkea kerralla kanssa res.end argumenttia,
ja että menee lähettää riippumatta virheilmoitus
sisällä tämän kohteen selaimelle.
Se oli aika kipinöintiä muistaa hetki sitten.
Minulla ei ole aavistustakaan mitä tämä tarkoitti ensi silmäyksellä.
Mutta kun pyysin tiedosto, joka ei ollut olemassa -
oho, meidän täytyy juosta palvelin uudelleen.
Kun pyysin tiedosto joita ei ollut olemassa, EISDIR,
niin jotain se on hakemisto,
jos teen joitakin satunnaisia string siellä,
ilmeisesti se tarkoittaa tiedostoa ei ole edes olemassa.
Ja se johtuu minun koodi on yksinkertaisesti sanomalla kirjoittaa
ulos riippumatta Raw Virheilmoitus,
joten ei kovin käyttäjäystävällinen mutta ainakin minä hoidan sen.
Else, jos se ei virhe mitä teen?
Sama juttu kuin ennen sylkeä ulos 200 OK, tavallinen -
text / plain mielen tyyppi ja sitten sylkemään tiedot.
Ja siksi Saan sisältö hello.txt joka vain
vahvistaa, jos katsoin klo hello.txt,
se on kirjaimellisesti vain Hello, world.
Ja jos olen muuttanut tätä Hello, world, tallenna tiedosto,
suorita palvelin, Päivitä sivu.
Nyt saan sen version.
Joten, olen oikeastaan ​​vain reimplemented web-palvelin
kuten jo useiden vuotta, mutta käyttäen node.js.
Mutta me voimme tehdä tämän entistä puhtaammin.
Saanen avata async-1.js.
Nyt, huomaa olen lisäämällä toisen moduulin tällä kertaa,
ilmeisesti polku moduuli.
Nyt, tämä on hyvä tilaisuus tarkastella
mitä asiakirjoja näyttää.
Node.js on dokumentointi.
Kuten PHP on mielestäni oikeastaan ​​aika hyvä
ja suoraviivainen.
Jos menen Node.js ja Google ja etsiä Node.js polku,
mitä näet yleensä on suora linkki URL
että laitoin tänne hetki sitten.
Joten / api on virallinen paikka mennä dokumentointia.
Ja mitä näet yläreunassa
Solmun n virallisia asiakirjoja on kaikkien menetelmien ja
tai ominaisuuksia sisällä tämä tietty moduuli,
joista yksi on nimeltään liittyä.
Ja liittyä on auttajafunktio että menee saanen
to ei vaivaudu kaikki plussia.
Ja se on lisännyt bonus kuten näet
laitureita on se myös normalisoi tuloksena polku.
Joten, jos käyttäjä tai sinulla on pisteitä tai dot pisteitä tai niiden yhdistelmää
niistä erilaisia ​​suhteellinen polkuja, joukossa upsides
liitetyistä menetelmä on se, että se tulee puhdistaa kaikki, että jopa
ja antaa sinulle kanoninen polku ilman
niistä pisteitä tai dot dots.
Niin, se on hyvä asia yleisen turvallisuuden ainakin
jos olet tarkkailun palauttaa arvo, joka en ole
tässä nimenomaisessa yksinkertaista tapausta.
Mutta en halua käyttää sitä.
Joten, olen nyt luoda polku hieman ohjelmallisesti
kanssa path.join sijaan Raaka ketjutus.
Niin, että on hieman puhtaampaa kuin ennen.
Ja nyt huomaa olen parhaillaan hieman enemmän älykkäitä pikemminkin
kuin vain sokeasti yrittää lukea tiedoston,
Aion itse soita fs.stat.
Joten, jos olet perehtynyt
matalan C toimintoja ja C myös PHP.
Monet kirjastot ovat Tämän toiminnon stat palaa
olennaisesti tilastot tiedostoa, tiedostokoko,
käyttöoikeudet, nimi ja tuollaista,
ja myös epäsuorasti, jos tiedosto on olemassa tai ei,
ja jos se tiedosto tai hakemisto
tai symbolinen linkki tai jotain muuta.
Joten nyt huomaa, olen soittamalla fs.stat.
Ja sitten ilmeisesti mukaan dokumentaatio,
Minun pitäisi saada takaisin Error-esine
tai Null jälkeen by tilastot objekti.
Mutta katsotaanpa tarkistaa tämän, node.js.fs.
Tässä on tiedoston koskevat asiakirjat.
Saanen etsiä tilastot.
Siellä on paljon enemmän toimintoja täällä.
Hups, että stat sync, fs.stat.
Joten täällä, se on asynkroninen tilastot (2).
Joka tarkoittaa, jos Muistan päässä tärkeimmistä sivua,
2 luvun pääsivulta
se tarkoittaa, että tämä on kirjaimellisesti vain solmun täytäntöönpanoa
matalan tason järjestelmän toiminta stat.
Joten, soittopyyntö saa kaksi argumentteja, virhe ja stat
jos stat on fs.stats vastustaa.
Katsotaanpa, mitä tämä esine on tarkoitus näyttää.
Katsotaanpa napsauttaa hyperlinkkiä ja näen sen.
Tilastot esine sisältää ilmeisesti jotkut auttaja menetelmä,
on tiedosto, on hakemisto, on joukko muita asioita.
Se on "on"-tiedostosta välitän noin tässä nimenomaisessa tapauksessa.
Joten tässä menen.
Jos oli virhe, haluan vain pelastaa tällä kertaa
ja olettaa.
Jos on virhe, se oli luultavasti 404 tiedostoa ei löydy.
Se voisi olla jotain muuta
mutta olen nyt hieman laiska täällä vain keskittyä
on enemmän mielenkiintoisia yksityiskohtia.
Mutta käyttäjän tarkoituksiin, tiedostoa ei löydy,
jos oli jokin virhe jossa tiedosto.
Muuten, haluan tarkista tiedosto on todellakin varsinainen tiedosto.
Joten jos se ei ole tiedoston, se on olemassa.
Tuolla on jotain, mutta se on luultavasti hakemisto
tai ehkä symbolinen linkki
tai jotain muuta, joka on funky tiedostojärjestelmään.
Joko niin, käyttäjä ei pitäisi nähdä sitä.
Joten nyt olen juuri menossa sylkeä
ulos tavanomaisesti luvaton 403.
Mutta jälleen kerran vain yleissopimus,
Olisin voinut käyttää jotain muuta teoriassa.
Ja sitten lopuksi haluan yritä lukea tiedostoa.
Joten, anna minun selaa alaspäin.
Ja nyt huomaa tämä on koodin voi saada hieman sotkuinen,
Huomaan, että soitan fs.readFile ohimennen
samalla tiellä, sama soittopyyntöjä kuin viime kerralla,
joten edellisen version.
Ja sitten jos löytäisin -
jos en löydä sitä, Syljen pois 500.
Ja jos en löydä sitä, mitä line aiomme nähdä täällä?
Aiomme nähdä fs kirjoittaa header 200 luultavasti
ja res.end lähettäminen toteutuneita tietoja.
Mutta huomaa tätä.
Ja tämä ei ole demonstratiivinen ja pahimmassa tapauksessa.
Mutta minulla on tämä stat kutsu täällä kuin minulla on joitakin juttuja.
Sitten minulla on toinen asynkroninen soittaa täällä,
niin enemmän painauma.
Eli juuri sellainen ekstrapoloida jos voisit täältä.
Mikä ongelma on taipumus syntyä kieli kuten JavaScript
Tässä ympäristössä, jossa sinulla ei ole paluuarvot
vaan olet näitä kutsuja.
Ja tietenkin tämä on vain tyylillinen asia se,
että pidän sisennys.
Mutta ota tämä looginen seuraava askel.
Oletetaan oli olemassa yksi tai kaksi tai kolme muita toimintoja
että minun piti suorittaa, että olivat luonteeltaan asynkroninen,
ja siksi juuri sellainen pitää sisennys käsitellä niitä,
käsitellä niitä, käsitellä niitä.
Saat tavallaan soittopyyntö helvetin ihmiset kutsuvat sitä
missä Koodi alkaa saada hyvin laaja
ja suoraan sanottuna todella vaikea lukea.
Koska se on, voin tavallaan tuskin kertoa, että tämä on eräänlainen virtauksen
että on tämmöinen
tyylillisesti kulma juttu täällä.
Joten, tämä ei ole ihanteellinen, koska tämä voi hyvin nopeasti tulla
kankea, vaikka kaksi asynkroninen puhelut eivät
niin iso juttu.
Joten, voisimme välttää tämän, eikö?
Olet ehkä vilaukselta, että Olen misclicked hetki sitten.
Asiakirjoissa, tiedät, näyttää siltä, ​​että on statSync.
Ja statSync ei ota soittopyynnön argumenttina.
Se kestää vain polku, koska se ilmeisesti tekee mitä?
Se palauttaa esimerkiksi of fs.stats.
Joten, tämä saattaa olla Ensimmäinen vaisto, eikö?
Varsinkin jos soittopyynnön toiminnot
ja asynchronicity on vähän uutta teille, rehellisesti,
Helpoin tapa on luultavasti vain välttää ongelman kaikki
yhdessä, palata lajitella of CS101 tyyli ohjelmointi
jos soitat toiminto tai menetelmä, palauttaa arvon,
puhelelutoiminto, palaa arvo,
funktio, palauttaa arvon.
Ja voisin käyttää siis fs.statSync
joka on kirjaimellisesti sama mutta se on synkronoitu versio
mikä tarkoittaa, että se palauttaa arvo.
Se ei kulje Arvo soittopyynnön.
Mutta miksi se todennäköisesti suboptimal workaround turvautua
synkroniseen toimintoja?
Yeah?
[Inaudible Huom!]
Täsmälleen, se kestää kauan.
Olet vain hidastaa kaiken alas.
Koska aivan kuten Shake Shack tai Tasty Burger, jos he pääsivät eroon
Näiden summeria ja teki sinusta, asiakas seistä edessä
Rivin kunnes ruoka on valmis jo etukäteen järjestyksessä
henkilön takana et ilmeisesti
kautta laittaa hidastuu.
Ihmiset alkavat lähdössä, olet tavallaan piirtää paketteja.
Voit tehdä minkä tahansa määrän analogioita täällä.
Mutta lyhyesti sanottuna se on luultavasti ei ole hyvä asia
liike-tai palvelimelle.
Joten asynkroninen koodi on tyypillisesti hyvä ainakin
tässä tapauksessa, mutta se varmasti alkaa aiheuttaa ahdistusta.
Ja itse en uskalla sanoa, milloin Ensimmäinen kirjoitan tätä kamaa,
se otan hieman hieman totuttelua.
Niin, nyt alkaa varustaa sinulle joitakin kirjastot
ja tekniikoita, joiden avulla Tässä hieman helpompaa.
Niin, yksi yleisimmistä kirjastot ovat suosittuja kirjastot
näinä päivinä, tämä yksi nimeltään async.js.
Ja kuten monet Node.js kirjastojen tai moduulit,
nämä ovat kaikki avoimen lähdekoodin.
He melkein kaikki elävät ja saada napa arkistot joka on eräänlainen
on tullut de facto paikka säilyttää näitä asioita.
Ja sitten on koko infrastruktuurin
asentamisesta asioita nimeltään NPM, Node Package Manager
jotka, jos olet perehtynyt kanssa EvanTube on eräänlainen
samankaltaisten App tai App saada.
Jos olet perehtynyt Red Hat ja Fedora
kuten laitteen, se on kuin yum.
Mutta se solmu - se on paketinhallinnan vain
tähän tiettyyn ympäristöön.
Joten, voimme ladata ja asentaa asioita, kuten async kirjasto
ja myös toinen kutsutaan korostaa kirjaston tai moduulin.
Mutta nämä sikäli fs, HTTP, polku,
ne ovat kaikki tulleet rakennettu solmuun.
Joten jos menemme API dokumentaatio, sinun todella nähdä, että rakennettu
solmuun saat ilmaiseksi koko joukko moduuleja.
Mutta paljon mukavia ihmisiä internet ovat tehneet kymmeniä
ellei satoja muut kirjastot
tehdä asiat paremmin tai eri tavalla.
Niin, nyt katsomaan miten tämä kirjasto toimii.
Niin, useimmat tämä koodi on sama hetki.
Minulla on polku on luotu ylös.
Ja nyt minä soitan async.series.
Joten async kirjasto, se on vain kirjasto, jonka avulla voit
siirtää tai nostaa tyypillisesti toiminnot päästä kutsui yhden
toisensa jälkeen vain sellaista välttämiseksi, että painauma kysymys,
ja oikeastaan ​​vain henkistä ahdistus, jotka syntyvät poikkeuksetta
ainakin kun ensin sukeltaa tämän itse
ohjelmoinnin asynkronisesti.
Kuten syrjään, jos olet ottanut 161 ja olet käsitellyt lukot
ja nostaa olosuhteet ja kaikki Kyseisen, asynkroninen koodi
ja ympäristön, kuten Node.js on todella paljon,
paljon yksinkertaisempi luultavasti
kuin todella kirjoittaa monisäikeinen koodi.
Aina kun on monisäikeinen koodi,
sinulla on korotuksen edellytykset.
Sinun täytyy huolehtia kahden langan sisältävä
samoista voimavaroista levylle tai muistiin.
Kauneus JavaScript
in Node.js on olemassa kirjaimellisesti vain yksi säie,
mikä tarkoittaa, että selain
tai palvelin voi vain tehdä yksi asia kerrallaan.
Se on vain sinun, ohjelmoija
pitää henkistä malli miten tavallaan jonoon asioita
ja selvittää, miten tilata koodia.
Mutta sinun ei tarvitse huolehtia noin nostaa olosuhteet
aivan samalla tavalla at vähiten raakakoodiin näin.
Niin, se on hieman vaikea grack täällä.
Mutta - Haluan siis avata docs vain hetken.
Async.js kirjasto, joka Samoin on hyvin googleable,
se elää GitHub repot kuin paljon niitä.
Älä ajattele se on summittainen, se ei ole.
Saanen selaa Lue minut täällä.
Joten, async kirjasto tarjoaa läjän
menetelmiä sen sisälle.
Esimerkiksi siellä menetelmää, jota kutsutaan kutakin,
jotka, jos klikkaan tämä vain nähdä sen docs hetkeksi,
Tämä on toiminto, tai menetelmä jonka avulla voit tehdä jotain
kuin neljä kunkin mutta rinnakkain.
He kaikki tulee tapahtumaan mahdollisesti rinnakkain.
Ja menetelmä kukin on vain aio palata teitä, kun kaikki
ja toistojen ovat täydellisiä.
Joten ehkä ne tapahtuvat yksi toisensa jälkeen.
Ihannetapauksessa ne tapahtuvat olennaisesti rinnakkain.
Mutta menetelmä ei soittaa sinulle takaisin.
Se ei Buzz summeri, kunnes kaikki
elementtien olet Iteroidut yli suorittanut.
Niin, se on vain mukava tapa
välttää käyttämällä yksinkertainen neljä silmukka
mutta oikeastaan ​​teemme jotain asynkronisesti.
Mutta nyt suoremmin jotka liittyvät tässä esimerkissä
huomaat, että tämä sarja menetelmällä.
Ja haluan vain vetää ylös yksinkertainen kanoninen esimerkki.
Joten async kirjastot, sarja menetelmä vie niin hiljaista
hakasulkeissa array.
Mitä tiedonsiirtonopeuksia tyyppisiä elementtejä
Tässä array perustuu on yksinkertainen esimerkki?
Tämä on joukko toimintoja.
Joten C, te sanoisitte ne funktio-osoittimia.
JavaScript on enemmän oikein viittaa toimintoihin
tai anonyymejä toimintoja.
Ja tämä tarkoittaa vain sitä, taulukot
tietenkin tilataan nollasta ylöspäin.
Niin, ne ovat säilyttäneet päätöksen, joka on hyvä
sarjalle, koska sarja tietysti tarkoittaa tehdä jotain
jotta ei rinnakkain.
Niin, tämä tarkoittaa vain sitä, että tämä toiminto saavat toteutetaan,
niin tämä, niin tämä yksi, tämä, niin tämä yksi,
Kuitenkin monet olemassa
kunnes lopulta valinnainen soittopyynnön kutsutaan.
Joten, huomaa paradigma täällä.
Ja vaikka tämä on yksi kaveri kirjasto,
se edustaja hyvin yleinen JavaScript paradigma
ja uudelleen käyttämällä kutsuja.
Joten, huomaa, mitä teet täällä.
Vuonna ensimmäinen funktio on läpäissyt tätä kautta array,
olet määritellyt nimetön toiminto vain toiminnon.
Mutta huomaa, että ilmeisesti mukaan tämä dokumentaatio,
että Nimetön toiminto olisi ottaa argumentti soittopyynnön.
Tämä tulee olemaan osoitin tai viittaus toiminto
että sinun pitäisi soittaa, kun koodi on valmis palaamaan arvoon.
Joten jälleen, toisin kuin vain tyypillisesti menettelyyn ohjelmointi
jos olet tottunut palaamassa arvot heti
että yksi ero käyttämällä kirjaston näin
asynkroninen ohjelmointi lisää yleensä on, kun olet valmis
palata arvo tietokanta, tiedostosta,
alkaen aritmeettinen lausekkeen, se on sinun
soittaa takaisinkutsufunktio.
Ja kiva juttu tästä kirjastosta
jos luemme dokumentit tarkemmin on, että
jos ja vain jos kaikki kutsuja nimisellä alueella
ilman Virhe objektin, tulee koko juttu onnistua?
Eli toisin sanoen, jos on 2,
jos on 10 anonyymi tehtävät
tässä array vuoksi tässä sarjassa,
vain, jos ne kaikki onnistu,
tulee lopullinen valinnainen soittopyyntö pitää onnistuneena?
Jos joku heistä epäonnistuu, jokainen toiminto
kun se ei jopa teloitettiin.
Niin, se on mukava tapa lajitella ottaa ketjuttaa
että se keskeyttää ennenaikaisesti jos jotain menee pieleen.
Niin nähdä tämän yhteydessä täällä on, kuinka voisimme uudelleen toteuttaa
että edellisen ohjelman.
Saan polkua kuin ennen, joten tämä on helppo osa.
Olen kopioi liitä tämä luuranko koodi
alkaen asiakirjoja ei async.series alkusulun,
Avaa hakasulkeen.
Ja nyt huomaa Minulla on yksi toimi tässä alussa
toisen, näemme missä menemme tästä.
Ja nyt huomaa, se on hieman monimutkainen aluksi
mutta keskittyä vain se rivi riviltä.
Fs.stat tarkoittaa saada tilastoja tai mitä ei tuon polun.
Kutsua tätä soittopyynnön, kun olet valmis.
Tämä koodi on sama kuin ennen.
Jos on virhe, on olemassa yksi ero nyt.
Jälleen hyvin yleinen paradigma in Node.js ohjelmointi on
jos jokin menee vikaan ja soittopyynnön tarvitsee tietää
että yleissopimus, ensimmäinen argumentti soittopyyntö on menossa
olevan mitään, jos kaikki on hyvin tai viittaus Virhe objektin,
pääoman E. Se on kuin virhe luokka, joka esiintyy maailmanlaajuisesti
mutta siitä lisää joku toinen kerta.
Joten tekemällä tämän, jos on virhe, mitä vaikutuksia?
No sen perusteella, mitä olen sanoi sarja tekee,
on jos jokin menee väärin, me vain eräänlainen haluavat
keskeyttää koko sarjan anonyymien funktiokutsuja.
Niin, se riittää minulle vain palata soittopyynnön ohimennen
in error objekti.
Koska jos stat antoi minut takaisin virhe,
Voisin luoda uuden Error objekti oman,
mutta en oikeastaan ​​välitä,
Haluan vain kulkea riippumatta virhe on se, että todella tapahtua
jotta voin välittää sen Tämän soittopyyntö.
Ja vain olla selkeä, tuotto ei ole ehdottoman välttämätöntä.
Olen lähinnä halua tehdä tätä mutta halusin nyt tehdä "palaa;
/ / Niin ettei enempää koodi tähän suorittaa ".
Niin taas toinen yleinen yleissopimus JavaScript,
vaikka et ole palaamassa arvo sinänsä,
haluat siirtää arvo soittopyyntö toiminto
mutta sitten haluat lopettaa toteutus
toiminnon olet in, triviaali tapa
tehdä tämä on vain soittaa palata tänne.
Mutta ei ole mitään vikaa,
olemme juuri tekemässä paluuta soittopyynnön virhe, vaikka se menee
palata määritetty arvoa.
Okei, tämä ei palauttaa arvo todennäköisesti.
Välitän on lennolle edelleen teloitus.
Joten minun koostamisessa näistä kaksi riviä on vain stylisti
yleissopimukseen vain on määrä linjan
koodia Minä vain kirjoitti 2-1.
Mitä muuta?
Jos siellä ei ole virhe -
oikeastaan ​​olla selvillä Voisin myös välttää
että tekemällä jos muu.
Mutta jälleen kerran, toinen yhteinen paradigma on tarkistaa
oman virheitä ylös ja sitten vain palata sen sijaan edelleen
sisentää koodin kanssa elses ja elses ja elses.
Joten jos se ei ole tiedosto, nyt te tiedätte,
Haluan hoitaa tämän hieman erityisesti.
Joten tässä kuten Java tai C + + tai muutamia muita kieliä,
tässä miten voi instanssia vastustaa tyyppivirhe ohimennen
vuonna oletusviesti , ettei tiedostoa
ja tämä on vain melko sattumanvaraisesti.
Mutta olen signalointi virhe omani.
Ja mitä tämä viimeinen line oletettavasti merkitsevät?
Kaikki on hyvin.
Jos ohitat tyhjäarvo virheparametrin, että juuri tarkoittaa
Sovitun käytännön kaikki on hyvin.
Niin, se tarkoittaa, että mitä tapahtuu loogisesti?
Jos null johdetaan soittopyyntö
se tarkoittaa, että tämä nimetön toiminto on onnistunut
niin sanoakseni.
Joten, mitä pitäisi sarja menetelmää edeltää ja nyt tehdä perustuu
minun sanallinen määritelmä aikaisemmin?
[Inaudible Huom!]
Siirtyä seuraavaan, eikö?
Jos se oli palannut ei-null arvo, se vain keskeyttää
ja enää nimetön toiminto saisi kutsutaan.
Mutta koska se ei ole, niin tämä saa kutsutaan seuraavaksi.
Joten, logiikka tässä melko sama kuin ennen
ja näemme, miten puhdistaa tähän asti edelleen hetki.
Ymmärrän, että tämä on tavallaan paljon
imeä kaikki suullisesti ja visuaalisesti.
Mutta nyt huomaa, toisen Nimetön toiminto, että haluan
suorittaa sarjaan on yrittää lukea tiedoston.
Kutsu tätä soittopyynnön kun olet valmis.
Jos on virhe, signaalin se tapa soittopyyntö
siten, että loput tätä kamaa keskeyttää.
Else return null.
Mutta miksi olen ohimennen kahdessa argumentteja?
No tällä kertaa jos luen tiedosto ja saada takaisin
koska muuttuja nimeltä data,
Haluan paitsi merkitse kaikki on hyvin palauttamalla null
ensimmäistä väitettä.
Haluan palata todellinen tiedot kuin toinen argumentti.
Koska jos luen edelleen asiakirjoissa,
huomaavat tämän viimeisen koodinpätkän hakasulkeen tarkoittaa sitä, että on
sarjan lopussa.
Siellä oli vain kaksi nimettömänä toiminnot tässä sarjassa.
Jos oli virhe täällä, niin Tiedän, että yksi linkit
tässä ketjussa niin puhua epäonnistui.
Eli toisin sanoen, tämä virhe tulee olemaan Error Object
joka on nolla, jos mikä tahansa nämä kaverit epäonnistui.
Ja jos näin on, olen vain menossa pelastamiseksi ja aion
sanoa 400, joka tarkoitetaan pyynnön epäonnistuvat,
joka on hyvin yleinen virheilmoitus.
Ja sitten, aion tulostaa virheilmoituksen.
Joten, en häiritse super anaali tällä kertaa,
En aio erottaa välillä 500 ja 404 ja 403,
Olen vain sellainen sokeasti aalto käteni
ja sanoa jotain meni pieleen.
Mutta jos mitään meni pieleen,
Aion lähettää tämän res.end kulkee näitä tietoja.
Nyt tämä näyttää hieman arvoituksellisesti.
Mutta jälleen kerran, jos luen dokumentaatio,
toinen argumentti tämä viimeinen, lopullinen soittopyynnön,
kaveri, joka on vain teloitettiin Kun sarja on tehty
suorittamista tai osa siellä ja tämä tulee olemaan array
kaikkien toisen perustelut
jotka olivat läpäisseet soittopyyntö.
Nyt on käynyt ilmi, että yhdistävät vain tässä sarjassa
joka todella palata toiseen argumentti on tämä yksi täällä.
Joten aion lajitella aiheesta uskonvaraisesti yksinkertaisesti käyttää kai
tällä hetkellä, että viimeinen on menetelmä
joka antaa sinulle viimeksi elementtejä jono.
Koska tämä array joka siirrellään
minulle on kaksi indeksien, nolla ja yksi.
Se on vain nolla ei ole arvoa koska tämä kaveri palaa -
ei kulje toisessa argumentti mutta tämä kaveri tekee.
Joten lopputulos kiinnike nolla ei ole mitään,
tulokset kiinnike yksi sisältää mitä,
jos olet seurannut pitkin tähän asti?
Tiedosto, hello, maailman sisältöä oletettavasti
niin että miten olen itse tulostaa sen.
Ja anna minun puhua loppuun Eräs yksityiskohta täällä.
Jos teen tällaista vanhaa koulu, jos haluan saada
viime elementit, jos voisin tehdä tulosta [results.length-1],
se on eräänlainen vanhan koulun tavalla
päästä viimeisistä in - tai nolla indeksi array.
Mutta kuten puolella, muistuttaa että minulla oli tämä kirjasto
täällä alaviiva jonka mukaan Sopimus on vain kutsutaan
kirjaimellisesti alaviiva luonne, joka ei ole erityinen,
se vain näyttää siistiltä kuten dollarin merkki tekee jQuery.
Tämä on vain apulainen Menetelmä korostaa dot viimeksi
joka tekee täsmälleen sama asia.
Ja jos et ole koskaan käyttänyt sitä ennen korostavat JS sekä
asiakkaan puolella koodaus
ja palvelimen puolella on ihanan hyödyllisiä kirjasto
että mahdollisimman monet ihmiset on kuvattu se tuntui jQuery sisältää kaikki
menetelmistä, ihmiset halusivat mukana JavaScript itse.
OK.
>> Joten, kuten melko minulle ja Olin katsomassa sarjassa,
olet kuten soittopyynnön argumenttina?
>> Kyllä.
>> Kuten niin kun oikeastaan ​​kuin push että,
ja kuten mitä se tarkoittaa, kun sinulla on vain
kuten soittopyyntöjä ja sitten tehdä kuten -
[Inaudible Huom!]
>> OK, hyvä kysymys.
Joten, anna minun vetää ylös async pääsivu täällä
tai asiakirjat GetHub.
Joten tämä on kanoninen rakennetta.
Jos olet puhelun käyttämällä tätä Erityisesti menetelmä sarja,
siellä on kaksi isoa osaa siihen.
Yksi on joukko anonyymi toiminnot
ja kaksi on lopullinen soittopyynnön toiminto, joka on oikeastaan
toteutetaan hyvin sarjan lopussa.
Nyt, jos me zoomata Hieman lähempänä ensimmäisenä
näitä suuria asioita, joukko nimetön toimintoja
mukaan vaatimus tämän kaveri dokumentaatio on
olla anonyymi funktio, joka ottaa
yhden argumentin nimeltä soittopyynnön tai foo tai baari, sillä ei ole väliä
mutta hän soittaa sen soittopyynnön.
Ja tämä on tavallaan teidän summeri että Shake Shack käsiä.
Tämä on keino, jolla voit palauttaa arvo
asiakkaalle, koska olet voi vain tehdä kirjaimellisesti palaa.
Sinun täytyy tehdä se tapa tämän soittopyynnön.
Koska jos sisäosat Toiminto on noin hidas käynnissä
koodia kyselyn tietokantaan, lue tiedoston tiedostojärjestelmä,
et halua odottaa siellä ja estää kaikki muutkin,
haluat soittaa soittopyyntö.
Niin, tämä on kirjaimellisesti nimi argumentti.
Mutta kuten C, sinun on funktio-osoittimia.
Java sinulla viitejärjestelmä menetelmät
ja sama täällä JavaScript.
Tämä on muuttuva, mutta sen tyyppi on funktio.
Niin yksinkertaisesti kirjoittamalla sen nimen onko soittopyynnön tai foo
tai baari, sitten sulkeella ja lähellä suluissa,
olet toteuttamaan kyseisen niiden tehtävä.
Ja kulkee null, joka tarkoittaa null virhe ja yksi
mikä tarkoittaa sitä, tämä on tiedot, jotka haluan välittää sisään
Ja sitten murikka oltava selkeitä, tämä on toinen soittopyynnön.
Ja se ei ole kutsuttu soittopyynnön,
se vain käsitteellisesti on soittopyyntö menetelmä toiminto
koska se on nimeltään määritelmän
Tämän tekijän kirjastoon, kun koko sarja on valmistunut
tai alijoukolta jos virhe on tapahtunut aikaisemmin.
Niin, nimi takaisinkutsufunktio, soittamalla takaisinkutsufunktio,
nimeksi takaisinkutsufunktio, soittamalla takaisinkutsufunktio,
eri soittopyynnön toimivat kaikki yhdessä.
>> Meillä on nyt kuin define soittopyynnön?
>> Ei, koska tämä kaveri erittyy array
Nimettömänä tehtäviä,
osoitin koodi hän haluaa toteuttaa.
Täsmälleen, kaikki hyvin.
Joten, sanovat, että koodin saa hieman yksinkertaisempi.
Niin, se voi.
Ja jos olet kuin minä, ota mukavuutta ainakin tietää,
se vie aikaa tottua tähän.
Mutta voimme puhdistaa tähän asti vähän,
eikä heittää liikaa sinulle mutta tässä on toinen variaatio
ja sen jollakin muulla tavalla
samassa kirjastossa kutsutaan vesiputous.
Ylösalaisin joka on toisin sarja, jossa kukin
näiden anonyymi toiminnot suoritetaan pääasiallisesti
riippumatta kullekin osapuolelle.
Vesiputous kuten nimi ehdottaa mahdollistaa sen, että ylin toimintoja
eräänlainen kulkea arvojen alempaan toiminto,
Tavallaan kuin cascade vettä.
Joten ylösalaisin tämän on, että en voi sellaista
ja käyttää tätä minun etu.
Vuonna async.waterfall, huomaa seuraavat.
Voin vain soittaa fs.stat kulkee polku
että haluan saada tilastoja.
Ja sitten muistaa ennen I oli Nimetön toiminto
että oli kaksi väitettä harhaan,
esults ja sitten kutsuin takaisinkutsufunktio manuaalisesti?
Toisin sanoen on vain olla selvää, muistaa, että aikaisemmin
vuonna async 2, tein kaikki tämän ilkeä työtä.
Kutsuin fs.stat läpäissyt P,
julisti oma anonyymi toiminto.
Sitten tarkistetaan, jos virhe on ei null sitten tein tämän,
muuten tein, että koko kauneus seuraavien yleissopimusten
kuten Node.js on, että soittopyynnön toiminnot yleensä on tarkoitettu
ottaa ainakin yhden argumentin, Virhe esine liitetään nolla
tai enemmän hyötyä arvoja.
Niin huomaa paradigma täällä,
Tämän takaisinkutsufunktio olen julistamisesta seuraa tarkasti
paradigma, että tämä kaveri async kirjasto tekee.
Toisin sanoen tämän, miksi olen Olen täytäntöön oman soittopyynnön
menetelmä, jos tekijä tämän Kirjasto on kirjaimellisesti luovuttamalla minulle
lautasella niin sanotusti, takaisinkutsufunktio voin käyttää?
Joten, voin vain kulkea viite hän on antanut minulle
niin, että heti, my useita rivejä
koodia tullut yhtä riviä koodia.
Nyt, jos me menemme tästä?
Seuraavan toiminto, joka Haluan suorittaa,
seuraava anonyymi toimi tässä array
Toimintojen tekee seuraavan.
Ilmoitus ensin stat on ensimmäinen argumentti.
Joten jotain on muuttunut jo.
Nyt tämä kaveri, joka kirjoitti kirjasto -
ja minä sanon kaveri koska se on poika.
Tämä kaveri joka kirjoitti tämän kirjaston dokumentaatiota takuut
että jos tämä toiminto täällä kulkee minut takaisin Error Object
tai null seuraa kooma eroteltu lista muita arvoja,
Hän varmistaa, että nämä muut arvot ovat kädellä
Tämän Nimetön toiminto järjestyksessä vasemmalta oikealle.
Ja mitä käytetään olla vain takaisinkutsufunktio yksin yksinkertaisesti
tulee viimeinen tällainen väite.
Nyt, en tiedä kuka olen keskittyen vain tiedät.
Mutta nyt, mitä ottaa pois täältä?
Niin, me tiedämme asiakirjat
tai ennen pari esimerkkiä
että fs.stat lopulta odottaa soittopyynnön jossa kaksi argumenttia,
Virhe esine, jonka on Error objekti tai null jälkeen
viittauksella tilastot vastustaa.
Joten jos ajattelen, että Error objekti kooma tilastot vastustaa,
joka sopii paradigma Tämän henkilön kirjastossa.
Joten, voin vain sanoa, koska I No toinen argumentti
että se on - että menee on ohi fs.stat
soittopyyntö on öh, tilastot määritelmän tämän kirjaston,
Voin laittaa toisen argumentti nimi tähän
tai mitä tahansa voin nimetä sen
jos haluan seurannut jonka soittopyynnön täällä.
Joten, voin siirtää yksi Arvostamme täältä täältä.
Nyt kaikki tämä koodi vaikka tosin hieman kryptinen on
ainakin kopioi liitä varten suurimmaksi osaksi ennen.
Ainoa ero on huomautus täällä olen julistamisesta Error
vastustaa, ja nyt haluan saada vähän harrastaja.
Olen todella haluavat tietää, mitä virhe, joten aion
Tuck sisällä tämän kohteen omaisuutta mielivaltaisesti kutsutuilla code
niin että tiedän, että tämä ei ole tiedosto
että pitäisi olla luvaton, se on HTTP 403.
Minäpä muistan, että ennen Kuljen Error Object
soittopyyntö.
Ja sitten lopuksi yrittää lukea tiedosto, joten tässä tapauksessa,
vesiputous, olen rikki koodi kaksi isoa askelta
kolmeen pienempiin askeliin.
Huomaa kauneutta täällä,
Voin soittaa fs.readFile kulkee polku.
Ja sitten kova osa henkisesti, on minulla vain siirtää
in kaveri soittopyynnön.
Asia hän luovuttamalla minulle, olen menossa ohi ja fs.readFile.
Koska me kaikki olemme kiinni samaan yleissopimusten
Ensimmäinen argumentti soittopyyntö on Virhe esine tai null jälkeen
by kooma tai erotetut listan hyödyllisiä juttuja.
Joten, mitä se tarkoittaa nyt ja jos minä lukea ohjeita tiedän
Tämän aivan viime soittopyynnön, tämä kaveri täällä ulkopuolella
neliön suluissa on menossa välitettävä Error Object
tai null joka minun pitäisi tarkistaa kuten aina tämän koodin tähän.
Ja sitten määritelmän Tämän menetelmän
in kaveri dokumentaatio, viimeinen arvo palautetaan
viimeisestä menetelmä minun nimetön array -
minun joukko nimettömänä toimintoja.
Eli mitä lukea tiedoston palauttamista
ja olen käyttäen paluuta löyhästi nyt.
Siis mitä lukea tiedosto pass argumentteina
soittopyyntö menetelmä sen käsin?
Kaksi väitettä, ensimmäinen on Virhe objekti tai null,
Se on lähes aina olemaan vastaus.
Ja toinen juttu on menossa olla mitä vain luku-tiedosto?
Tiedoston sisältö, tietojen Kutsuimme sitä aikaisemmin.
Joten, yksinkertaisesti julistamalla öh, tulos,
ja tarkista virheen tämän on tavallaan tylsää nyt.
Muuta, en res.end ohimennen, että tulos.
Tämä epäilemättä ei synkronoida täydellisesti
ennen kuin olet itse kirjoittaa itse.
Mutta nyt, ota pois ainakin se,
, että on ilmeisesti tämän yhteinen paradigma, jonka mukaan jos me
ja laatijoiden kirjastojen kaikenlaisia ​​stick
tämän yleissopimuksen soittopyyntö menetelmiä.
Ja ensimmäinen argumentti on Virhe objekti tai null.
Ja toinen ja kolmas
ja neljäs esineet ovat asioita välitämme ja me tavallaan
sekä noudattaa sääntöjä ja dokumentointi.
Aloitimme code rehellisesti on melko ruma.
Ja vaikka viimeisimmän esimerkki on suoraan sanottuna aika vaikea
wrap mieltäsi noin, se on ainakin silmämääräisesti,
näyttää se paljon tiukempi.
Ja kun saat mukavan sen kanssa, se on niin paljon helpompaa
ja se on niin paljon vähemmän alttiita vikoja kuin edellisessä esimerkissä.
Joten, haluan osoittaa yksi asia täällä.
Tämä versio on kolme.
Ja - No, katsotaanpa lähteä tämä yksin.
Anna minun mennä pari muita viimeisiä asioita kuin ratkaisupelejä.
Kunnossa, joten palvelimen 2.
OK. Ensinnäkin kysyttävää, Tiedän, että tämä on paljon
mutta halusit lisää ohjeet, niin?
Et sanonut hyvää opetusta välttämättä.
Yeah?
[Inaudible Huom!]
Oikein, olet lähinnä lieviä käyttöjärjestelmä
selvittää, miten tasapainoilemaan kaikki nämä palloja kerralla,
lukeminen tiedostosta, lukeminen tietokannasta.
Ja se on tämä JavaScript-palvelimen itse se Yksisäikeisessä.
Ja olennaisesti ja oikeastaan
siellä on yksi kuva En oksentaa,
ja se ei ole välttämättä kaikki, että valaiseva
mutta ehkä me annamme voit mielikuvaan.
JavaScript itse ja solmu
erityisesti on tässä ns tapahtuma silmukka.
Jolloin voit ajatella ja Node.js, ohjelma,
on kirjaimellisesti kuin päättymättömään silmukkaan.
Se on vain villi silmukka, odottaa ja odottaa ja odottaa,
etsivät tehtäviä loppuun.
Ja tehtävää voisi mennä noutaa jotain tietokannasta
tai tässä arvo tietokanta tai hae tätä kuvaa
levyltä tai tässä pyytää käyttäjältä.
Minkäänlaista tapahtuma, kuten selaimet tapahtumalähtöisiksi
niin, että palvelin puolella ylläpitäjä.
Ja mitään näistä asioista muodostavat tapahtumia.
Joten joku Node.js, vain kirjoitti päättymättömään silmukkaan,
iso villi silmukka, odottaa juttuja tapahtuu.
Ja tavaraa ei tapahdu, se päätyy jonossa, eikö?
Varmasti, tietokanta voi palauttaa arvoa.
Ja tiedostojärjestelmä, käyttöjärjestelmä järjestelmä voisi palauttaa arvo
suunnilleen samaan aikaan mutta menee todennäköisesti
olevan jonkin verran tilaus heille.
Ja Node.js on menossa on pääasiassa jonossa
kuin iso matriisi tai vektori, jotkut tietorakenne
että puskuroi kaikki näistä asioista.
Koska se voi kirjaimellisesti vain käsitellä yksi niistä kerrallaan.
Joten, kun, kehittäjä,
kirjallisesti Asynchronous JavaScript koodin asynkroninen
toiminnon, olet mahdollistaa tämän ns tapahtuma loop mennä
seuraavaan rasti, eikö?
Niin, kunhan heti palauttaa kaikki
Näiden asynkronisen menetelmiä tykkään lukea tiedoston ja stat,
he palaavat välittömästi koska soittopyyntö lopulta
saa takaisin.
Heti kun palaat,
se tarkoittaa, että joku muu voi saada piipahti pois varastosta täällä
tai että se voi saada piipahti pois edessä jonossa täällä.
Ja niin, siellä on Itse asiassa serialization
ja kaiken, mitä tapahtuu,
vaikka kaikki nämä jutut voidaan tapahtuu rinnakkain
on monisäikeinen järjestelmä.
Mutta Node.js itse ja palvelin oli käynnissä
yhtenä säiettä.
Ja alas puolella, joka on t et välttämättä max
tietokoneen mukana kyky on sillä varsinkin
jos sinulla on 16 ytimen tai jopa 2 core tietokone
ja olet juuri käynnissä yksi esiintymä solmun.
Mutta jos olet jälleen ottanut jotain 161,
vältät valtava painajainen päänsärkyä kun se tulee
rodun edellytykset ja lukot ja viittoilemalla
ja kirjoittaminen todella monisäikeinen koodi,
joten puolensa ja huonot puolensa.
OK. Niin, takaisin koodi tähän, haluaisin ehdottaa, että aloitamme
yksinkertaistaa asioita hieman.
Näimme palvelin yksi hieman sitten joka näytti tältä.
Niin, että on luultavasti melko yksinkertainen.
Mutta aivan kuten maailmassa PHP on puitteet
kuten Laravel ja siellä asioita, kuten Rails ja Django,
sama asia Node.js maailmassa.
Ja me viettää enemmän aikaa tähän keskiviikkona
ja seuraava projekti.
Mutta jos menen palvelin 2 hakemistoon,
huomaa pari paradigmoja täällä.
Joten tämä on - siellä menee olla vastaava esimerkki
mutta se käyttää puitteet kutsutaan express.js,
joka on ilmainen avoimen lähdekoodin ohjelmistoja, kuten Rails ja Django,
kuten Laravel, joka on vain lopulta menossa
olla arvosteta tänään Koska olemme kirjallisesti
tällaisia ​​yksinkertaisia ​​esimerkkejä.
Mutta luottaa meihin.
Tämä tulee hyvin nopeasti tullut ystäväsi
koska se säästää sinulle paljon TDS koodia.
Ja yhteinen paradigma express.js sovellus on
on app.js tai server.js tiedosto, joka sisältää logiikka
oman ohjelman tai ainakin aloituskohta.
Sinulla voi olla useita tiedostoja.
Solmu moduuli alihakemiston joka on kirjastot
että olet ladannut kuten async
ja ilmaista itseään muille.
Ja sitten package.json, package.json näyttää tältä,
ja voit luoda sen manuaalisesti tai työkaluja luoda sen
ja se on kirjaimellisesti json tiedosto
ja mielenkiintoinen osa on riippuvuuksia täällä.
Aivan kuten Laravel, voit oli, että myyjä hakemisto
ja teillä oli huolehtia puhutaan paketeista ja tekemässä -
todella päivittäminen Käsityöläinen tai vastaavia komentoja,
kirjastot sinua on asennettu,
samalla tavoin package.json täällä ja onnistut kirjastot
ja versiot että välität.
Joten, jos minulla on package.json, Voin vain tehdä NPM,
Node Package Manager asentaa, se tulee automaattisesti etsiä
tuohon package.json tiedosto.
Katsoa ja nähdä, voin on uusin versio
kaikki myyjät moduulit
solmussa alaviiva moduulit hakemiston tässä tai ehkä
Joissakin vanhemman tai kantaisä hakemistoon.
Ja jos ei, se on menossa ladata niitä
ja näet koko joukko
HTTP juttuja viiran poikki.
Joten esimerkiksi haluan näyttää sisällön
solmun moduulit vain ilmaista.
Anna minun mennä eteenpäin ja rohkeasti poistaa solmun moduulit
niin, että minulla on nyt tämä.
Ja jos en NPM asentaa, sinun nähdä, että se tulee lukea
että package.json tiedosto ja olemme nähneet tuotos muistuttaa
Tämän vuonna Laravel maailmassa.
Se lataamalla koko nippu tavaraa ja se on
koska express puolestaan riippuu läjän
muiden kansojen kirjastoissa.
Niin, kaikki nämä ovat tavallaan ladataan rekursiivisesti.
Tähän asti jos minä teen LS uudelleen,
siellä on minun solmu moduulit hakemistoon takaisin
ja ilmaista kuin takaisin.
Joten se on vain tapa yksinkertaistaa pakettien hallintaan.
Nyt, jos katsomme app.js tiedosto, tämä on menossa
olla paluuta varhaisimmat web-palvelin
jos me vain sylkeä out "Hello, world".
Mutta huomaa paradigmojen täällä,
ensin tarvitsemme nimenomaista moduuli, niin meillä on tätä linjaa
koodin jonka tiedät alkaen asiakirjat.
Voit kirjaimellisesti hoitoon että moduulin muuttujan funktiona,
joten sulkeella lähellä Suluissa tarkoittaa suorittaa sen.
Että menee ilmeisesti palata jotain aiomme
yleensä soittaa sovelluksen.
Miten se toimii?
En todellakaan tiedä.
Annan jonkun muun, tiedätte, in Express maailmassa kirjoittaa siitä.
Aion nyt seistä hänen harteillaan niin
tehdä hakemukseni jo hieman yksinkertaisempi.
Täällä aion kuunnella että tietyn sataman
jotka voivat olla melkein mitä vain.
Ja tässä on koodi, joka on ehkä enemmän muistuttaa nyt
sekä Laravel ja routes.php.
Joten tämä on ehtoollisen yksinkertainen, olen juuri menossa määrittää reitin
for slash tähti, joten kaikki aiotaan imeytyy
tämän pyynnön käsittelijä.
Paradigma pyynnön käsittelijä on sen Nimetön toiminto
pyytäen argumentti
ja vastaus objekti aivan kuten ennenkin.
Ja res.send in Express keinoin lähetät koodi, jota seuraa
millä tahansa haluat lähettää.
Ja tietenkin, voit tehdä jotain harrastaja
by todella lähettävät tiedostoja tai HTML
tai dynaamisesti sisältöä.
Mutta nyt kaikki teimme oli sylkäistä Hello, world.
Jos menemme palvelimeen kolme, tämä on vielä hienompi vain
näyttämään joitakin toimintoja.
Ja me näytämme sinulle jopa seksikkäämpi versio
Tämän keskiviikkona.
Mutta jos olet koskaan kuullut Socket IO ehkä,
niin luulen Jonathan tai joku sanoi aiemmin,
yksi niistä asioista, solmu on todella tuntenut
sillä on sen reaaliaikainen käyttäytymistä, eikö?
Ajattele PHP MySQL, jos oli toteuttaa chat-palvelimeen
PHP jolloin kaksi ihmistä voisi avaa selainikkunan foo.com
ja sitten alkaa JOITUS kunkin muut, Alice yhdessä ikkunassa,
Bob toisessa siten, että kukin niistä näkee
tai hänen viestejä toisessa ikkunassa.
Miten tekisit tämän PHP ja MySQL?
Käyttö tai käyttämättä Laravel sort aineettomien, voit olla
kuten index.php tiedosto.
Ja sinulla on - vuonna Joissakin tapauksissa se sai sylkeä
ulos muodossa, joten ei ole olemaan HTML-lomakkeen
että luultavasti väittää ei normaaleja lomakkeen lähettäminen
mutta Ajax luultavasti, eikö?
Joten, on toimitettava handler, joten kirjoitat tekstikenttään,
osut syöttää ja sitten se saa lähetetään palvelimelle Ajax.
Mitä te sitten tehdä palvelimelle?
Niin, sinulla index.php
tai jotain piste PHP, joka on saadut HTTP parametrin
käyttäjältä, Alicen tai Bobin pikaviestin, mitä teet
yhteistyöstä, jotta sen lisäämiseen Bob tai Alice, vastaavasti?
Siis kirjaimellisesti on työkalut, joilla
tehdä tämä teidän min.
Niin kuin mitä tekisit?
Sinulla on yksi minuutti toteuttaa tätä ohjelmaa.
Yeah?
[Inaudible Huom!]
Täydellinen. Aivan, joten sinulla tietokantaan.
Tiedämme hieman vähän siitä MySQL.
Niin, sinulla on taulukko se on viestejä,
Ehkä siellä kertaa leima, käyttäjätunnus,
itse viestiin itse luonut, että
Päivitetty että ja kaikki tämä.
Joten, voit tallentaa tietokantaan.
Ja kai Alice lähettää ensimmäinen viesti, miten Bob saada
että viestin nyt tietokannasta?
>> Se saattaa olla joitakin Ajax vasteen, joka on jatkuvasti menossa
takaisin tietokantaan top saada [kuultavissa].
>> Aivan.
Joten Bobin koodi kuka koodi on sama kuin Alice on vain eräänlainen
symmetrinen suhde,
Bobin selain on joitakin Ajax-koodin se on luultavasti ehkä joka 30
sekunnin vetämällä palvelimen kautta Ajax sync,
Onko uusia viestejä?
30 sekunnin välein on menossa olla ystävällinen suboptimaaliset
koska hän joutuu odottamaan jopa
jos Alice kirjaimellisesti juuri lähettänyt viestin.
Joten, Bobin selaimet voisivat joka toinen osuma palvelimen.
Mutta se tarkoittaa Alicen selain on lyömällä palvelin
joka toinen.
Entä Charlie [Oletetaan oikeinkirjoitus]
ja David [oletetaan kirjoitustapa] ja Edward [oletetaan kirjoitustapa]
ja joka toinen kirje aakkoset?
Mikä on ongelma Tämän lähestymistavan?
Paljon osumia liiallinen -
Siis olet vain tehokkaasti Annostelu oman näköpiirissä
tai DDOSing, Distributed Palvelunestohyökkäyksen
oman sivuston, saamalla kaikki
näistä käyttäjistä JavaScript aktivoituu koodi, joka on vain ping
pahus irti palvelimen vaikka mielivaltaisen määrän,
80 prosenttia ajasta kukaan ei ole sanonut mitään
chat-huoneessa.
Mutta olet vain tarkkailun varmistaa tällaisen.
Joten PHP paljon kielet eivät yksinkertaisesti ole hyviä
reaaliaikaiseen viestintään.
Koska PHP muistaa siellä ole keskeinen muistia, eikö?
Sinulla on Session Objects joka luo illuusion
Keski varastointi mutta se on käyttäjäkohtaisesti.
Sinulla ei ole maailmanlaajuinen muistia kuin teet Java Servlet
tutuissa tai muussa runko toimii niin.
Node.js kuitenkin, et ole maailmanlaajuinen muistia koska olet
yksi palvelin ja että "voi muista mitään se haluaa
noin kaikille käyttäjille.
Ja saatat silti on tietokanta.
Mutta Kiva juttu Node.js Sekin on, että se on paljon parempi
kuin jotain PHP ja luo illuusion
käsittelemään useita asiaa kerralla.
Ja itse asiassa kuin syrjään, voit toteuttaa chat-palvelimet PHP,
mutta voisitte yleensä tehdä jotain kutsutaan pitkän äänestyspaikoilla
jolloin et ping palvelin joka toinen.
Ping-palvelin, palvelin ei vastaa sinulle
varten ylöspäin 30 sekuntia, se kirjaimellisesti istuu
silmukan odottaa ja odottaa.
Ja palvelin tarkistaa, onko siellä on uudet tiedot tietokantaan
ja vasta sitten, kun olet näkee, "Oh, tässä on viesti Bob "
se vastata HTP palvelimelle?
Joten vaikutus selaimessasi on, että IE-kuvaketta tai Mozilla
tai mitä vain pitää kehruu 30 sekuntia kerrallaan.
Mutta puoli on, et on 30 yhteyspyynnöt
30 sekunnissa, sinulla on sellainen.
Niin sitä kutsutaan pitkän äänestyspaikoilla.
Mutta vielä parempi modernin web selaimissa on jotain kutsutaan
WebSocket, joka otat CS143,
voit tehokkaasti tehdä TCP yhteyden asiakkaiden
kuten selaimen palvelimelle ja sitten kiinni siihen
käyttämättä lähes niin paljon varoja
HTTP voisi perinteisesti tehdä.
Ja Socket IO on Node.js kirjasto
jonka avulla on paljon helpompaa tehdä istukkaliitokset
tai illuusioita siellä klo vanhoille selaimille
jotta voit toteuttaa tämän reaaliajassa toiminnallisuutta luvulla.
Niin, tässä on esimerkki.
Tämä kama ylös saa hieman monimutkaisempi
mutta se on lähinnä kopioi ja liitä alkaen socket.io oppaissa.
Tässä on nyt enemmän täsmällisestä pyynnöstä käsittelijä.
Jos käyttäjän pyynnöstä slash, mitä tiedostoa olen menossa
olla ilmeisesti palvella jopa niitä?
Index.html.
Ja siellä on joitakin uusia tavaraa täällä stream
jonka minä näytän sinulle vain hetken.
Mutta tämä on vain yksi tapa
tarttumalla tiedoston hieman tehokkaammin
kuin vain tehdä fs.readFile.
Se on vähän fiksummin varsinkin suuria tiedostoja.
Niin pitkän tarinan lyhyesti, nämä rivit vain palvella
up tiedosto nimeltä index.html
joka nyt olettaa sisältää HTML-muotoa, jossa Alice
ja Bob saattavat yhteydessä toisiinsa.
Lopuksi io.sockets.on, joten tämä tulee tästä tien tänne.
Joten, olen juuri lukemassa dokumentointi io.socket antaa minulle
pääsy ns WebSocket selaimella,
välillä selaimen ja palvelimen.
Kuuntelen erikoistilauksesta tapahtuma-yhteys, joka avulla
kun käyttäjä osuu palvelin yrittää
avata tässä yhteydessä, olen soitan tätä soittaa takaisin.
Ja nyt aion tehdä seuraavaa.
Viiden sekunnin välein, mitä aion tehdä?
Aion päästää tai lähettää jos muistat tyhjästä,
graafinen kieli olisi että lähetys estää?
Joten, olet menossa päästämään
tai laukaista tapahtuma nimeltä mielivaltaisesti palvelimelta.
Ja se tulee sisältävät viestin Ping
ja nykyinen päivämäärä.
Joten, tämä on todellinen chat-palvelimeen, että Alice
ja Bob voi käyttää, mutta se on eräänlainen automaattisen chat-palvelimeen
missä viestit ovat vain eräänlainen kaikuluotaimen ping.
Se on vain tapailla ajoittain, jotka ovat lähetetään viiden sekunnin välein.
Joten, jos olen itse suorittaa tämän asia - ja se on siinä.
Olla selkeä tänne, huomautus tämä on vain kirjautumalla tänne.
Joten, nyt pääsenkin silmänsä, että.
Anna minun tehdä solmu app.js.
Anna minun mennä minun selain.
Reload kotisivu täällä.
[Tauko]
Ja anna minun sulkea tarkastaja.
Viiden sekunnin välein, minulla on esittelyn vaikka ei
interaktiivinen ihmisten
jotain, joka on tapahtuu asynkronisesti.
Selaimessa ilmoituksen, ei ole spinning-kuvaketta.
Se käyttää harrastaja ominaisuus Chrome moderneista selaimista
säilyttää socket yhteys alla huppu
ja se mitä kutsutaan yleensä pub / sub malli,
julkaista / tilata malli, jos emme ole tehneet
että varsin yksiselitteisesti täällä.
Mutta mitä mukavaa tästä yleinen pub / sub paradigma on
että voit olla yksi julkaisija.
Tässä tapauksessa Keski-palvelin ja kaikki
Yksittäisten selaimet ovat asiakkaita.
Alices ja Bobs ja maailman voivat tilata sen,
joten voit välittää viestejä keskuudessa rajaton määrä käyttäjiä.
Ja vaikka taas olemme näe vuorovaikutteisuus,
meillä oli ehkä 12 riviä koodia vain tehdä tätä.
Ja se ei todennäköisesti ole harppaus kuvitella, miten saatat piiskaa
ulos index.html että on todellinen HTML-lomakkeen,
hieman jQuery-koodin kanssa Ajax, joka ei lähetä päivällä
mutta vain lähettää mitä Alice tai Bob tyyppi palvelimeen
niin palvelin Välitän sen ulos.
Ja lupaan vilaukselta yksi viimeinen asia vain
kiusaa sinua tässä.
Jos menemme virran nolla-yksi,
näet koodin, joka on vain hieman erilainen täällä.
Just niin olet nähnyt sen, Tämä on vaihtoehtoinen
mitä pyysin fs.readFile menetelmää aikaisemmin, jolloin,
voit kertoa Node.js: "Mene Lue tämä tiedosto muistiin.
Mutta jos se on iso vain antaa minulle kimpale kerrallaan. "
Ja saatat tietää CS165
tai 161 tiedostojärjestelmien on eri
suorituskyvyn ominaisuuksia.
Haluat ehkä lukea lohkoissa 512 tavua
tai 2 kilotavua tai mitä tahansa.
Tämä on optimoida tapa saada takaisin tiedoston iteratiivisesti
jotta voit sylje ulos hieman nopeammin
selaimen tai kuka lopulta asiakas on.
Niin valtava määrä sisältöä tänään ja aiomme sukeltaa
yksityiskohtaisemmin keskiviikkona Tim [oletetaan kirjoitustapa]
erityisesti tarkastella, miten me voi kääntää joitakin ajatuksia
alkaen alkupuoliskolla Tietenkin Laravel ja malleja
kirjastoksi, että hän itse kirjoitti kutsutaan Bookshelf.js
, joka on tullut yhä suosittu yhteisö
koska se antaa sinulle suurin osa siitä,
jos ei enemmän kuin toiminnallisuutta eloquent
joka muistaa on, että Kirjasto oivallus Laravel,
niin siitä lisää ja enemmän miten
kehittää täysin toimiva apps keskiviikkona.
Me näet sitten.