>> Okay, så er vi tilbage, et par mål for i dag,
vi vil samle op, hvor vi slap sidste gang,
minde om, at vi var gøre denne arv
af server-relaterede programmer super enkel, men ved hjælp node JS
og derefter også senest hjælp udtrykkelig præg AS
og hvad der blev givet udtryk for JS den analoge i PHP verden.
Så express er mere ... tæt,
så udtrykkeligt er hovedsagelig MBC rammer, der er temmelig
populære i knude js verden,
Bogreol, som vi vil se dag via Tim er en analog
af talende, som er en ORM på et objekt relation mapper
der rent faktisk gør det nemmere for at undgå lavt niveau SQL-kode
og faktisk udtrykker forholdet mellem forskellige objekter.
Så en af ​​de fedeste tingene ærligt
om node js er lige hvordan nemt det egner sig
til at gøre real time applikationer, ting som chat-servere
eller messaging-servere, noget, som du fyre bruger nu
som Google ... G-chat eller Google tilholdssted
eller opdateringer Facebook-status eller endda Twitter, hvis du er
på deres webside alt er en slags real tid
eller giver dig illusion af tidstro
og det er faktisk en smerte i halsen at gøre med noget
som PHP og min SQL ret hvad gjorde vi foreslår
på mandag vil være midlet
som du kan implementere illusion af tidstro adfærd
med en chat-server i PHP, hvad ville du gøre?
Alice sender en besked, hits indtaste hvor går det hen?
Ja.
>> [Lydløs sektion]
>> Into en database og derefter hvad betyder Bob browser har
at gøre for rent faktisk at se hvad Alice har sagt, ikke?
>> [Lydløs sektion]
>> Hold polling af basen, højre, så en ajax anmodning har
at affyre hvert sekund, hvert par sekunder eller vi talte kort
men ikke se på et eksempel på noget, der hedder lang polling,
nogen huske, hvordan
denne mekanisme ... om et højt niveau virker?
>> [Lydløs sektion]
>> Præcis, ja så en browser stadig gør en ajax anmodning
til en server, til en foo prik php men foo dot php bare synes
til at hænge, ​​det væsentlige sidder i en while-løkke for så mange
som 30 sekunder typisk og kun én gang foo dot php fil
indser åh der er en ny række
i databasen gør det faktisk reagere
med en http reagere.
Så du tror, ​​at dette kan ellers hænge serveren
og det til en vis grad
men det betyder, at der er en masse mindre overhead
fordi du ikke har brug for en ny tcp forbindelse, en ny htp forbindelse
faktisk anmode data fra serveren.
Men node js kommer med en meget populær bibliotek kaldet sokkel
prik io som du kunne aldrig brugt er bygget oven
af en teknologi kaldet web socket der er til stede
i de mest moderne browsere og hvad socket io gør, er giver dig
at skabe væsentlige en vedvarende forbindelse
mellem browser og server der er meget lave overhead
Så du behøver ikke nødvendigvis har de samme skalering spørgsmål
at du måske, hvis du er konstant ramme serveren
i verden af ​​PHP og min SQL og lignende.
Selv for ældre browsere
der ikke understøtter web socket dette bibliotek socket prik io kan
falde tilbage på blinker gennemførelse af stikkontakter
og stikkontakter er et netværk ting fra CS143 for eksempel.
Eller det kan endda falde tilbage på lang polling sig selv, så de gennemfører
samme slags arbejde
rundt for rent faktisk at opretholde illusionen af ​​denne forbindelse.
Så bøsning [uhørligt] io og dette er i form
af et java script bibliotek, væsentligst, hvis du bruger det
i form af en knude js program, du ikke kun installere
det som en pakke ved hjælp af noget ligesom NPM, som vi brugte på mandag
og eller du også omfatte en strimler tag i din html-fil
der siger bruge klientsiden biblioteket.
Så der er to halvdele til det, og hvad vi har gjort her
i fjerde iteration af mandagens sekvens
eksempler er følgende.
Så denne fil struktur er minder om en meget fælles sæt
op til udtrykte js og Heldigvis er det måde enklere
end lervo [fonetisk] var, husker, når du indstiller
op lervo du fik en enorm grim dump af en hel masse filer,
sælger mapper, lib og meget tung vægt i forhold til dette.
Nu i retfærdighed vi har frataget væk ting, der er temmelig meget en
distraktion men alle saftige ting er virkelig
i node moduler.
Blot for at give dig en smag, hvis vi ser
på node-moduler der er to moduler eller biblioteker
at jeg har downloadet, dette ville være det samme
af sælgeren bibliotek, en kaldes udtrykkelig som er
som larevel men i knudepunkt
og sokkel IO en jeg lige har nævnt.
Så dem, der findes, så vi kan gøre følgende, hvis jeg åbner
op lad os sige indeks dot html, lad os først se på html,
dette kommer til at komponere denne krop, min super,
super enkel chat-server.
Så der er tilsyneladende en ul med en unik idé af meddelelser
og det er her en li ad gangen,
alle de chatbeskeder er vil blive vist mellem Alice
og Bob og så er der en simple form med et tekstfelt
og en send-knap hvorved Alice
eller Bob kan faktisk besked hinanden.
Så nettoeffekten hvis Jeg køre dette program
ved at gøre node plads app prik js, hvis jeg trækker op et par
af browservinduer, er, at Alice kunne være på den rigtige,
Bob kan være på venstre blot
at være klart, at der er ingen magi her har jeg fået et vindue
i inkognito så der er ingen deling af cookies eller noget
som dette, er disse to forskellige brugere.
Jeg skulle være i stand til at have Alice sige goddag Bob, klik indsende
og nu kan du se på den venstre at Alices besked blev sendt
og næsten øjeblikkeligt til højre.
Ingen polling tilsyneladende involveret, Bob fik den samme besked.
Nu Bob siger sige hej Alice du se den modsatte effekt.
Så hvad der virkelig foregår, hvordan meget kode har vi brug for at skrive
at gennemføre dette en chat-server
som du nu kan ekstrapolere mentalt, at alle
i dette rum, hvis dette var ikke på min [uhørligt]
men på foo dot com vi kunne alle begynde at chatte øjeblikkeligt
med hinanden.
Så hvad er involveret, og inden jeg rydde denne skærm er dette
er bare socket io være en lidt støjende, det er bare udskrivning
ud debugging information til skærmen,
Der er virkelig ikke noget ellers foregår der.
Så lad mig åbne app dot js, så som før vi har fået et par ting
på toppen af ​​filen.
En flok af krav, så disse er ligesom biblioteker
eller skærpe spor eller kræve onces uanset mental model du
ønsker at have og bare at opsummere FS bruges
for hvad slags funktionalitet?
Så filer system så læse filer potentielt og den slags
og jeg bruger dette i en placere som du vil se,
udtrykkelig er naturligvis dette ramme, som vi bruger,
det er strengt ikke nødvendigt vi kunne
ligesom på mandag totalt skabe vores egen http server fra bunden
ved at gøre skabe server og alle af den slags kode fra før
men som vi skal se det gør tingene lidt nemmere
fordi alt hvad jeg skal gøre, er at on line 3 her instantiere
og udtrykke objekt, ringer jeg det app, noget vilkårligt,
Jeg vil så fortælle, at appen kan lytte på vilkårligt port 1337,
der kunne 80 af konvention
og så endelig har jeg en ny line i dag, som siger
at kræve, at stikket io-bibliotek og derefter
af denne kæde tilgang ville denne dot operatør jeg bare
kalde en lektie lytte, der er væsentlige fortæller soklen
io biblioteket også lytte til den samme server
eller web stikforbindelser.
Så nu, hvad, så hvad er dette laver, disse fire linjer
af kode, der skal ser minder om larevel,
hvad betyder dette repræsenterer?
>> [Lydløs sektion]
>> Dette er en ... rute, bare en rute, så i app dot js,
aka server dot js afhængigt på, hvad folk ønsker at kalde det
i deres egne applikationer du har en konvention
gøre at definere dine ruter,
app dot get betyder, når du får en get anmodning om at gå
til for bogstaveligt skråstreg gå videre og kalder denne anonyme funktion
og den anonyme funktion i dette tilfælde tager af kravet
eller anmodning og et svar, potentielt nogle andre ting
men minimalt disse to.
Anmodningen giver dig adgang til ting som http parametre
og overskrifter og andre saftige ting
og derefter reaktion er den mekanisme
, som du kan svare til brugeren.
Så dette er super enkel selv selvom vi ikke se helt
samme kode sidste gang, jeg ved hjælp af filsystemet moduler,
skabe read stream metode som i det væsentlige gør det,
skabe en skrivebeskyttet strøm, der betyder i realiteten begynde slurping
op bytes fra indeks prik html så effektivt som du kan
uden nødvendigvis at vente indtil din læse hele filen
og som du gør, at rør dem bogstaveligt
i den lodrette bjælke fornuft hvis du har det godt
med linux kommandolinjen
rør det til svar objekt.
Så der var to eksempler relateret til streams på mandag
vi kun set på én, men er du velkommen til at kigge tilbage
ved stream o og strømmen 1.
Stream 1 ... 0 gjorde noget lignende dette,
stream 1 gjorde noget næsten præcis ligesom dette,
dette er blot en slick en liner sige slags
af slubre noget i herovre og derefter begynde at sende det her
på samme tid uden laver en masse enige
og derefter en massiv ret,
denne fremgangsmåde er generelt mere effektive.
Så det er slags gamle ting selv om det var nyt på mandag,
dette er alt det tager at gennemføre en chat-server
med node js og mere specifikt socket dot io.
Så hvordan gør dette arbejde, lad mig flytte det lidt op,
så io er bare en variabel der refererer
til modulet vi krævede tidligere,
dot socket er blot en ejendom inde i det
der giver mig sokkel relaterede funktioner
den er en almindelig metode, der vedrører hvad generelle begreb?
En begivenhed så videre aka lytte nogle biblioteker det betyder bare
hørte denne begivenhed som kaldes forbindelse
og nu ved du det kun fra ser på dokumentation,
hvem skrev biblioteket defineret en begivenhed kaldet
forbindelse, som gør hvad din ville tænke
da Alice eller Bob forbinder.
Gå videre og kalder det anonym funktion take passerer
i et argument klienten som tilsyneladende er en slags
objekt, der repræsenterer Alices forbindelse
eller Bobs forbindelse eller Charlie eller nogen anden
og nu gør vi følgende.
Vi fortæller klienten efter han eller hun er tilsluttet
at lytte specifikt
efter en besked, der er helt vilkårligt kaldet besked
kolon klient.
Det er noget, Tim og Jeg kom op med, kunne det være foo
eller bar, det er bare nogle entydig streng, som vi havde brug for
at træffe beslutning om som udviklerne.
Når Alice eller Bob hører
denne begivenhed denne anonyme Funktionen skal kaldes
og data, den indholdet af Alice
eller Bobs budskab bør være gået ind i denne hændelseshandler
og nu, hvad skulle det klient gøre godt du kan slags
af læse dette forholdsvis intuitivt kunden bør udsendes,
også kendt som udsender en besked kaldet metode server
derved at denne besked kommer fra serveren ikke
fra browseren, og hvad ville dette budskab være,
Det er tilsyneladende nyttelasten fra hvad kom fra kunderne
og vi vil bare vilkårligt kalder det budskab.
Så en masse af dette er vilkårlig
gennem fornuftig navngivning konventioner, Tim og jeg kom
op med, for det meste Tim og så vi blot skaber i sidste ende en
chat server, der gør hvad, når Alice sender en besked
og hits indtaste hvilken begivenhed tilsyneladende bliver fyret,
bare for at opsummere.
Alice typer en besked, hits indtaste, er beskeden klient fyret,
denne kode hører det, og nu serveren sender hvad
hvad er det endelige resultat af dette virkelig?
Alice sender beskeden nu serveren genudsender det
effektivt til alle undtagen til Alice, hvorfor alle undtagen
Alice, hvis du bare kigge
ved dokumentation klient dot broadcast dot indrømme,
bogstaveligt gør det, sender beskeden
til alle undtagen kunde, der har sendt dig
at nyeste besked.
Så det er derfor kun dig se det én gang på hver side,
du ikke kan se både Alice og Bob få Alices budskab.
Så det er det, dette er et formidle agent
hvis du vil, der er bare at tage i meddelelser
og genudsendelse dem ud
og det er bemærkelsesværdigt skalerbar Jeg mener selv
med en super enkel server og et par linjer
kode, du kunne sikkert håndtere hundredvis om ikke tusindvis
samtidige enkle budskaber frem og tilbage på denne måde
og bare forestille kompleksiteten nu for at gøre dette i PHD
eller Larevel eller min SQL og hvor meget kode, du vil have
at skrive for at rent faktisk at nå det.
Nu i retfærdighed dette er ikke persistent ret
hvis serveren går ned vi mister hele historien
så det er ikke helt en perfekt oversættelse, men det er
det ligetil.
Lad os se på Java script kode, vi springes over tidligere,
dette er Alice og Bobs klient,
den webside, de bruger nu lad os se op her et øjeblik.
Der er lidt mere kode
men det er temmelig meget bare jQuery her så varsel
at i den webside at jeg trak
op et øjeblik siden vi omfatter jQuery bibliotek,
soklen io bibliotek og som en sidebemærkning mærke forskellen
her, skråstreg skråstreg på begyndelsen af ​​en sti
ligesom det betyder, hvad der præcist,
hvor er jQuery prik js om, hvad server?
Ja.
>> [Lydløs sektion]
>> Det er på internettet ja bogstaveligt kaldet kode prik jQuery
dot com så hvorfor slash, skråstreg, hvorfor ikke bare en skråstreg,
hvor er http eller tyktarmen, hvad betyder det i almindelighed
hvis du skråstreg skråstreg på begyndelsen af ​​url?
Det er faktisk nyttigt.
Okay så, hvad der er naturligvis mangler http nu, hvis vi årsag
gennem denne logisk typisk behøver du ikke
at nævne nogle servere navne til højre
ligesom hvis bare bruge skråstreg jQuery prik js hvad antages
af browseren?
At filen er på samme server, så fortsætter den slags
af logik, hvis du ikke fortælle det, hvilken protokol, hvad der er
browser antage, samme protokol så hvis du nogensinde har besøgt hjemmesider
der giver dig en fejl sammen linjerne i usikkert indhold
på denne side er det fordi nogen har hårdt kodet en http
kolon skråstreg skråstreg URL til en billede eller en Java script fil
eller CSS-fil, noget i kildekoden på siden
men selve siden i browsere URL er http s.
Så dette er blot den fancy lille vej
at sige jeg ikke kender hvad protokollen er
at slutbrugerne vil bruge
men bare sørg for at det matches, således at krom
og andre browsere ikke råbe på brugeren.
Den eneste fangst er den jQuery folk havde bedre indstillet
up HTTPS på deres server.
Så de er faktisk notering på 443.
Okay i mellemtiden dette en her det er lidt
vildledende skråstreg socket io tyder
at der er en mappe kaldet socket dot io på min server
men der er ikke hvis vi stikke
omkring der er node-modulets mappe
men der er intet offentligheden om dette,
når vi konfigurerede socket io til at lytte på de samme havne,
1337 det væsentlige, at biblioteket at en anden skrev, er at gå
at slags indsætte noget kode i node js miljø
og bare lytte til denne vej.
At biblioteket har netop konfigureret en rute til dette,
det er ikke en rigtig mappe.
Det ville være i en standard placering.
Okay så nu interessant del,
således at når dokumentet er klar som angivet
af denne jQuery konstruere, først jeg har tænkt mig at gå videre
og oprette forbindelse til en stikkontakt,
hvad socket bare ved ... holde det simpel Jeg har tænkt mig at forbinde
til skråstreg, der er hvor brugeren er,
Jeg har holdt eksempel simple vi bare at forbinde
til nøjagtig samme webadresse, som den brugeren har besøgt så jeg har tænkt mig
at gøre følgende, vil jeg fortælle Alices eller Bob browser
at lytte til besked fra serveren.
Igen kunne have været foo
eller bar helst du høre en besked
fra serveren kalder det data og derefter gøre dette jQuery kode
som jeg gætte de fleste, hvis ikke alle er fortrolige
med disse dage, men hovedsagelig en pin til listeelement
til den eksisterende UL som blev kaldt beskeder
der bogstaveligt talt siger uanset nyttelasten
af chatbesked efterfulgt af en bindestreg, efterfulgt af modtager,
efterfulgt af et mellemrum og derefter en opdatering tid, og det er derfor
for at være klar, hvis vi går tilbage
til dette får du disse ekstra kugler igen og igen
og igen med dato tider.
I mellemtiden, hvis vi ser hernede vi bare
at håndtere formularafsendelsen så det var den modtagende
af en instant message, her er afsendelse og dette er en slags
af relateret til node js, lytte de formularer indsende begivenhed.
Når det sker forhindre standard dette betyder bare ikke sende det
til serveren i den sædvanlige måde, genindlæse hele siden,
vi ønsker at gøre det hele via ajax.
Her er blot nogle jQuery-koder
til rent faktisk at få input hvis type er beskeden,
hvis navn er beskeden gå videre
og få den værdi så skal du gå videre
og hvis du rent faktisk har en besked, hvis Alice og Bob
eller Bob faktisk typer nogle none 0 Antal tastetryk udsender
på soklen en meddelelse, en såkaldt besked klient med denne nyttelast
og derefter ned her er det hvad gør det grønne i modsætning
til rød, vi simpelthen output apparat side [uhørligt].
Så det er det, men alle Dette er kun sat op,
den virkelige nye ting, jeg ville argumentere er blot disse tre
eller fem linjer kode her og den slags hints ved magten
node js og med det dette bibliotek.
Så lad os tage en hurtig se på udtrykkelige dot js,
så hvad jeg har tænkt mig at prøve at gøre i de resterende par
minutter her er oprettet en nogle idé, et par teknikker
der vil derefter tage et par minutters pause, vil Tim oprettet
og så vil vi dykke dybere
til en mere interessant udtrykke ansøgning og også
til boghylden biblioteket Tim faktisk skrev
for open source-fællesskabet
der giver os veltalende lys funktionalitet med min SQL
og transaktioner og andre sådanne funktioner og han vil også dykke
i lidt dybere til Java script selv,
hvordan dens formål eller ikke-klasse Modellen fungerer ellers kender
som en prototype model nogle mere på, at komme.
Så lad os tage et kig på to sidste applikationer her, server fem
og server 6, som alle er slags ligner i ånden,
disse ikke chat-servere men de bruger express.
Så lad os tage et kig på hvad det faktisk gør,
Jeg har tænkt mig at gå videre og åben ... Jeg har tænkt mig at køre denne app
med node app js, vil jeg gå tilbage til min browser og genindlæse
og dette er tilsyneladende al denne server gør,
Det er en super enkel server Det er tilsyneladende en søgning
motor, så hvis jeg skriver i foo og indsende, ingen søgeresultater
for foo, havde jeg ikke komme rundt til gennemførelse af den sofistikerede
bagenden, alt det går
at gøre, er ekko uanset hvad du skriver ingen resultater for foo,
ingen resultater for bar så hvordan gør vi det
fordi der er en par stykker, den ene,
Der er helt klart nogle indgange er forsynet
til serveren Larevel selvfølgelig, men node js nu
så vi er nødt til at en eller anden måde får på denne parameter Q,
vi helt klart gøre nogle slags visning her,
vi gør en visning, så måske er der en mulighed
efter skabeloner eller variabel interprelation [fonetisk]
så lad os tage et kig på følgende.
I app js for denne særlige server det er alt, vi har.
Én kræver vi udtrykke selv to stien modul
der bare gør nogle nyttige ting
ligesom sammenføjning strings sammen og så videre for mig,
Jeg lytter på port 1337 og nu er det nye, så det viser
ud af, at express ligesom Larevel understøtter forskellige plug ins
og teknologier samt andre ting, og et
af de teknologier, som du kan tilslutte er en visning motor
hvilket betyder blot, hvad templating motor vil du bruge,
Larevel havde det egne ting, men du kan tilslutte
i forskellige ting, forskellige fersken P rammer har
forskellige måder at templating, EJS er bare en almindelig
og en temmelig simpel motor der bare lader dig gøre ting
ligesom de krøllede parenteser, som du havde i Larevels syntaks
for at substituere variabler,
det er lidt anderledes syntaktisk er alt.
Så nu er der denne ting kaldet midterste ware så du kan se
i dit eget hold node projekt til en midterste ware er bare lidt kode
eller biblioteker, som du injicerer
i [uhørlig] respons livscyklus af en ansøgning,
med andre ord disse to linjer fortæller udtrykkelig
at gøre nogle ekstra arbejde mellem den tid, det får en anmodning
og mellem den tid, det sender denne anmodning til din egen rute,
din kode, som du har skrevet.
Så i denne særlige linje her bruge udtrykke prik statisk og alle
af denne kompleksitet det bare betyder, at hvis du ser en anmodning
der kommer i til en statisk fil som foo dot JIF eller foo dot css
eller foo prik js så ikke en dynamisk genererede rute,
gå videre og antage den lever i den offentlige undermappe,
det er alt der er at gøre.
Det er lidt ligesom kortlægning i Larevel, alt til din web
eller din offentlige mappe snarere i Larevel.
Denne næste linie er blot siger jeg vil bruge ruter
Jeg ønsker at bruge ting ligesom app dot få
som vi så for et øjeblik siden, og vi vil se på bare et sekund nu.
Så app prik få midler lyt efter denne rute,
slash når du får det kalder dette anonym funktion, der tager
i en anmodning og en respons og nu bare
Ligesom Larevel du har en måde gengive en skabelon,
svar dot gengive, citere unquote indeks,
render er en skabelon kaldet indeks,
det er det, så lad os suspendere at tråd for bare et øjeblik udseende
på indholdet af den visninger biblioteket
og bemærke dette også er super enkel for nu,
der er index dot EJS og søg dot EJS,
Jeg ønsker naturligvis den første
fordi det er den ene jeg lige træt til at gøre, og vi vil se
i udsigt indeks dot EJS mest faktisk helt html
i øjeblikket, er der faktisk ingen templating foregår.
Så jeg teknisk set ikke engang behøver at kalde det EJS,
Jeg har ikke brug for denne funktionalitet men jeg holdt det uniform,
så det er det, det er, hvad giver mig at super simpel form.
Så der er kun én anden rute, hvis vi ser hernede, jeg har sagt
at det er det håndterer få slash søgning, så den faktiske slags
Google ligesom handleren for danne indsendelse, når du får
at stien kalder dette anonym funktion
og gøre skabelonen kaldet søgning
og hvad der er den anden argument formentlig betyde.
Det ligner en JSON-objekt af sorterer eller Java script objekt.
Hvad er den rolle, som andet argument formentlig?
>> [Lydløs sektion]
>> Den aktuelle forespørgsel, at brugeren har indtastet tilsyneladende lever
i anmodning dot forespørgsel, forespørgsel henvises til alt
efter spørgsmålstegnet prik q som er det vilkårligt navn
at jeg gav det ligesom Google
og i mellemtiden q kolon er bare sige passere ind i skabelonen,
søg dot EJS, en nøgle af q og en værdi
uanset q faktiske værdi var.
Så lader en fil af interesse for synspunkter,
søg dot EJS jeg holdt denne super enkel også,
Det er for det meste bare html undtagen for en noget bemærkelsesværdig linje
der er denne syntaks her som ligner en flok
forskellige templating motorer dette betyder bare plug
i værdien af ​​q og gøre det fed.
Så der er ingen egentlige søgning funktionalitet, men det gør slags
af forslag til, hvordan du ville strukturere et skelet
af en ansøgning som.
I mellemtiden ... faktisk jeg kan vise en anden ting,
bemærke, at jeg har nogle html op her for CSS-filer
og Java script-filer, der er ikke noget i disse filer
i øjeblikket, men bemærker, at der er en offentlig mappe
som jeg sagde tidligere til statiske filer, så hvis jeg går
derinde er der min css mappe,
hvis jeg går derind der stilarter dot css
og der er ingen indhold der
men det er hvordan du ville har offentlige tilgængelige filer.
Okay lad os tage et kig på en anden variant her
og så vil vi introducere en idé og pause.
Så dette er server 6 det sidste, så det er næsten identiske, bortset fra
for de to nederste linjer der ligner dette.
Så faktisk er der en tredje linje, der er anderledes
men jeg har gemt ... så lad mig tilbage lidt op, så er der nogen ønsker
at foreslå, hvad der foregår på her i lægmandssprog
eller tekniske termer Hvad er anderledes ved denne version
med hensyn til de linjer i de øverste noder.
Hvad har jeg formentlig gjort her, og hvorfor?
Ja, Sharon.
>> [Lydløs sektion]
>> Ja det ser ud som jeg har bevæget indeksere og søge
så separat direkte eller noget, Jeg har indregnet dem ud
og det er så meget som i Larevel du kan sætte alle
af din controller logik indersiden af ​​ruter dot php
med anonyme funktioner igen og igen og igen
men filen naturligvis kan få temmelig massiv
så i ruter dot php, hvad de fleste
af jer har gjort er du har angivet navnet
en controller klasse eller selv navnet på en metode
der bør bliver kaldt
så den samme idé her selv selvom syntaksen er lidt
anderledes så heroppe varsel
at jeg har åbenbart implementeret mine egne node js
modul og et modul er bare en Java script-fil, der klæber
til i det væsentlige en konvention at vi vil se på bare et øjeblik.
Så antage, at alle mine funktionalitet til indeks
og for søgning har tilsyneladende lagt i denne mappe
og nu ringer jeg, at hele modul eller pakke eller et bibliotek,
hvad du vil at tænke på det som,
som ruter en variabel kaldet ruter.
Så tilsyneladende derinde ruter dot indeks er en metode, der kaldes
indeks og tilsyneladende er der en anden metode kaldet søgning
i denne ruter moduler eller bibliotek
og jeg er bare routing det bare så jeg ikke lægge alle
min anonyme kode indersiden af ​​min app fil.
Så lad os gå ind i ruterne varsel der er bare indeks dot js
og hvis jeg ser på her er det konventionen jeg mente tidligere
så det er temmelig vilkårligt men det er den node konventionen.
Hver gang du gennemfører din egen node js bibliotek,
aka modul du hovedsageligt kan skrive nogen Java-script kode, du
ønsker i denne fil, vil det være meget rent sand boxed
således at eventuelle variabler, du vælger, vil ikke kollidere
med nogen andens bibliotek, variabler eller metoder eller noget
ligesom det, men noget du ønsker at udsætte
til omverdenen ala en offentlig metode i Java-script
eller php eller andre sprog du er nødt til at plop inde
en global objekt, forfatter af node kaldet eksport.
Så ved at gøre eksporten dot indeks jeg udsætte til brugerne
af dette modul en metode kaldet indeks, der knytter til denne funktion
så det er anonym på højre side
men jeg reelt at give det et navn på venstre side
og eksportere det til verden
så du kan ringe dot indeks eller dot søgning.
Så for at være klar, hvis jeg havde også noget lignende funktion foo
i her, der gjorde noget
denne funktion ville absolut være operationelt,
Det kunne kaldes i denne fil, men ingen
i omverdenen kold nogensinde kalder foo
fordi det ikke er blevet eksporteret ved hjælp af denne dot notation.
Så det er alt, hvad der foregår,
alt er pænt navngive afstand til dig.
Så slutresultatet, hvis jeg gør node af app og genindlæse siden er
at hvis jeg nu søge
til bar ... funktionelt disse apps er de samme
men det er bare en slags trin mod en renere gennemførelsen
sikkert, når du starter skriver mere og mere kode
og det er alle disse er.
Naturligvis ikke særligt sofistikerede eller kompleks
men det væsentlige et udgangspunkt
for, hvad der vil være din første node js app.
Hvad vi vil gøre sandsynligvis senere denne uge eller i denne weekend
som du er efterbehandling op på PHP-applikationer vil vi følge
op med en temmelig simpel ansøgning for holdet at dykke
i samme ånd til den varme op øvelse for php
som er baseret på midten undersøgelse semester,
folk fandt nyttige går gennem motion
for at gøre noget forholdsvis enkel
men temmelig styret før du faktisk tackle noget mere
på din egen, så vi vil følge op med at
og i det væsentlige vil være skyldes en uge og et halvt
fra nu overlapper lidt med php bevidst.
Eventuelle spørgsmål, så på udtrykke, om socket io
eller forvirring resterende fra mandag måske.
Okay så forhåbentlig en af den take-a-vis hidtil er
at der er for nogle af disse ting sikkert en masse mindre
overliggende end du måske er blevet vant til.
Så lad mig præsentere en sidste idé,
så en meget almindelig programmering paradigme
i Java script, der er faktisk er til stede i jQuery
i de seneste versioner, så måske har faktisk set denne teknik
før, men det er også helt almindelig i node js verden,
det er almindeligt i Tims egen Bookshelf bibliotek
så vi vil revidere denne i et mere konkret eksempel
i et øjeblik er en løsning at kode som denne,
dette repræsenterer kode vi så på mandag, så læse filen
i denne sammenhæng er ikke en rigtig metode det ligner i ånden
til FS dot læse filen, men antager at dette er blot nogle lavet
up-metoden, der gør noget lignende.
Så vi løb ind i et par spørgsmål på mandag i almindelighed
så hvad er en slags ... hvorfor er dette en glidebane,
denne ringe tilbage paradigme af programmering Java script
og ved ringe tilbage paradigme Jeg bare betyde denne teknik
hvor du ikke vender tilbage værdier øjeblikkeligt
fordi det måske blokere serveren
fra at gøre noget andet, der er nyttigt, du i stedet ringe tilbage
ligesom summere hos Shake Shack når du er klar
at passere tilbage et svar som et argument.
Det er en glidebane
hvor det meget hurtigt bliver irriterende hvorfor?
Ja.
>> [Lydløs sektion]
>> Ja, minimalt bliver det slags ulæselige ret
hvis du har alle disse opkald rygge og hvis du klæber
til god stil det er at få temmelig massivt indrykket
over tid og tilfælde jeg påpege dette Hvis du f.eks slags skimme
igennem det simpelthen beregnet til åbne en JSON-fil og udskrive det,
ligesom det er det, og alligevel er vi har nogle 8 eller 10 linjer her
som allerede slags af nastily indrykket,
vi har fået try fangst, der er
Hvis du ikke kender, er en fejlhåndtering teknik
der giver dig mulighed for at prøve noget
og hvis det fejler, så du fange det forhåbentlig
uden hele dit program afslutning, men der er
så meget kompleksitet ligesom du slags af nødt til at tænke det igennem
og Gud forbyde vi gøre et par anden asynkron metode kræver,
de ting er allerede kommer til at være her over,
du måske tror, ​​det er lidt af en fjollet æstetisk, men dette
fordi opkaldet tilbage paradigme er så almindeligt i det mindste
i native node kode dette meget hurtigt blive trættende,
svært at debug, indrykningen begynder at betyde noget, så du kan sortere
af chase ting ned, er det bare ikke en meget glad måde
af programmering.
Så hvad folk har gjort
i forskellige sammenhæng node blandt dem er at forsøge at forenkle denne,
os for eksempel løfter er en anden måde at tænke
om at skrive asynkron kode der visuelt viser noget
ligesom version 1 i denne version 2.
Jeg hævder, og det er igen bare slags blandet
mellem den faktiske kode og pseudo kode Dette repræsenterer
af hvordan du ville på ny at gennemføre at præcis de samme ting,
åbne en JSON-fil, parse den og udskrive den
ved hjælp af noget kaldet løfter
og nøglen syntaktiske detalje er
at der er en kæde foregår her.
Bemærk, at den eneste semikolon
i det hele ... faktisk godt Lad os ... Jeg ønsker ikke at vildlede.
Det er ikke strengt nødvendigt men lad os være konsekvente,
bemærke, at semikolon der refererer til åbningen
af hele denne erklæring er hele vejen herned.
Så mens jeg har formateret dette ... sådan ser
som tre udsagn, tre udsagn, som du kan se
i Java eller andre sprog der har prøve og fange
og exception handling mere generelt.
Bemærk, at jeg bare kæde returværdien af ​​hver
af disse metoder sammen.
Så hvad der foregår, læse filen hvis dette er en metode, der findes,
tilsyneladende forsøger at læse denne fil,
dot så så så er et meget fælles navn givet i verden
af løfter til metode, der skal udføre
hvis den tidligere ting lykkedes.
Så det er lidt ligesom succes handleren, ja så JSON dot parse,
godt JSON-dot parse er blot en metode
i den globale JSON-bibliotek og det tilsyneladende klæber
i dette tilfælde løfte model
så vi siger, vi kan bare antage, at opkaldet denne fyr
og hvis det lykkes så kalde denne fyr og derefter
hvis der er faktisk Udfører blot trøste logge data
pågældende.
Så hvor er fejlen håndtering, bemærker jeg sortere
meget blindt trådte off denne afsats
og blot kaldes dette fremgangsmåde og så er denne metode
uden nogensinde at kontrollere for problemer.
Nå hvor er de problem formentlig håndteres ... i disse
cache udsagn så forskellige biblioteker bruger forskellige
konventioner, men i dette tilfældet, så er sortering
af succesen handleren, cache er en slags fejlbehandleren
og fordi vi har ikke brudt denne kæde vi bare fortsætte med at bruge
dot notation at forbinde den oprindelige metodeaktiveringen
af aflæste fil og funktionen Invocation eventuelle fejl sortere
boble deres måde gennem kæden
indtil de rent faktisk er håndteret som er langt renere end at forsøge
at beskæftige sig med det hver pokkers skridt på vejen
så din kode meget bliver hurtigt uvirkelige data.
I dette tilfælde er vi hævder, at vi forsøger
at fange hvad der kaldes en syntaksfejl det er hovedsagelig et
underklasse af en mere generisk fejl, og hvis det sker fordring
at det er ugyldig JSON ellers hvis det er en mere generisk fejl
at vi ikke forventer bare mere generelt siger, kan ikke
læse filen.
Nu er det blot ment at være repræsentative kode
men hvis du har programmeret i rå Java script eller i Java
eller andre sprog dette er retsplejelov væsentlige,
dette er en mere tradition prøv fangst erklæring
og det er den æstetiske og funktionalitet, der lover
eller forsøger at give dig hvorved du kan tænke på det
så bare skrive prøve og derefter fange og derefter fange ikke at have
at bekymre sig på alle enkelt mulig point
hvor en fejl måske håndtag ... ske,
du kan håndtere det hele på ender efter behov af en lille blok
kode, og du kan endda skelne mellem fejl
som du kan i dette tilfælde her.
Så den nomenklatur, som du vil se i litteraturen måske
som Tim præsenterer nogle af denne ting også er
at ideelt set, du ønsker løfter om at løse
og løse et løfte middel der endelig tilbage så at sige
men ikke på en traditionel måde værdi, så det enten lykkes
for ikke væsentlige.
Okay nogen spørgsmål så, det har ikke betydet at være tilstrækkelig
for eksponering for løfter men bare en mental model
for den kode, du vil begynde at se.