>> Greit så vi er tilbake, et par mål til i dag,
vi vil plukke opp der vi slapp forrige gang,
husker at vi var gjør dette suksesjon
av server relaterte programmer, super enkelt, men ved hjelp av node JS
og da også nylig bruker ekspress preg AS
og hva ble uttrykt JS den analog i PHP verden.
Så express er mer ... nær,
så express er i hovedsak de MBC rammeverk som er ganske
populær i node js verden,
Bokhylle som vi får se i dag via Tim er en analog
av den veltalende som er en ORM på et objekt forhold skisseprogram
som faktisk gjør det enklere å unngå lavt nivå SQL-kode
og faktisk uttrykke relasjoner blant ulike objekter.
Så en av de kuleste ting ærlig
om node js er bare hvor lett det gir seg
å gjøre sanntidsapplikasjoner, ting som chat-servere
eller meldingsserverne, noe som dere bruker nå
som Google ... G-chat eller Google hangout
eller Facebook-statusoppdateringer eller Twitter om du er
på deres nettside alt er liksom sanntid
eller gir deg den illusjon av sanntid
og det er faktisk en smerte i nakken for å gjøre med noe
som PHP og min SQL akkurat hva vi foreslår
på mandag ville være et middel
der kan du implementere illusjon av sanntid oppførsel
med en chat-server i PHP, hva ville du gjøre?
Alice sender en melding, treffer angi hvor går den?
Yeah.
>> [Hørbar seksjonen]
>> Inn i en data base, og deretter hva gjør Bob nettleser har
å gjøre for å faktisk se hva Alice har sagt, ja?
>> [Hørbar seksjonen]
>> Hold polling data base, høyre, så en AJAX-forespørsel har
til brann hvert sekund, hvert få sekunder eller vi snakket kort
men ikke se på et eksempel på noe som kalles lang polling,
noen husker hvordan
at mekanismen ... på et høyt nivå fungerer?
>> [Hørbar seksjonen]
>> Akkurat, ja så en nettleser fortsatt gjør en AJAX-forespørsel
til en server, til en foo dot php men foo dot php bare virker
å henge, det i hovedsak sitter i en while-loop for så mange
som 30 sekunder typisk og bare én gang foo dot php fil
innser oh er det en ny rad
i datagrunnlaget gjør det faktisk svare
med en http svare.
Så du tror at dette kan ellers henger serveren
, og den gjør det til en viss grad
men det betyr at det er mye mindre overhead
fordi du ikke trenger en ny tcp forbindelse, en ny forbindelse htp
å faktisk be om data fra serveren.
Men node js kommer med en svært populær bibliotek kalt socket
dot io som du kunne aldri brukt er bygget på toppen
av en teknologi som kalles web stikkontakt som er til stede
i de fleste moderne nettlesere og hva socket io gjør er at du
for å opprette i det vesentlige en vedvarende forbindelse
mellom nettleseren og serveren det er svært lav overhead
slik at du ikke nødvendigvis har de samme skaleringsproblemer
som du kanskje hvis du er konstant trykket serveren
i verden av PHP og min SQL og lignende.
Selv for eldre nettlesere
som ikke støtter web socket dette biblioteket socket dot io kan
falle tilbake på blink gjennomføring av stikkontakter
og stikkontakter er et nettverk ting fra CS143 for eksempel.
Eller det kan til og med falle tilbake på lenge polling seg selv slik at de implementerer
at samme slags arbeid
rundt for faktisk å opprettholde illusjonen av at forbindelsen.
Så kontakten [uhørbart] io og dette er i form
av en java script bibliotek, essensielt hvis du bruker det
i form av en node js program du ikke bare installere
det som en pakke med noe som NPM som vi brukte på mandag
og eller du også inkludere en strippe tag i i html-fil
som sier bruker klientsiden bibliotek.
Så det er to halvdelene til det og hva vi har gjort her
i fjerde iterasjon av mandagens sekvens
eksempler er følgende.
Så dette filstrukturen er minner om en svært vanlig sett
opp for uttrykt js og heldigvis er det måten enklere
enn lervo [fonetisk] var, husker når du setter
opp lervo du fikk en stor ekkel dumpe av en hel masse filer,
leverandørens kataloger, lib og svært tung vekt i forhold til dette.
Nå i rettferdighet har vi strippet bort ting som er ganske mye en
distraksjon, men alle saftig ting er virkelig
i node moduler.
Bare for å gi deg en smak hvis vi ser
på node moduler er det to moduler eller biblioteker
at jeg har lastet ned, dette ville være ekvivalent
av leverandørens katalog, en kalles express som er
som larevel men i node
og socket io den en jeg nettopp nevnte.
Så de eksisterer, slik at vi kan Gjør følgende hvis jeg åpner
opp la oss si indeksen dot html, la oss først se på html,
dette kommer til å komponere denne kroppen, min super,
super enkel chat-server.
Så det er tydeligvis en ul med en unik inntrykk av meldinger
og det er der ett li om gangen,
alle direktemeldinger er kommer til å dukke opp mellom Alice
og Bob og så er det en enkelt skjema med en tekstfelt
og en send-knapp der Alice
eller Bob kan faktisk melding hverandre.
Så nettoeffekten dersom Jeg kjører dette programmet
ved å gjøre node plass app dot js, hvis jeg drar opp et par
av nettleservinduer er at Alice kan være på høyre side,
Bob kan være på venstre og bare
å være klar er det ingen magi her har jeg fått ett vindu
inkognito så det er ingen deling av informasjonskapsler eller noe
som dette, disse er to forskjellige brukere.
Jeg burde være i stand til å ha Alice si hei Bob, klikk OK
og nå ser du til venstre at Alice budskap ble sendt
og nesten umiddelbart på høyre side.
Ingen polling tilsynelatende involvert, Bob fikk den samme meldingen.
Nå Bob sier si hei Alice du se den motsatte effekten.
Så hva som egentlig skjer, hvordan mye kode trenger vi å skrive
å implementere dette en chat-server
som du kan nå ekstrapolere mentalt at alle
i dette rommet dersom dette var ikke på min [uhørbart]
men på foo dot com vi kunne alle begynne å chatte øyeblikkelig
med hverandre.
Så hva er involvert, og før jeg tømme denne skjermen dette er dette
er bare socket io være en Litt bråkete, det er bare utskrift
ut feilsøkingsinformasjon til skjermen,
det er egentlig ingenting ellers skjer der.
Så la meg åpne opp app dot js, så som før vi har fått et par ting
på toppen av filen.
En haug med krav, så disse er som bibliotekene
eller skjerpe ledetråder eller kreve onces uansett mental modell du
ønsker å ha, og bare å gjenerobre FS brukes
for hva slags funksjonalitet?
Så filer system så lese filer potensielt og sånt
og jeg bruker dette i ett plasser som du vil se,
uttrykkelig selvfølgelig er dette rammeverk som vi bruker,
det er strengt ikke nødvendig vi kunne
som på mandag skaper totalt vår egen http-server fra scratch
ved å gjøre lage server og alle av den type kode fra før
men som vi vil se dette gjør ting litt enklere
fordi alt jeg har å gjøre er på linje 3 her instantiate
og uttrykke objekt, jeg ringer det app, noe tilfeldig,
Jeg vil da fortelle appen lytte på vilkårlig port 1337,
som kan bli 80 av konvensjonen
og så til slutt har jeg en ny linjen i dag som sier
å kreve at kontakten io bibliotek og deretter
av denne kjeden tilnærming ville dette prikk operatør Jeg er bare
kalle en leksjon lytte det er hovedsak forteller kontakten
io biblioteket til også lytte til den samme serveren
eller web kontaktforbindelser.
Så hva nå, så hva er dette gjør, disse fire linjer
av kode her som bør ser minner om larevel,
hva betyr dette representerer?
>> [Hørbar seksjonen]
>> Dette er et ... rute, bare en rute så i app dot js,
aka server dot js avhengig på hva folk vil kalle det
i sine egne applikasjoner du har en konvensjon
om å gjøre å definere dine ruter,
app dot get betyr at når du får en GET-forespørsel til å gå
til for bokstavelig slash gå videre og kaller dette anonym funksjon
og den anonyme funksjonen i dette tilfellet tar av kravet
eller forespørsel, og et svar, potensielt noen andre ting
men minimalt disse to.
Forespørselen gir deg tilgang til ting som http parametere
og overskrifter og andre saftige ting
og deretter responsen er mekanismen
der du kan svare på brukeren.
Så dette er super enkelt selv selv om vi ikke se helt
samme kode sist gang, jeg er bruker filsystemet moduler,
skape lese stream metode som i hovedsak gjør det,
skape en lesestrøm som betyr egentlig starte slurping
opp bytes fra indeksen prikk html så effektivt som mulig
uten nødvendigvis å vente till din lese hele filen
og som du gjør at rør dem bokstavelig talt
i den loddrette linjen forstand hvis du er komfortabel
med linux kommandolinjen,
rør den til respons objekt.
Så var det to eksempler knyttet til bekker på mandag,
vi bare sett på en, men du er velkommen til å se tilbake
på strømmen o og stream en.
Stream en ... 0 gjorde noe som ligner på dette,
stream en gjorde noe nesten akkurat som dette,
dette er bare en sleip en liner for å si liksom
av slurp noe i over her og deretter begynne å sende den her
på samme tid uten gjør en masse enige
og deretter en massiv høyre,
denne tilnærmingen er generelt mer effektiv.
Så det er litt gamle ting selv om det var nytt på mandag,
Dette er alt som skal til gjennomføre en chat-server
med node js og mer spesielt socket dot io.
Så hvordan fungerer dette, la meg flytte den opp litt,
så io er bare en variabel som refererer
til modulen vi nødvendig tidligere,
dot socket er bare en Eiendommen innsiden av det
som gir meg socket relatert funksjonalitet
den er en vanlig metode som relaterer seg til hvilke generelle oppfatningen?
En hendelse så videre aka lytte enkelte bibliotekene det betyr bare
på høring denne hendelsen som kalles forbindelsen
og nå vet du dette bare fra ser på dokumentasjon,
hvem skrev biblioteket definert et arrangement som heter
tilkobling som gjør hva din skulle tro
når Alice eller Bob kobler.
Gå videre og kaller dette anonym funksjon take bestått
i ett argument klienten som er tilsynelatende en slags
objekt som representerer Alice tilknytning
eller Bob tilknytning eller Charlie eller noen andre
og nå gjør vi følgende.
Vi forteller klienten etter han eller hun er koblet
å lytte spesifikt
for en melding som er helt vilkårlig kalt melding
kolon klient.
Dette er noe som Tim og Jeg kom opp med, kan det være foo
eller bar, det er bare noen unik streng som vi trengte
å bestemme seg som utviklerne.
Når Alice eller Bob hører
at hendelsen denne anonyme Funksjonen bør kalles
og data, Innholdet i Alices
eller Bob budskap bør være gått inn i dette hendelseshåndterer
og nå hva skal klienten gjør godt du kan slags
av lese dette ganske intuitivt klienten skal kringkastes,
ellers kjent som avgir en melding som kalles metoden server
dermed betegner denne meldingen kommer fra serveren ikke
fra nettleseren og hva ville at meldingen være,
det er tilsynelatende nyttelasten fra uansett kom fra klienter
og vi er bare nødt til å vilkårlig kaller det melding.
Så mye av dette er vilkårlig
gjennom fornuftig navngiving konvensjoner, Tim og jeg kom
opp med, for det meste Tim og da vi bare skaper til slutt en
chat server som gjør hva, når Alice sender en melding
og treff angi hvilket arrangement tilsynelatende får sparken,
bare for å oppsummere.
Alice typer en melding, treff inn, er program sparken,
denne koden hører det, og nå serveren sender hva,
hva er sluttresultatet av dette egentlig?
Alice sender meldingen nå serveren kringkaster det
effektivt for alle bortsett fra for Alice, hvorfor alle unntatt
for Alice hvis du bare se
på klienten dokumentasjon dot kringkasting dot innrømme,
bokstavelig talt gjør det, sender meldingen
for alle bortsett fra den klient som sendte deg
at den siste meldingen.
Så dette er grunnen til at du bare se den en gang på hver side,
du ser ikke både Alice og Bob får Alice budskap.
Så det er det, dette er en videresending middel
hvis du vil det er bare å ta i meldinger
og rebroadcasting dem ut
og det er bemerkelsesverdig skalerbar Jeg mener selv
med en super enkel server og et par linjer
med kode du kunne sikkert håndtere hundrevis om ikke tusenvis
samtidige enkle beskjeder går frem og tilbake som dette
og tenk kompleksiteten nå for å gjøre dette i PHD
eller Larevel eller min SQL og hvor mye kode du vil ha
å skrive for å faktisk oppnå det.
Nå i rettferdighet dette er ikke vedvarende riktig
hvis serveren går ned vi mister hele historien
så det er ikke helt en perfekt oversettelse, men det er
så rett frem.
La oss se på Java-script koden vi hoppet tidligere,
Dette er Alice og Bob klient,
nettsiden de bruker nå la oss slå opp her for et øyeblikk.
Det er litt mer kode
men det er ganske mye bare jQuery her så varsel
som i web-siden at jeg trakk
opp et øyeblikk siden vi inkludere jQuery bibliotek,
kontakten io bibliotek og som en side merke forskjellen
her, slash slash på I begynnelsen av en bane
som dette betyr hva,
hvor er jQuery prikk js på hvilken server?
Yeah.
>> [Hørbar seksjonen]
>> Det er på internett ja bokstavelig talt kalles kode dot jQuery
dot com så hvorfor slash, slash, hvorfor ikke bare en skråstrek,
hvor er http eller tykktarmen, hva betyr dette generelt
hvis du slash slash på begynnelsen av url?
Det er faktisk nyttig.
Ok så hva er åpenbart mangler http nå hvis vi grunn
gjennom dette logisk, vanligvis du ikke trenger
å nevne noen servere navnene riktig
som hvis bare bruke skråstrek jQuery dot js hva som er antatt
av nettleseren?
At filen er på samme server slik fortsetter den slags
logikk hvis du ikke forteller det hvilken protokoll hva er
Nettleseren anta, samme protokollen slik Hvis du noensinne har besøkt nettsteder
som gir deg en feil sammen linjene av usikkert innhold
På denne siden er det fordi noen har hard kodet en http
kolon skråstrek skråstrek URL for en bilde eller en Java-script-fil
eller CSS-fil, noe sånt i kildekoden til siden
men selve siden i lesere URL er http s.
Så dette er bare den fancy liten vei
å si jeg vet ikke hva protokollen er
at disse sluttbrukerne kommer til å bruke
men bare sørg for at det kampene slik at krom
og andre nettlesere ikke kjefte på brukeren.
Den eneste haken er den jQuery folk hadde bedre stilt
opp https på deres server.
Så de er faktisk notering på 443.
Greit mellomtiden dette en her dette er snill
misvisende strek socket io antyder
at det er en katalog som heter socket dot io på serveren min
men det er ikke om vi rote
rundt det er den node-modulen katalog
men det er ingenting offentligheten om dette,
når vi konfigurerte socket io å lytte på de samme portene,
1337 i hovedsak at biblioteket at noen andre skrev er kommer
å liksom sette inn noen kode til node js sin miljø
og bare lytte til denne banen.
At biblioteket har bare konfigurert en rute for dette,
det er ikke en ekte katalog.
Det ville være i en standard plassering.
Ok så nå interessant delvis
slik at når dokumentet er klar som indikert
av denne jQuery konstruere, første jeg kommer til å gå videre
og koble til en stikkontakt,
hva socket bare ved ... holde det enkel Jeg kommer til å koble
å kutte, er at hvor brukeren er,
Jeg har holdt eksempel enkle vi bare kommer til å koble
til nøyaktig samme nettadresse som den brukeren har besøkt så jeg kommer
å gjøre følgende, jeg kommer forteller Alice eller Bob nettleser
å lytte etter melding fra serveren.
Igjen dette kunne ha vært foo
eller forby enhver tid du høre en melding
fra serveren anrops det data og deretter gjøre dette jQuery kode
som jeg gjetter de fleste om ikke alle er kjent
med i disse dager, men egentlig en pin å liste elementet
til den eksisterende UL hvor ble kalt meldinger
som bokstavelig talt sier uansett nyttelasten er
av chat-meldingen fulgt av bindestrek, etterfulgt av å motta,
etterfulgt av et mellomrom, og deretter en oppdatering tid og det er derfor
å være klar hvis vi går tilbake
til dette får du disse ekstra kuler igjen og igjen
og igjen med dato ganger.
I mellomtiden hvis vi ser her nede vi bare ha
å håndtere innsending av skjemaet slik at det var mottaker
av en direktemelding, her sending og dette er liksom
av urelatert til node js, lytte til skjemaene sende hendelsen.
Når det skjer hindre standard Dette betyr bare ikke sende det
til serveren på vanlig måte, laste hele siden,
vi ønsker å gjøre alt dette via ajax.
Her er bare noen jQuery koder
å faktisk få input hvis typen er meldingen,
hvis navn er meldingen gå videre
og få den verdi så du går videre
og hvis du faktisk har en melding, hvis Alice og Bob
eller Bob faktisk typer noen none 0 talltastetrykk avgir
på sokkelen en melding som kalles program med at nyttelast
og deretter ned her dette er hva gjør det grønt i motsetning
til rødt, vi bare utgang apparatet side [uhørbart].
Så det er det, men alle Dette er bare satt opp,
den virkelige nye ting jeg ville hevder er bare disse tre
eller fem linjer med kode her og den slags hint på strømmen
av node js og med det dette biblioteket.
Så la oss ta en rask se på ekspress dot js,
så det jeg kommer til å prøve å gjøre i de resterende par
minutter her er satt opp Noen idé, et par teknikker
som vil deretter ta et par minutters pause, vil Tim satt opp
og så skal vi dykke i dypere
til en mer interessant uttrykke søknad og også
til bokhylle, biblioteket Tim faktisk skrev
for åpen kildekode-miljøet
som gir oss veltalende lys funksjonalitet med min SQL
og transaksjoner og andre slike funksjoner og han vil også dykke
i en litt dypere til språket Java manuset selv,
hvordan formål eller ikke-klassen modellen fungerer ellers vet
som en prototype modell, litt mer om det som kommer.
Så la oss ta en titt på to siste programmer her, server fem
og tjener til 6 som alle slags ligner i ånden,
disse er ikke chatte servere men de bruker express.
Så la oss ta en titt på hva dette faktisk gjør,
Jeg kommer til å gå videre og åpen ... Jeg kommer til å kjøre dette programmet
med node app js, kommer jeg til å gå tilbake til nettleseren min og laste
og dette er tydeligvis all denne serveren gjør,
det er en super enkel server det er tydeligvis et søk
motor, så hvis jeg skriver i foo og sende inn, ingen søkeresultater
for foo, jeg fikk ikke komme seg rundt til implementere den sofistikerte
back end, alt det som skjer
å gjøre er ekko uansett hva du skriver ingen resultater for foo,
ingen resultater for bar så hvordan gjør vi dette
fordi det er en par stykker, en,
det er helt klart noen innganger blir gitt
til serveren ikke Larevel selvfølgelig, men node js nå
så vi må liksom få på den parameteren Q,
vi klart å gjøre noen form for visning her,
vi overleverer et syn så kanskje det er en mulighet
for maler eller variabel interprelation [fonetisk]
så la oss ta en titt i det følgende.
I app js for denne spesielle server dette er alt vi har.
En vi krever uttrykke seg selv, to banen modulen
som bare gjør noen nyttige ting
som å bli med strenger sammen og så videre for meg,
Jeg lytter på port 1337 og nå dette er nytt, så det snur
ut at express som Larevel støtter ulike plug ins
og teknologier og andre ting og en
av de teknologiene som du kan plugge inn er en visning motor
som betyr bare hva templating Motoren har du lyst til å bruke,
Larevel hadde sin egen ting, men du kan plugge
i forskjellige ting, forskjellig fersken P rammer har
forskjellige måter templat, ejs er bare en vanlig
og en ganske enkel motor som bare lar deg gjøre ting
som klammeparentes som du hadde i Larevels syntaks
for å erstatte variabler,
det er litt annerledes syntaktisk er alt.
Så nå er det dette som kalles midten ware slik som du ser
i ditt eget lag node prosjektet en midten ware er bare slags kode
eller biblioteker som du injiserer
inn i [uhørbart] respons livssyklusen til en applikasjon,
med andre ord disse to linjer forteller uttrykkelig
å gjøre litt ekstra arbeid mellom den tiden det blir en anmodning
og mellom det tidspunkt den sender at forespørselen til din egen rute,
koden som du har skrevet.
Så spesielt denne linjen her bruke uttrykke dot statisk og alle
av denne kompleksiteten dette bare betyr at hvis du ser en forespørsel
som kommer inn for en statisk fil som foo dot jif eller foo dot css
eller foo dot js så ikke en dynamisk generert rute,
gå videre og anta det lever i det offentlige underkatalog,
det er alt som gjør.
Det er liksom som kartlegging i Larevel, alt til din nettside
eller offentlig katalog snarere i Larevel.
Denne neste linjen er bare sier jeg vil bruke ruter,
Jeg ønsker å bruke ting som app dot få
som vi så et øyeblikk siden, og vi får se i løpet av et sekund nå.
Så app dot få midler lytte for denne ruten,
slash når du får det kaller dette anonym funksjon som tar
i en forespørsel og et respons, og nå bare
som Larevel du har en måte gjengi et mal,
respons dot gjengi, sitere unquote indeks,
gjengi er en mal kalt indeks,
det er det så la oss suspendere som tråden for bare et øyeblikk look
på innholdet i visningene katalogen
og legge merke til dette også er super enkelt for nå,
det er indeks dot ejs og søk dot ejs,
Jeg vil selvfølgelig ha den første
fordi det er den jeg bare trøtt til å gjengi, og vi vil se
utsikten mot indeks dot ejs mest faktisk helt html
i øyeblikket, er det faktisk ingen templating skjer.
Så jeg teknisk sett ikke trenger selv å kalle det ejs,
Jeg trenger ikke denne funksjonaliteten men jeg holdt det uniform,
så det er det, er dette hva gir meg som super enkel form.
Så det er bare en annen rute, hvis vi ser her nede jeg har sagt
at dette er hva som håndterer få slash søk så selve sorterings
av Google som behandleren for danne underkastelse, når du får
at banen kaller dette anonym funksjon
og gjengi malen kalt søk
og hva som er den nest argumentet antagelig bety.
Det ser ut som en JSON objekt av sorterer eller Java-skript objekt.
Hva er rollen som andre argumentet formodentlig?
>> [Hørbar seksjonen]
>> Selve søket at brukeren skrev i tilsynelatende lever
i forespørsel dot spørring, spørring henviser til alt
etter spørsmålstegnet dot q som er vilkårlig navnet
at jeg ga det akkurat som Google
og i mellomtiden q kolon er bare si passere inn i malen
søk dot ejs, en nøkkelen til q og en verdi
av hva q faktiske Verdien var.
Så det går bare én fil av interesse for visninger,
søk dot ejs jeg holdt denne super enkelt også,
Det er stort sett bare html unntatt for en noe bemerkelsesverdig linjen
som er denne syntaksen her som ser ut som en gjeng
av forskjellig templating motorer dette betyr bare plug
i verdien av q og gjør den fet.
Så det er ingen faktiske søk funksjonalitet, men det gjør slag
av foreslå hvordan du ville strukturere et skjelett
av et program sånn.
I mellomtiden ... faktisk jeg kan vise en annen ting,
merker at jeg har noen html opp her for CSS-filer
og Java-skriptfiler, det er ingenting i disse filene
for øyeblikket, men legger merke til at det er en offentlig katalog
som jeg sa tidligere for statiske filer så hvis jeg går
der det er min css katalogen,
hvis jeg går inn der det er stiler dot css
og det er ingen innholdet der
men det er hvordan du ville har offentlige tilgjengelige filer.
Greit la oss ta en titt på en annen variant her
og så skal vi introdusere en idé og pause.
Så dette er serveren seks siste, så Dette er nesten identiske, bortsett
for de to nederste linjer som ser ut som dette.
Så egentlig er det en tredje linje som er annerledes
men jeg har skjult ... så la meg tilbake opp litt så ikke noen ønsker
å foreslå hva som skjer på her i lekmann vilkår
eller tekniske termer hva er annerledes med denne versjonen
med hensyn til de linjer i de beste noder.
Hva har jeg antagelig gjort her, og hvorfor?
Ja, Sharon.
>> [Hørbar seksjonen]
>> Ja det ser ut som jeg har flyttet indeks og søk
så separat direkte eller noe, Jeg har priset dem ut
, og som er så mye som i Larevel du kunne sette alt
av kontrolleren logikk innsiden av rutene dot php
med anonyme funksjoner igjen og igjen og igjen
men at filen selvfølgelig kan bli ganske massiv
så i ruter dot php hva de fleste
av dere har gjort er du har angitt navnet
av en kontroller klasse eller selv navnet på en fremgangsmåte
som bør bli kalt
så den samme ideen her selv om syntaksen er litt
forskjellige, så her oppe varsel
at jeg har tilsynelatende implementert mine egne node js
modul og en modul er bare en Java script fil som fester seg
til hovedsak en konvensjon at vi vil se på bare et øyeblikk.
Så anta at alle mine funksjonalitet for indeksen
og for søk har tilsynelatende blitt satt i denne katalogen
og nå er jeg ringer at hele modul eller pakke eller et bibliotek,
hva du vil å tenke på det som,
som ruter en variabel kalt ruter.
Så tilsynelatende i det ruter dot-indeksen er en metode som kalles
indeks og tilsynelatende er det annen metode som kalles søk
i denne ruter moduler eller biblioteket
og jeg bare ruting det bare slik at jeg ikke setter alt
av min anonyme kode innsiden av min app fil.
Så la oss gå inn i ruter varsel det er bare indeks dot js
og hvis jeg ser her inne er dette konvensjonen jeg mente tidligere
så dette er ganske vilkårlig men det er noden konvensjonen.
Hver gang du implementere din egen node js biblioteket,
aka modul du i hovedsak kan skrive noen Java-script kode du
ønsker i denne filen, vil det bli svært renslig sand eske
slik at eventuelle variabler deg velger vil ikke kollidere
med andres bibliotek, variabler eller metoder eller noe
sånn, men noe du ønsker å eksponere
til omverdenen ala en offentlig metode i Java-skript
eller php eller andre språk du må plop inne
av en global objekt som den forfatter av node kalt eksport.
Så ved å gjøre eksporten dot index jeg utsette til brukere
av denne modulen en metode som kalles indeks som er tilordnet denne funksjonen
så det er anonym på høyre side
men jeg er effektivt å gi den et navn på venstre side
og eksportere det til verden
slik at du kan ringe dot indeks eller dot søk.
Så for å være klar hvis jeg hadde også noe lignende funksjon foo
her inne som gjorde noe
den funksjonen ville absolutt være operativt,
det kunne bli kalt inn denne filen, men ingen
i omverdenen kald noensinne kaller foo
fordi det ikke er blitt eksportert ved hjelp av denne dot notasjon.
Så det er alt som skjer,
alt er pent nevne avstand for deg.
Så sluttresultatet hvis jeg gjør node av app og oppdater siden er
at hvis jeg nå søke
for bar ... funksjonelt disse programmene er de samme
men det er bare liksom et skritt mot en renere implementering,
sikkert når du starter skriver mer og mer kode
og det er alle disse er.
Tydeligvis ikke spesielt sofistikert eller kompleks
men i det vesentlige et utgangspunkt
for hva som vil være din første node js app.
Hva vi vil gjøre sannsynlig senere denne uken eller denne helgen
som du er ferdig opp på PHP-applikasjoner vi vil følge
opp med en ganske enkel søknad for laget å dykke
inn tilsvarende i ånden til det varme opp trening for php
som er basert på mid semester undersøkelsen,
folk fant nyttig går gjennom utøvelse
av å gjøre noe ganske enkelt
men ganske guidet før du faktisk takle noe mer
på egen hånd, så vi vil følger opp med at
og i det vesentlige vil bli grunnet en og en halv uke
fra nå overlapp litt med php bevisst.
Eventuelle spørsmål deretter på uttrykke, på socket io
eller forvirring rester fra mandag kanskje.
Greit så forhåpentligvis en av take-a-måter så langt er
at det for noen av disse ting sikkert mye mindre
overhead enn du kanskje er blitt brukt for.
Så la meg introdusere en siste idé,
så en veldig vanlig programmering paradigme
i Java-skript som er faktisk finnes i jQuery
i nyere versjoner så må kanskje faktisk sett denne teknikken
før, men det er også ganske vanlig i node js verden,
det er vanlig i Tims egen bokhylle bibliotek
så vi får se dette i et mer konkret eksempel
i et øyeblikk er en løsning å kode som dette,
Dette representerer koden vi så på mandag, så les fil
i denne sammenheng ikke er en ekte metode den er lik i ånden
å fs dot lese filen, men antar at dette er bare noen laget
opp metode som gjør noe lignende.
Så vi kjørte inn i noen saker på mandag generelt
så hva er liksom ... hvorfor er dette en glatt skråning,
Dette kaller tilbake paradigmet av programmering Java-skript
og ved å ringe tilbake paradigme Jeg mener bare denne teknikken
hvor du ikke returnerer verdier umiddelbart
fordi det kan blokkere server
fra å gjøre noe annet som er nyttig, du i stedet ringe tilbake
som buzzerne på Shake Shack når du er klar
å passere tilbake en respons som et argument.
Dette er en glatt skråning
hvor det veldig fort blir irriterende hvorfor?
Yeah.
>> [Hørbar seksjonen]
>> Ja, minimalt blir det slags uleselig retten
hvis du har alle disse samtale rygger og hvis du fester seg
til god stil det blir ganske massivt innrykk
over tid og tilfelle jeg påpeke dette eksempel hvis du liksom skumme
gjennom den er bare ment å åpne en JSON-fil og skrive den ut,
sånn er det, og ennå vi har noen 8 eller 10 linjer her
som allerede er sort av så stygt innrykket,
Vi har fått prøve fangst som er
hvis du ikke er kjent er en feilhåndtering teknikk
som lar deg prøve noe
og hvis det svikter så du ta det forhåpentligvis
uten hele programmet avslutte, men det er
så mye kompleksitet som du snill av å tenke gjennom dette
og Gud forby vi gjør et par andre asynkron metodekall,
tingen er allerede kommer til å være over her,
du kanskje tror dette er snill av en dum estetiske, men dette
fordi samtalen tilbake paradigme er så vanlig i det minste
i native node kode dette veldig fort bli kjedelig,
vanskelig å feilsøke, innrykk begynner å spille noen rolle, slik at du kan sortere
jage ting ned, er det bare ikke en veldig glad måte
av programmering.
Så hva folk har gjort
i ulike sammenheng node blant dem er å prøve å forenkle dette,
os for eksempel løfter er en annen måte å tenke på
om å skrive asynkron kode som visuelt viser noe
som versjon 1 til denne versjonen to.
Jeg hevder, og dette er igjen bare en slags blandet
mellom faktisk kode og pseudo kode, er dette representative
av hvordan du ville re-implementere at akkurat det samme,
åpne en JSON-fil, analysere den og skrive den ut
ut ved hjelp av noe kalt løfter
og nøkkelen syntaktisk detalj er
at det er en kjeding skjer her.
Legg merke til at den eneste semikolon
i hele ... faktisk godt la oss ... jeg ønsker ikke å villede.
Dette er strengt tatt ikke nødvendig men la oss være konsekvent,
legge merke til at semikolon som refererer til åpningen
av hele denne uttalelsen er hele veien ned hit.
Så mens jeg har formatert dette ... slags se
som tre uttalelser, tre uttalelser som du kan se
i Java eller andre språk som har prøve og fangst
og avvikshåndtering mer generelt.
Legg merke til at jeg bare kjede returverdien av hvert
av disse metoder sammen.
Så hva er det som skjer, lese filen Hvis dette er en fremgangsmåte som eksisterer,
tilsynelatende prøver å lese denne filen,
dot da så da er en veldig felles navn i verden
av løfter for metode som skal utføre
hvis den forrige tingen lyktes.
Så det er typen som suksessen handler, så da json dot tolk
vel json dot parse er bare en metode
i den globale JSON-bibliotek og det tilsynelatende overholder
i dette tilfellet løftet modell
så vi sier vi kan bare anta at samtalen denne fyren
og hvis han lykkes da ringe denne fyren og deretter
hvis det er faktisk Utfører bare trøste logge data
i spørsmålet.
Så hvor er feilen håndtering, merker jeg har liksom
av svært blindt trappet off dette hylle
og bare kalt dette metode og deretter denne metoden
uten noen gang å sjekke for problemer.
Vel hvor er de problem antagelig håndteres ... i disse
cache uttalelser så annerledes bibliotekene bruker forskjellige
konvensjoner, men i dette tilfelle så er liksom
av suksessen handler, cache er liksom den feilbehandleren
og fordi vi har ikke brutt denne kjeden vi bare fortsette å bruke
dot notasjon for å koble sammen den opprinnelige metoden påkalling
av lese-fil og funksjonen påkalling eventuelle feil sorterings
boble sin måte gjennom kjeden
til de er faktisk håndteres som er veien renere enn å prøve
å forholde seg til det hver jævla steg på veien
slik at koden veldig raskt blir uvirkelig data.
I dette tilfellet er vi hevde at vi prøver
å fange det som kalles en syntaksfeil er det i hovedsak en
underklasse av en mer generell feil, og hvis det skjer krav
at det er ugyldig JSON ellers hvis det er en mer generisk feil
at vi ikke var ventet bare mer generelt si kan ikke
lese filen.
Nå er dette bare ment å være representativ kode
men hvis du har programmert i rå Java-skript eller i Java
eller andre språk dette er prosedyrekode i hovedsak,
Dette er en mer tradisjon prøve fangst uttalelse
og det er den estetiske og funksjonaliteten som lover
eller prøver å gi deg der du kan tenke på det
som bare skriver prøve og deretter fange og deretter ta for ikke å ha
å bekymre deg i hvert eneste mulige poeng
hvor en feil kan håndtere ... skje,
du kan håndtere det hele på ende etter behov av en liten blokk
av kode, og du kan til og med skille mellom feil
som du kan i dette tilfellet her.
Så nomenklaturen som du vil se i litteraturen kanskje
som Tim presenterer noen av denne ting også er
som ideelt du ønsker lover å løse
og løse en Promise midler som endelig tilbake så å si
men ikke i en tradisjonell måte av verdi, slik at det enten er vellykket
for ikke egentlig.
Greit noen spørsmål da, det er ikke ment å være tilstrekkelig
for eksponering for løfter men bare en mental modell
for koden du vil begynne å se.