>> Sawa.
Hivyo cliffhanger, ni nini ni node.js kama unajua leo?
Kitu chochote? Yeah?
>> Ilikuwa ni kama mfumo wa kuandika JavaScript
maombi kwa upana -
>> OK, kwamba kazi.
>> - Mimi najua kama matumizi ya kawaida kama -
au kitu unaweza kufanya ni kama -
[Inaudible Remark]
>> OK nzuri.
Yeah, hivyo ni mfumo.
Ni injini na ambayo unaweza nitafanya JavaScript code
server tovuti.
Hii ina maana rahisi ya mambo
kama kuandika mstari amri script si katika chatu au Bash
au Ruby au PHP, lakini tu katika JavaScript yenyewe
na utekelezaji yake katika blinking amri ya haraka.
Au unaweza kweli kuendesha ndani ya mtandao wa kompyuta.
Na kwa kweli ndani ya node.js yenyewe,
mfumo huu ni rundo zima ya maktaba kati ya ambayo ni
katika HTTP server kujengwa katika.
Kwa hiyo, unaweza kweli kuandika server kama tutaweza kuona
katika muda tu, super kwa urahisi na tu kuelewa kidogo
ya HTTP na TCP na bandari.
Na unaweza spawn kusikiliza mtandao wa kompyuta bila Apache,
bila Microsoft ya IIS.
Bila nyingine yoyote programu imewekwa,
unaweza tu spawn hii na kusikiliza zaidi bandari yoyote
juu ya mfumo wewe ni kuruhusiwa.
Hivyo kesi na pointi, let me go na kufungua
up mfano huu, server-0.js.
Hivyo taarifa kwamba juu ya faili hili, tu rundo
ya maoni uninteresting, na kisha kuna wanandoa
ya mistari mwakilishi wa code kwamba tutaweza kuona recurringly.
Hivyo, var HTTP anapata kuhitaji "HTTP".
Hivyo kujengwa katika node.js ' miundombinu ni rundo zima
ya modules ambayo ni kweli tu maktaba na kila kitu ni aina
jina la nafasi kwa kitambulisho kipekee
kama hii ni moja ya "HTTP".
Ili kama katika mengi ya lugha kama Java na C + +
na C, tu wakati kuagiza au ni pamoja na
au katika node kusema zinahitaji moduli gani bits wake.
Na kumbukumbu zote inahitaji kupata kubeba
ndani ya RAM na kwa hiyo kutumika.
Basi, wewe aina ya mzigo hii maktaba au modules juu ya mahitaji.
Hii ina maana kwenda mbele na kuhitaji
kwa mpango huu Maktaba HTTP,
na kutaja kwamba maktaba na njia ya variable kuitwa HTTP.
Lakini alama hii upande wa kushoto inaweza wameitwa kitu chochote, foo,
bar, bazi, haina jambo.
Hivyo tofauti na C + + na Java na C ambapo wakati unahitaji
au kuagiza maktaba, ni aina tu
ya inakuwa kimataifa kupatikana,
modules node.js ni zaidi kukazwa namespace.
Ili mwenyewe - kwamba utendaji ni kupatikana tu kwa wakati
kwa njia ya jina hili kutofautiana.
Huwezi kuanza mbinu kuandika ambazo zipo
katika haki njia ambayo pengine ni nzuri,
kwa sababu kisha namespace yako haina kupata karibu kama vitu vingi
kama katika mengi ya lugha.
Haki ya wote, hivyo sasa kama kawaida kupendekeza, kujenga HTTP server
kama Jonathan [kudhani spelling] ilikuwa inawezekana ni literally
rahisi kama wito kuunda mbinu server ndani ya
ya HTTP moduli.
Kwa hiyo, hili ni kurudi kumbukumbu
baadhi ya aina ya mtandao wa kompyuta.
Alikuja Apache, si lazima kama uzito mkubwa.
Hii moja kidogo rahisi.
Na sasa, nina tu tu kufanya mambo kadhaa.
Hivyo kwanza, napenda kitabu chini kwa chini hapa
na ruka handler mbinu kwa ajili ya sasa.
Na taarifa line hii ya kificho,
server.on ambayo ni kimsingi ina maana server -
kusikiliza kama katika jQuery code,
kusikiliza kwa ajili ya tukio aitwaye ombi
na tu kuchukua nadhani nifanye nini
wakati tukio ombi moto katika server.
Yeah?
>> Wito kazi handler.
Hivyo, literally kutekeleza kificho kwamba ni inatazamwa
na kutofautiana hii na kwa kweli si kutofautiana kwa alama hapa,
nini ni ishara kwamba akimaanisha?
Naam, hii jina la kazi hapa
na handler inaonekana inachukua hoja mbili.
Kwa nini mbili? Naam, kama wewe tu kusoma hakuna nyaraka
kwa mada hii fulani, wataelezwa kuwa handler
ambayo itakuwa kutenguliwa itakuwa kupita hoja angalau mbili,
kumbukumbu ya ombi,
na ndani ya ombi sisi literally maana ombi HTTP.
Kwa hiyo, wale wote HTTP headers kwamba unaweza kukumbuka
tangu mwanzo wa muhula au baadhi ya darasa kabla ya
au uzoefu kama kupata line na jeshi line
na line User-Agent, yote hayo ni zimegawanywa na ndani ya zaidi
ya ombi hili kitu.
Na majibu kitu ni yamepangwa kwa data utlandet.
Hivyo, una kumbukumbu ya kitu ambacho kinaenda kwa kuruhusu
kutuma habari nyuma kisakuzi kwa kupiga mbinu
juu ya hoja kwamba mwisho aitwaye Res kwa majibu.
Lakini hali hii inaweza kuitwa foo au bar, hii ni mikataba tu.
Basi sasa, nini mimi?
Naam, inaonekana kwamba ndani ya hii mtandao wa kompyuta super rahisi
kwamba mimi nina utekelezaji, mimi nina kwenda kufanya yafuatayo.
Mimi nina kwenda kuandika HTTP header na hali code 200,
200 maana OK, yote ni sawa.
Na kisha, mimi nina kwenda kupita juu ya inaonekana.
Nini aina data ya pili hoja ya kichwa haki?
>> Ni kitu?
>> Ni kitu kwa jinsi funguo na maadili wengi?
Moja tu ya kila mmoja, haki, thamani moja muhimu ya jozi.
Hivyo, 'aina ya maudhui'.
Na sababu tu Mimi nina kunukuu hapa ni
kwa sababu hyphen inaweza kuwa alikataa kwa minus ishara
au kitu kama hicho.
Hivyo, nina kunukuu hapa, unguza au quotes mbili.
Lakini tena ya kawaida dhana
katika JavaScript code ni mara nyingi quotes moja siku hizi,
matumbo na kisha thamani.
Kwa hiyo, hili ni kinachojulikana akili aina.
Hii ni header HTTP hiyo literally kwenda
kuwa maudhui hyphen aina ya matumbo Nakala slash wazi kwamba kinaendelea
kutumwa kutoka server browser
hivyo kwamba browser anajua kama kukimbia hii Nakala kama Raw
au HTML au kama picha au movie
au faili flash au kitu kingine chochote.
Sasa, ambapo mimi kweli wanataka kutuma katika mwili wa ukurasa?
Naam, tu kwa kusoma nyaraka
kwa ajili ya kukabiliana kitu ndani ya maktaba hii.
Mimi naona kwamba kuna haki njia na kwamba inachukua kamba,
labda mambo mengine lakini ya chini kamba.
Na kamba ni nini mate nje kwa browser.
Katika kesi hiyo super yake rahisi, hello dunia yake,
lakini inaweza kuwa opne bracket, html, bracket karibu,
bracket wazi kichwa, karibu bracket na kadhalika,
hii inaweza kuwa Raw html.
Lakini sisi ni kuweka mfano rahisi kwa mate tu
nje rahisi ya aina akili ambayo ni arguably text / wazi.
Na kisha response.end tu maana karibu uhusiano
na kutuma kila kitu nina aina ya buffered ndani ya
ya kitu hicho nyuma kwa browser.
Mimi nina kufanyika. Sawa.
Kwa hiyo, jambo la mwisho Mimi nina kufanya hapa chini
na hii ni kwa kiasi fulani holela na maana ya kuwa baridi,
ni mimi nina kuwaambia server hatimaye kusikiliza
juu ya TCP baadhi ya na bandari default.
Kumbuka tangu mwanzo ya darasa huduma -
au kwa kawaida wewe kipekee kutambua hilo kwa idadi,
AD ni mtandao, 443 ni ya msingi HTTP Nje, 22 ni SSH, 21 ni FTP
na 1337 ni holela lakini ni juu kuliko 1024
ambayo ina maana ya juu zaidi mifumo, naweza kutumia
bila wanaohitaji super marupurupu user.
Hivyo ni rahisi tu.
Lakini 8080 ni katika off - kawaida moja, 8088, kwa kweli kitu chochote kubwa
katika maelfu ya kawaida lakini hii ni wasomi tu.
Haki ya wote, hivyo nini kinatokea wakati mimi kwa kweli kukimbia hii?
Naam, mimi si tu kutembelea ukurasa katika browser.
File hii inaitwa server-0.js.
Kwa sababu tena, Apache ni sasa nje ya picha
kwa nusu ya mwisho bila shaka.
Kama mimi nataka mtandao server, mimi haja ya kuandika
na kisha kukimbia server za tovuti hii.
Lakini zinageuka kuwa JavaScript wote juu ya upande wa mteja
na upande server ni kutafsiriwa lugha.
Hivyo, kila nahitaji ni mkalimani.
Hivyo it's - kama kusisitiza kuendesha node na kisha server-0.js,
Mimi au anaweza kuona baadhi ya pato kutegemea
juu ya nini maktaba nimekuwa pamoja, kitu inaonekana kuwa kinachotokea.
Lakini ngoja kwenda browser na let me go
kwa anwani ya IP sawa ya CS50 wateja wangu.
Lakini hii inaweza tu pia kuwa Mac yangu
au PC yangu na kisha hit kuingia.
Kwamba kweli inaonekana kama Apache.
Hiyo ni kama directory listing sisi inaonekana
katika katika nusu ya kwanza.
Hivyo, nini mimi kufanya makosa?
Yeah.
[Inaudible Remark]
Hasa, sawa?
Hivyo, Apache bado ni kusikiliza juu ya bandari default 80.
Hata kama mimi naweza kubadili kwamba, Mimi naweza kugeuka kuwa mbali wote pamoja
lakini bado mbio.
Lakini guys hizi zinaweza hakika zinadumu kwa pamoja.
Mimi tu na kuweka koloni 1337 na kisha labda
au labda si slash katika mwisho wa kupata hii bandari
kwamba server hii ni mbio juu ya.
Na sasa naona kwamba hello, dunia amerejea.
Na mimi unaweza hit Reload kama mara nyingi kama nataka,
ni bado kuwahudumia up ukurasa.
Hakika kama mimi kufungua Chrome ya mkaguzi, kwenda mtandao
na kisha upya ukurasa nzima,
taarifa kwamba kweli hii ilikuwa ombi hilo alitumwa.
Kama mimi kuangalia chanzo Raw,
taarifa browser yangu inapeleka mambo hayo yote.
Na kisha majibu kutoka kwa server mara super rahisi.
Kuna 200.
Kama siyo chini sana juu ya screen,
kuna aina maudhui.
Na kisha node.js aina ya moja kwa moja
kwa ajili yangu aliongeza tarehe na yote ya mambo mengine
kwamba browsers kawaida kutarajia.
Hivyo, hebu tu kuona kidogo sanity kuangalia.
Hebu nirejee nyuma na kanuni katika server-0.js na napenda -
kila wakati mimi kwenda katika handler,
napenda tu kusema console.log.
('Tulikuwa mgeni!').
Mimi hawana haja ya recompile au kitu kama hicho,
ni lugha kufasiriwa.
Basi sasa, napenda kwenda nyuma ukurasa, Reload moja, mbili,
mara tatu na kwenda nyuma kwa dirisha yangu.
Na sasa naona hii.
Vizuri kwamba ni ya ajabu, Mimi naona mistari sita.
Kuvutia mtandao trivia, kwa nini Mimi kupata sita ombi si tatu?
Yeah?
[Inaudible Remark]
Yeah. Hivyo, kama unaweza kujua kidogo kijinga icon ya juu katika
ya bar browser kwamba mengi
ya Nje kutumika nguvu kuwa Harvard Muungano,
inaweza kuwa alama ya kampuni au kitu kama hicho.
Hivyo, browsers siku hizi aina
ya kujikinai kufanya ziada HTTP ombi
karibu kila tovuti ya kwamba Unaweza kutembelea kuangalia kama kuna
by default file aitwaye favicon.ico
katika saraka ya sawa kama faili ombi.
Na kama ni hivyo, unaweka icon huko.
Basi wote sisi ni kuona ni hasa kwamba.
Na kwa kweli, hebu angalia kama sisi unaweza kuona hii badala ya aina
nje tu, 'Tulikuwa mgeni.
Hebu kwenda mbele na pato.
Na mimi tu kujua hii kutoka kuangalia nyaraka.
Kuna mali ndani ya ombi kitu kinachoitwa URL
ambayo hufanyika kuwa njia
kwamba kilitakiwa katika URL halisi.
Hivyo, kama mimi upya server tu kwa rerunning node
juu ya server-0.js na sasa je hii moja, mbili,
tatu na kurudi nyuma hapa.
Kuna ni.
Slash ni nini I - binadamu ombi
katika favicon.ico ni nini browser ni
kujikinai kuomba.
Lakini uhakika ni si sana favicon mambo
lakini jinsi server ni kazi.
Yeah?
>> Kwa nini kuwa na kuwa baadhi ya ombi?
>> Kwa nini hilo na - na asili ya jinsi HTTP kazi.
Hivyo, HTTP unaweza tu kuomba file moja kwa wakati mmoja.
Browsers inaweza kuwa smart siku hizi
na kuweka TCP uhusiano wazi.
Kama alichukua CS143 au kwa ujumla familiar na mitandao,
hivyo unaweza kupata ufanisi faida
kwa kushika mtandao tundu wazi
katika kufanya HTTP nyingi maombi serially juu yake
lakini wao ni file moja kila ombi.
Hivyo, kama wewe kutembelea kitu kama -
I mean tunaweza kwenda zaidi ya Nje yoyote.
Kama wewe kwenda - hebu vuta up Chrome ya mkaguzi hapa.
Inaweza kupata kujaza zaidi ya ukurasa.
Kwenda tab mtandao na kwenda www.cnn.com.
Na wakati wa ziara cnn.com, homepage wake -
ya browser yako badala atrociously hufanya - bado kuhesabu kura.
OK. Angalau 289 HTTP maombi tena na tena.
Na hii ni kwa nini wakati wa ziara Nje hasa bloated,
wao ni mwepesi wa mzigo kwa sababu ya yote
ya mali wao ni upakiaji.
Kwa hiyo, inaonekana kama 298.
Huenda kuna baadhi ya Ajax kwenda katika hatua hii au baadhi ya
ya mali ni baadhi tu ya chini.
Hivyo, kila moja ya hizo ni ombi binafsi kurejea
na nje, na kurudi.
Na kwamba ni kwa nini mapema, hata ingawa sisi aina ya kuzungumza
kuhusu hilo kwa kiasi fulani fancifully ambapo wewe kuweka tag script,
kabisa hufanya tofauti wakati una -
ni kuanza kuwa na mengi ya trafiki na mengi
wa mafaili ya kuwa ombi.
Na kila mmoja wa hii inawakilisha pengine picha, vyombo vya habari file,
JavaScript file, CSS faili au kama.
Kwa hiyo, tuko tayari hadi baadhi 4 megabytes tu
kuangalia habari ya leo.
Nzuri swali.
Sawa.
Hivyo, ni nini baadhi ya upsides ingawa?
Haki, sisi kujua jinsi ya kufanya webpages tayari kwa PHP.
Na wengi wenu alifika katika darasa kujua Django
na chatu au reli na Ruby.
Hivyo, kwa nini tunahitaji bado mwingine lugha na miundombinu?
Je, ni node.js hasa nzuri katika kama nyinyi mnajua?
[Pause]
Baadhi ya kitu?
No? Yeah?
>> Relaying ujumbe.
>> Hivyo, relaying ujumbe.
Hivyo ni kweli na ni kweli kwa sababu zaidi ya kiufundi
na kwamba node.js na kwa kweli JavaScript ni hasa
vizuri inafaa kwa asynchronous kanuni,
kama ambapo kujenga udanganyifu
ya kufanya nyingi mambo mara moja.
Hivyo, ingawa wao ni kweli yanatokea serially,
kweli katika hali nyingi, JavaScript upande wa mteja wote
na upande server ni moja minyororo.
Ambayo kama wewe ni kuchukua 161 au hata 61 ina maana kwamba -
ya mpango huu kujua,
mkalimani unaweza literally tu kufanya jambo moja kwa wakati mmoja.
Lakini hii ni si kubwa kwa kitu kama mtandao wa kompyuta
ambapo unaweza kuwa na kadhaa au mamia au labda maelfu
watumiaji wote wa kujaribu kupata tovuti yako
wakati huo huo sana.
Na bado, zinaonyesha kwamba kwamba utunzaji yao moja
baada ya nyingine baada ya nyingine hasa kama baadhi ya
ya wale ombi kama tuliona juu ya CNN wanaweza kuhitaji kuwahudumia
up files 300 kabla ya hata kupata user ijayo
ambaye anataka kuona anasema habari.
Node.js ni bora inafaa kwa ajili ya mazingira kama hayo.
Kwa sababu kile kinachotokea ni yoyote mchakato polepole mbio
kama kusoma faili kutoka disk au querying database au kuzungumza
kwa mtandao wa baadhi ya server nyingine,
kwamba huelekea kuwa na utulivu, right?
Kama hakuwa kuchukua 61 au 161 hasa kila ya aina hii
wa huduma za pembeni huwa na kuwa ndogo sana
kuliko kufanya kitu chochote ndani ya sawa RAM na CPU hiyo
kwamba kusema katika kesi hii server ni kweli mbio.
Lakini nini ni nzuri kuhusu node.js ni kwamba unaweza -
na JavaScript kwa ujumla zaidi ni kwamba unaweza kufanya kitu
na kisha kusema, "Hmm, hii ni kwenda
kuchukua yangu milliseconds chache au hata sekunde chache.
Hebu aina ya uma kwamba mbali, " lakini siyo mchakato wa kweli.
Na wakati ni kosa kufanya kwamba mchakato polepole mbio
kama grabbing safu kutoka database au kusoma file. html
kutoka disk, itakuwa kupata nyuma yangu badala
kuliko mimi kuwa na kusubiri kwa ajili yake.
Hivyo, kufanya hili wazi zaidi.
Hii ni njia yangu ya kufanya hii familiar zaidi.
Haki ya wote, hivyo hii ni Kuitingisha Shack katika mraba.
Hii ni aina ya kawaida dhana
kwa kueleza asynchronicity.
Hii ni kweli nzuri mfano kwa sababu Shake Shack
na kitamu Burger ni inashangaza kupunguza kwa wayatendayo.
Lakini uhakika ni wao ni mzuri katika kuchukua maagizo
na kuchukua fedha yako baada ya ambayo kusubiri kwa chakula.
Kwa hiyo, hii ni kweli bora kubuni kuliko mbadala.
Kwa sababu tuseme kutembea katika duka kama hii na wewe got
mbele ya line na wewe kuwekwa ili yako na unataka
kwa burger, kama niwezavyo kuwaambia, inachukua angalau tano
au zaidi ya dakika kweli kupata Burger.
Hivyo, itakuwa ni aina mbaya mtindo wa biashara
kama wakati wewe ni kusubiri kwa ajili yako burger, Alice [kudhani spelling]
na Bob [kudhani spelling] na Charlie [kudhani spelling]
na mtu mwingine ni kupanga foleni nyuma yenu
na wewe ni literally kuzuia line kusubiri kwa chakula.
Hivyo ni wazi, katika Shake Shack
na wengine kufunga chakula maeneo si kufanya hivyo,
wao kufanya kitu kama hii.
Wao kukupa buzzer.
Na wao aina ya kutuma wewe juu ya njia yako.
Basi, wakamwita nyuma na kufanya hii kitu kidogo vibrate
au flash kwa kupata mawazo yako.
Kwa hiyo, hili ni halisi nini?
Kitu kama node.js gani.
Kama node.js au JavaScript zaidi kwa ujumla ni kuwa kutumika
na programu ni smart kutosha
kutambua, "Unajua nini?
Chochote mimi haja ya kufanya haki hapa inaweza kuchukua baadhi ya idadi
ya milliseconds au sekunde.
Unajua nini?
Hebu kwenda mbele na si kuiita synchronously -
"Kwamba ni guy kuzuia mtu mwingine katika line, "-
napenda kwenda mbele na aina ya hatua kando
na tu kuwaita mwenyewe nyuma
wakati kwamba mbio kwa muda mrefu kazi ni kamili. "
Na wito nyuma bila shaka anataja katika kesi hii
kwa callback kazi, kumbukumbu ya chuck ya maadili ya
kwamba kupata kunyongwa wakati Burger yako ni tayari,
sana kama jambo hili na baadhi aina ya utendaji kujengwa katika
kwamba ni kuanza vibrating au buzzing wakati ni wakati kwa ajili yenu
kuitwa nyuma mbele ya mstari.
Hivyo, nini hii maana katika hali halisi?
Vizuri, tuna kazi kwa njia yetu up.
Hivyo, napenda kwenda mbele na kufanya hili la kwanza.
Katika server-1.js, napenda kwanza kurahisisha code
ili tuweze kuchukua hatua mtoto kuelekea tatizo zaidi ya kulazimisha.
Hii ni exact mpango kwamba mimi aliandika kabla ya.
Lakini nini imekuwa iliyopita?
Huko aina ya kidogo tofauti Kiwango cha kisintaksia
kati ya hii na toleo 0 wakati iliyopita.
Nini anaruka nje katika wewe kama unakumbuka?
Yeah Cynthia [kudhani spelling]?
[Inaudible Remark]
Yeah. Basi sasa, tuna line ya kazi ya kupitishwa in
Tumekuwa wamezipata kuondoa aina
ya mdomo jina lake handler kazi.
Maana tu kwa kuwa kabla ya hata wito katika sehemu moja,
Mimi si kweli haja ya kupoteza muda kutoa ni jina
na kufanya kuwa vigumu kwa kusoma kanuni juu hadi chini.
Kwa hiyo, hebu tu kutangaza inline ni kazi bila majina.
Na mimi nina kufanya mambo mengine mawili.
Mimi nina kufanya bora matumizi ya dot nukuu.
Hivyo kama katika jQuery, mengi ya node mbinu inaweza minyororo pamoja.
Ili mara moja wewe ni kosa wito kitu, huna
kusubiri line mpya na kuwaita njia nyingine,
unaweza mlolongo tu pamoja.
Na hivyo kwa njia hii, tunaweza kweli kaza hii up.
Kwa hiyo, hili ni literally server mtandao katika mistari mitano
ya maadili ya jumla tofauti -
tofauti na nini unaweza kawaida kufanya kuanzisha kitu chochote.
Kama mimi kwenda katika server 2 sasa, hebu kufanya hivyo.
Katika server 2 - kweli hebu kuja nyuma na kwamba server 2.
Hebu sasa kufungua async-0.js na kushughulikia tatizo ambalo mkono.
Hivyo kwanza, hebu kwenda mbele na wazi
up async-0.js katika browser.
Hivyo async-0, napenda kwenda nyuma kwa browser.
Hit Reload.
Na sasa, hii ni aina ya ujumbe wa kosa.
Hakika mimi nina kuona 500 katika Chrome ya mkaguzi.
Lakini ngoja kwa usahihi kuomba hello.txt.
OK. Kwa hiyo, hii inaonekana kufanya kazi.
Hivyo async-0.js haionekani kutumika up kitu kwa ajili ya kufyeka.
Ni hana msaada file default.
Lakini kama mimi wazi kuomba hello.txt,
ambayo inaonekana kuwa ya kusaidia.
Kwa nini ni kwamba?
Naam, ni nini mimi tumeenda hapa
na kufanyika ni kutekelezwa mtandao super rahisi server
kwamba inaonyesha ambapo asynchronicity inaweza kuwa na manufaa.
Na kwamba ni kutekelezwa kama ifuatavyo.
Kwanza, mimi nina kutumia HTTP moduli tena,
lakini pia FS ambayo pengine anasimama kwa?
Kwa ujumla katika CS, faili mfumo.
OK faili mfumo.
Hivyo nje FS, faili mfumo.
Haki ya wote, hivyo nini hii haina nipe?
Utendaji kuhusiana na files kama kupata kupita,
kufungua files, kuandika directories, kusoma directories
na wote wa aina hiyo ya mambo ya ajabu.
Hivyo sasa taarifa, kanuni hii ni sawa mbele,
kujenga server, kupita katika kazi bila majina.
Hii ni aina ya holela.
Hii si sana salama mtandao wa kompyuta.
Kwa kweli, unaweza kupata zaidi faili yoyote kwenye gari yangu ngumu
au juu ya server ngumu gari na utekelezaji wa kanuni hii
kwa sababu mimi nina tu upofu kuchukua kwamba mimi nina kwenda
kunyakua chochote user ombi katika URL.
Na mimi nina kwenda kwa kiambishi ni pamoja na dot
hivyo kwamba mimi nina kidogo kuwa salama
kwa kusema chochote file wanaweza ombi ina angalau kuanza
katika saraka ya sasa.
Bila shaka kuna tishio hapa.
'Njia kama badala pamoja na nini?
Katika njia zao, wanaweza aina ya kazi kwa karibu pia.
Dot, dot, sawa?
Hivyo, kama user tu ya kuweka dot, dot katika URL, katika nadharia,
wanaweza kuanza kupata yangu - na kusema password file.
Kwa hiyo, hii si maana ya kuwa salama,
ni maana ya kuwa rahisi.
Hivyo hapa, nina variable ambayo ni concatenation ya dot
ambayo ni directory sasa na ombi URL
ambayo tuliona kabla ni kama kufyeka au / hello.txt.
Basi sasa, anapata kidogo zaidi ya kuvutia.
Kwanza, taarifa ya chini.
Mimi nina kusikiliza juu ya bandari sawa mbele.
Hivyo kweli ya kuvutia kazi ni ndani ya hapa.
Kila wakati ombi huja katika kwa asili
ya kanuni hii, je, Mimi kufanya?
Mimi nina file wito mfumo wa kusoma file mbinu,
kupita katika njia kwamba mimi nataka kusoma.
Na sasa, hii ni nini kuvutia hapa,
hii ni kwa utekelezaji katika Asynchronous mbinu.
Huwezi kupata kurudi thamani kutoka kusoma file.
Katika taarifa kweli, kuna hakuna mkono wa kushoto kujieleza
upande wa kushoto wa kusoma file.
Haina kurudi thamani.
Ni Badala yake, wito callback kazi wakati ni tayari
kukupa jibu nyuma.
Hivyo tena kuwa wazi, ambapo katika yesteryear,
katika programu nyingi lugha, kama alitaka
kusoma faili kesi katika hatua PHP,
file kusisitiza kupata kusisitiza yaliyomo,
una kujieleza upande wa kushoto katika thamani yote baada ya -
kabla ya ishara sawa, hiyo ina maana wewe ni kumshirikisha
kwa kuwa kutofautiana kurudi thamani ya kazi hiyo.
Unaweza kufanya hivyo katika node.js, lakini kwa kawaida wewe na
kuwaita wazi synchronous matoleo ya kazi kama,
Nadhani ni kusoma upatanishi wa file au upatanishi wa kusoma faili.
Mimi wamesahau jinsi wao jina lake ni.
Na kwamba bila kutoa wewe thamani ya kurudi.
Lakini kama faili kwamba ni juu ya baadhi mfumo wa kijijini file
au disk ni kawaida polepole, inaweza kuchukua 10 milliseconds
au sekunde 2 kwa ajili ya faili kwamba kwa kweli kuja nyuma.
Wakati huo huo, hakuna mtandao mwingine wageni ni kuwa kuhudumia
na websit yako.
Wewe ni kuzuia.
Hiyo ni nini wito kuzuia IO, pembejeo / pato.
Hivyo hapa, hii ni nadhifu sana.
Kwa sababu ya kile node.js ni kwenda
kufanya juu ya kutafsiri ni zifuatazo,
ni kwenda kuwaita njia kusoma file,
kujaribu moja faili ambao got njia maalum na thamani P.
Na kisha kama na wakati ni tayari kukupa nyuma yaliyomo
ya faili P, itatoa wito kazi ambao sahihi ni
kwa mkataba zifuatazo.
Hoja mbili, ya kwanza ya ambayo ni labda Error kitu,
mji mkuu wa E, ni kitu aitwaye Error au Batili
kama hakuna makosa hayo.
Na hoja ya pili - kuchukua nadhani - ni kwenda kuwa nini?
Ni wito data wazi lakini nini ni data zaidi praktiken?
>> Contents?
>> Yaliyomo ya hello.txt katika mfano mimi vunjwa
up katika browser yangu wakati iliyopita.
Hivyo kwa maneno mengine kusoma faili na wengi node.js kazi
kama katika wala kurudi maadili.
Wao wito callbacks na kupita
kwa callbacks wale kitu gani wamekuwa jadi
kurudi thamani.
suala la mafanikio ya mbinu hii ni
kwamba unaweza simu kusoma faili t0.
kazi callback nguvu kuitwa Jibu mmoja baadaye
hivyo kusema katika T, ni wapate kuitwa T1000,
elfu kupe baadaye.
Lakini uhakika ni kwamba wengine wa kanuni katika faili hili,
kama wapo ingekuwa mara moja wauawe wakati node.js
na wakati mfumo wa faili takwimu za nje jinsi ya kusoma
kwamba faili na kupata nyuma na wewe.
Hivyo kujenga hii -
hivyo kwa ufanisi udanganyifu
ya parallelism wakati kuruhusu mbio mchakato wa polepole ni si
kuzuia mambo muhimu, sehemu kwamba watumiaji huduma.
Hivyo, jinsi gani sisi kushughulikia suala hili?
Hii ni kawaida sana node.js dhana.
Na kuna njia tu ili kurahisisha hii ni tutaona kabla ya pamoja.
Mimi kwanza kuangaliwa kama Makosa ni si null.
Kwa hiyo, kama si uongo kisha kulikuwa na makosa.
Sijui nini, labda faili haipo.
Sikuwa na ruhusa.
pathname ni sahihi.
Idadi yoyote ya mambo inaweza kwenda vibaya.
Kwa sasa, mimi nina kwenda kiholela kurudi 500
ambayo ni server hitilafu ya ndani.
Kitu potoka.
Mimi si kweli huduma kutambua hilo.
Hivyo, hebu tu kuwaambia user ni kuvunjwa.
Na kisha, mimi nina kwenda kufanya res.end,
na hii ni nukuu shorthand.
Kumbuka kwamba mwisho wakati mimi res.write
na kisha mimi res.end.
Kama unataka tu kwa kutuma line moja ya pato,
unaweza tu kufanya hivyo wote kwa mara moja na res.end kwa hoja,
na kwamba itakuja kutuma chochote ujumbe wa makosa ni
ndani ya hii kitu kwa browser.
Ilikuwa pretty arcing kukumbuka wakati iliyopita.
Mimi sijui nini hii maana katika mtazamo wa kwanza.
Lakini wakati mimi ombi file ambayo haikuwepo -
oops, sisi haja ya kuendesha server tena.
Wakati mimi ombi file kwamba haikuwepo, EISDIR,
hivyo kitu kuhusu ni kuwa directory,
kama mimi kufanya baadhi random kamba huko,
inaonekana kwamba maana yake ni file hana hata kuwepo.
Na kwamba kwa sababu code yangu ni tu kusema kuandika
nje chochote Raw Makosa ujumbe ni,
user hivyo si sana ya kirafiki lakini angalau mimi nina utunzaji yake.
Mwingine, kama siyo makosa je, Mimi kufanya?
Kitu kimoja kama kabla ya mate nje 200 OK, wazi -
Nakala / plain akili ya aina na kisha mate nje data.
Na kwamba ni kwa nini mimi nina kupata yaliyomo ya hello.txt ambayo tu
kuthibitisha kama nikaona katika hello.txt,
ni literally tu hello, dunia.
Na kama mimi iliyopita hii hello, dunia, ila faili,
rerun server, Reload ukurasa.
Sasa, mimi kupata toleo hilo.
Kwa hiyo, mimi wameweza kweli tu reimplemented mtandao wa kompyuta
kama ni kuwepo kwa wengi miaka lakini kwa kutumia node.js.
Lakini tunaweza kufanya hivyo hata zaidi cleanly.
Hebu kufungua async-1.js.
Sasa, taarifa mimi nina kuongeza moduli mwingine wakati huu,
inaonekana moduli njia.
Sasa, hii ni nzuri nafasi ya kuangalia
nini nyaraka inaonekana kama.
Node.js ni nyaraka.
Kama PHP nadhani ni kweli nzuri
na moja kwa moja mbele.
Kama mimi kwenda kwa node.js na Google na kutafuta njia node.js,
nini utaona kawaida ni kiungo moja kwa moja na URL
kwamba mimi kuweka hapa wakati iliyopita.
Hivyo / api ni mahali rasmi kwenda kwa nyaraka.
Na nini utaona juu
ya nodi ya nyaraka rasmi ni njia zote na
au mali ndani ya moduli hii hasa,
moja ambayo inaitwa kujiunga.
Na kujiunga na ni msaidizi kazi ambayo inaenda naomba
kwa bother na pluses wote.
Na ina aliongeza ziada kama utaona
kutoka docks ni pia normalizes njia kusababisha.
Hivyo, kama user au una dots au dot dots au macho
ya wale aina ya jamaa njia, kati ya upsides
ya njia alijiunga na ni kwamba itakuja kusafisha yote yale ambayo up
na kukupa kisheria njia bila
ya dots hayo au dot dots.
Kwa hiyo, ni jambo jema katika ujumla kwa ajili ya usalama angalau
kama wewe ni kuangalia kurudi thamani ambayo mimi nina
katika kesi hii rahisi.
Lakini mimi unataka kutumia.
Kwa hiyo, mimi sasa kujenga njia a kidogo zaidi programmatically
na path.join badala Raw concatenation.
Hivyo, kwamba ni kidogo safi kuliko hapo kabla.
Na sasa taarifa mimi nina kuwa kidogo zaidi akili badala
kuliko tu upofu kujaribu kusoma faili,
Mimi nina kwenda kwa kweli kuwaita fs.stat.
Hivyo, kama wewe ni ukoo
kwa ngazi ya chini C kazi na C, hata PHP.
mengi ya maktaba na kazi hii stat anarudi
kimsingi takwimu kwenye faili, faili,
ruhusa, jina na mambo kama hayo,
na pia inamuunga kama file ipo au la,
na kama ni faili au directory
au ishara kiungo au kitu kingine.
Hivyo sasa taarifa, mimi nina wito fs.stat.
Na kisha inaonekana kulingana nyaraka,
Mimi lazima kupata nyuma katika Error kitu
au Batili ikifuatiwa na stats kitu.
Lakini hebu angalia hii, node.js.fs.
Hapa ni file mfumo wa nyaraka.
Hebu kuangalia kwa stats.
Kuna mengi zaidi ya kazi hapa.
Oops, kwamba stat usawazishaji, fs.stat.
Hivyo hapa, ni asynchronous stats (2).
Hiyo maana kama wewe kumbuka kutoka kurasa kuu,
sura ya 2 ya ukurasa kuu,
kwamba maana hii ni halisi utekelezaji node tu
ngazi ya chini mfumo wa kazi stat.
Hivyo, callback anapata mbili hoja, makosa na stat
ambapo stat ni fs.stats kitu.
Basi hebu angalia nini hii kitu zinatakiwa kuangalia kama.
Hebu bonyeza hyperlink na mimi kuona kwamba.
stats kitu ina inaonekana baadhi ya njia msaidizi,
ni faili, ni directory, ni kundi la mambo mengine.
Ni "ni" faili kwamba mimi huduma kuhusu katika kesi hii.
Hivyo hapa mimi kwenda.
Kama kulikuwa na makosa, kisha napenda tu dhamana wakati huu
na kudhani.
Kama kuna makosa, ilikuwa ni pengine 404 file lake halikupatikana.
Ni inaweza kuwa kitu kingine
lakini mimi nina kuwa kidogo wavivu hapa tu kwa lengo
juu ya maelezo zaidi ya kuvutia.
Lakini kwa mtumiaji makusudi, faili si kupatikana,
kama kulikuwa na makosa yoyote kusema file.
Vinginevyo, napenda kuangalia kama file ni kweli file halisi.
Hivyo kama si file, ipo.
Kuna kitu pale lakini pengine ni directory
au labda kiungo mfano
au kitu kingine kwamba funky juu ya mfumo wa faili.
Aidha njia, user haipaswi kuona.
Basi sasa, mimi nina tu kwenda mate
nje conventionally ruhusa 403.
Lakini tena tu ya mkataba huo,
Mimi nilikuwa na kutumiwa kitu kingine katika nadharia.
Na kisha mwisho, napenda kujaribu kusoma faili.
Hivyo, basi mimi kitabu chini.
Na sasa taarifa hii ni ambapo code unaweza kupata messy kidogo,
taarifa kwamba mimi nina wito fs.readFile kupita
katika njia hiyo, sawa na callback wakati kama mwisho,
hivyo toleo la awali.
Na kisha kama Ningependa kupata -
kama si kupata hiyo, I mate nje ya 500.
Na kama mimi sioni hivyo, nini line ni sisi kwenda kuona hapa?
Tunakwenda kuona FS kuandika header 200 pengine
na res.end kutuma data halisi.
Lakini taarifa hii.
Na hii si demonstrative ya mazingira ya kesi mbaya.
Lakini nina wito huu stat hapa kuliko mimi na baadhi ya mambo ya ajabu.
Basi, mimi na mwingine wito Asynchronous hapa,
hivyo zaidi indentation.
Hivyo, aina tu ya extrapolate kama unaweza kutoka hapa.
Ni tatizo gani inaelekea kutokea kwa lugha kama JavaScript
katika mazingira haya ambapo huna maadili ya kurudi
lakini badala una haya callbacks.
Na bila shaka, hii ni kitu Stylistic ukweli
kwamba mimi kuweka indenting.
Lakini kuchukua hii kwa mantiki ijayo hatua.
Tuseme kulikuwa na mtu mmoja au mbili au tatu kazi nyingine
kwamba mimi zinahitajika kutekeleza kwamba walikuwa na asili Asynchronous,
na kwa hiyo wewe tu aina ya kuweka indenting kushughulikia yao,
kushughulikia yao, kushughulikia yao.
Unaweza kupata aina ya callback kuzimu kama watu kuiita
ambapo code yako kuanza kupata pana sana
na kusema ukweli kweli ni vigumu kusoma.
Kama ni, siwezi aina ya vigumu kuwaambia kwamba hii ni aina ya mtiririko
ambayo ina aina hii
ya stylistically angled kitu kinachoendelea hapa.
Kwa hiyo, hili si bora kwa sababu hii inaweza haraka sana kuwa
unwieldy, ingawa mbili Asynchronous wito si
kama kubwa mpango huo.
Hivyo, tunaweza kuepuka hili, sawa?
Unaweza kuwa glimpsed kwamba Mimi misclicked wakati iliyopita.
Katika nyaraka, unajua, inaonekana kama kuna ni statSync.
Na statSync haina kuchukua callback kama hoja.
Inachukua tu njia kwa sababu inaonekana anafanya nini?
Kuirudisha mfano ya fs.stats.
Hivyo hii inaweza kuwa wako silika kwanza, sawa?
Hasa kama kazi callback
na asynchronicity ni mpya kidogo na wewe, kusema ukweli,
mbinu rahisi pengine ni tu kuepuka tatizo wote
pamoja, kurudi nyuma na aina ya programu CS101 style
ambapo wewe piga kazi au njia, anarudi thamani,
kuwaita kazi, anarudi thamani,
kazi, anarudi thamani.
Na mimi naweza kutumia kwa hiyo fs.statSync
ambayo ni halisi sawa lakini ni toleo synchronous
ambayo ina maana kuirudisha thamani.
Haina kupita thamani kwa callback.
Lakini kwa nini kwamba pengine kuwa na suboptimal workaround ya mapumziko
kwa kazi synchronous?
Yeah?
[Inaudible Remark]
Hasa, inachukua muda mrefu.
Wewe ni kupunguza tu kila kitu chini.
Sababu kubwa kama Shake Shack au kitamu Burger, kama got kuondoa
ya buzzers wale na alifanya wewe, wateja kusimama mbele
ya line mpaka chakula ni tayari kabla ya hata kuchukua ili
ya mtu nyuma ya wewe ni wazi
kupitia kuweka kupungua chini.
Watu kuanza kuondoka, ninyi aina ya kuteka pakiti.
Unaweza kufanya idadi yoyote ya mlinganisho hapa.
Lakini katika muda mfupi, ni pengine si jambo zuri
kwa biashara au kwa server.
Hivyo Asynchronous code ni kawaida nzuri angalau
katika kesi hii, lakini ni dhahiri kuanza kusababisha baadhi ya Angst.
Na kwa kweli mimi kuthubutu kusema wakati kwanza kuandika mambo haya,
itabidi kuchukua kidogo kidogo ya kupata kutumika.
Kwa hiyo, hebu kuanza kuwapa wewe na baadhi maktaba
na mbinu za kufanya hii rahisi kidogo.
Kwa hiyo, moja ya kawaida maktaba ni maktaba maarufu
siku hizi, hii mtu mmoja aitwaye async.js.
Na kama mengi ya node.js maktaba au modules,
haya yote ni wazi chanzo.
Wao karibu wote wanaishi na kupata kitovu hifadhi za seli ambayo ni aina
ya kuwa de facto mahali pa kuhifadhi mambo haya.
Na kisha kuna miundombinu yote
kwa ajili ya kufunga mambo haya aitwaye NPM, Node Package Meneja
ambayo kama wewe ni ukoo na EvanTube ni aina
ya kama programu au programu kupata.
Kama wewe ni ukoo na Red Hat na Fedora
kama katika appliance, ni kama yum.
Lakini ni node - ni meneja mfuko tu
kwa mazingira fulani.
Kwa hiyo, sisi unaweza kushusha na kufunga mambo kama maktaba async
na pia ni mmoja mwingine aitwaye kusisitiza maktaba au moduli.
Lakini hizi FS kama mbali, HTTP, njia,
yote haya ni kuja kujengwa katika node.
Hivyo kama sisi kwenda maandiko API, itabidi kweli kuona kwamba kujengwa
ndani ya node kupata kwa bure kundi zima la modules.
Lakini mengi ya watu nzuri juu ya internet kuwa alifanya kadhaa
kama si mamia ya maktaba nyingine
kufanya mambo vizuri au tofauti.
Kwa hiyo, basi tuangalie jinsi maktaba hii kazi.
Hivyo, wengi ya kanuni hii ni kufanana kwa sasa.
Nina njia kuwa kuundwa juu juu.
Na sasa mimi nina wito async.series.
Hivyo maktaba async, ni tu maktaba kwamba utapata
kupitisha au kuongeza kawaida ya kazi ya kupata mmoja aitwaye
baada ya mwingine tu kwa aina ya kuepuka kuwa suala indentation,
na kweli tu akili Angst kwamba invariably kutokea
angalau wakati wa kwanza kupiga mbizi katika hili juu yako mwenyewe
na programu asynchronously.
Kama katika kando, kama wamechukua 161 na umefanya kushughulikiwa na kufuli
na kuongeza hali na wote ya kwamba, Asynchronous code
na mazingira kama node.js ni kweli sana,
rahisi sana arguably
kuliko kweli kuandika multithreaded code.
Wowote na multithreaded code,
una hali ya kuongeza.
Wewe kuwa na wasiwasi kuhusu nyuzi mbili zenye
kwa rasilimali hiyo disk au kumbukumbu.
uzuri wa JavaScript
katika node.js ni kuna literally thread moja tu,
ambayo ina maana ya browser
au server unaweza tu kufanya jambo moja kwa wakati mmoja.
Ni tu juu yenu, programu
kuweka mfano wa akili kwa jinsi gani aina ya foleni mambo
na kufikiri jinsi ili code yako.
Lakini kamwe kuwa na wasiwasi kuhusu kuongeza hali ya
katika kabisa kwa njia hiyo hiyo katika angalau kwa Raw code kama hii.
Hivyo, ni kidogo vigumu grack hapa.
Lakini - Hivyo basi mimi kufungua maandiko kwa muda tu.
maktaba async.js ambayo vile vile ni googleable sana,
anaishi katika GitHub repot kama kura wao.
Sidhani ni sketchy, siyo.
Hebu kitabu chini kusoma Me hapa.
Hivyo, maktaba async hutoa rundo zima
ya mbinu ndani yake.
Kwa mfano, kuna njia aitwaye kila mmoja,
ambayo kama mimi bonyeza hii tu kuona maandiko yake kwa sasa,
hii ni kazi au njia kwamba utapata kufanya kitu
kama nne kila lakini katika sambamba.
Wao ni wote kwenda kutokea uwezekano wa katika sambamba.
Na njia ya kila ni tu kwenda na kurudi na wewe wakati wote
ya iterations ni kamili.
Hivyo labda wao kutokea moja baada ya nyingine.
Kusema ukweli, wao kutokea kimsingi katika sambamba.
Lakini njia haina nitakuita tena.
Haina buzz yako buzzer mpaka wote
ya mambo una iterated juu ya kumaliza.
Hivyo, ni njia tu nzuri
ya kuepuka kutumia nne rahisi kitanzi
lakini kwa kweli kufanya kitu asynchronously.
Lakini sasa zaidi ya moja kwa moja kuhusiana na mfano huu,
taarifa kuna hii mfululizo mbinu.
Na napenda tu kuvuta up rahisi kisheria mfano.
Hivyo maktaba async, mfululizo njia inachukua katika kama alisema
na mabano mraba katika safu.
Ni data gani aina ya mambo
katika safu hii ya msingi juu ya mfano rahisi?
Hii ni safu ya kazi.
Hivyo katika C, kuita yao kazi kuyatumia.
Katika JavaScript, kuna zaidi vizuri rejea kwa kazi
au kazi bila majina.
Na hii ina maana tu, arrays
bila shaka ni amri kutoka sifuri juu juu.
Kwa hiyo, wao kuhifadhiwa utaratibu ambao ni mzuri
kwa mfululizo, 'sababu mfululizo bila shaka njia kufanya kitu
ili si katika sambamba.
Kwa hiyo, hii ina maana tu kwamba hii kazi kupata kunyongwa,
basi hii moja, basi hii moja, hii moja, basi hii moja,
hata hivyo wengi kuna
mpaka hatimaye hiari callback inaitwa.
Hivyo, taarifa dhana hapa.
Na hata kama hii ni maktaba moja guy ya,
ni mwakilishi wa kawaida sana JavaScript dhana
ya tena kwa kutumia callbacks.
Hivyo, taarifa nini kufanya hapa.
Katika kazi ya kwanza kuwa kupita katika kupitia safu hii,
wewe defined bila majina kazi tu na kazi.
Lakini taarifa kwamba inaonekana kulingana na nyaraka hii,
kazi ambayo bila majina lazima kuchukua hoja callback.
Hiyo ni kwenda kuwa pointer au kumbukumbu ya kazi
kwamba unapaswa kuwaita wakati yako code ni tayari kurudi thamani.
Hivyo tena, tofauti na kwa ajili tu ya programu kawaida kiutaratibu
ambapo wewe ni kutumika kwa kurudi maadili mara moja
kuwa tofauti moja kwa kutumia maktaba kama hii
katika programu Asynchronous zaidi kwa ujumla, ni wakati wewe ni tayari
kurudi thamani kutoka database, kutoka faili,
kutoka hesabu kujieleza, ni juu yako
kuwaita kazi callback.
Na kitu kizuri kuhusu maktaba hii
tukisoma maandiko makini zaidi ni kwamba,
ikiwa na tu kama yote ya eneo callbacks aitwaye
bila Error kitu, itakuwa jambo zima kufanikiwa?
Hivyo kwa maneno mengine, kama kuna 2,
kama kuna 10 bila majina kazi
katika safu hii kwa hiyo katika mfululizo huu,
tu kama wote kufanikiwa,
mapenzi ya mwisho hiari callback kuchukuliwa na mafanikio?
Kama mtu yeyote kati yao inashindwa, kila kazi
baada ya itakuwa si hata wauawe.
Hivyo, ni njia nzuri ya aina ya kuwa na daisy mnyororo
kwamba aborts mapema kama kitu fulani kitaenda vibaya.
Hivyo kuona hii katika mazingira, hapa ni jinsi gani tunaweza re-kutekeleza
kwamba mpango wa awali.
Mimi kupata njia kama kabla, hivyo hii ni sehemu rahisi.
Mimi nakala kuweka hii code mifupa
kutoka kwa nyaraka huko async.series mabano wazi,
kufungua mraba bracket.
Na sasa taarifa mimi na moja kazi katika mwanzo huu
ya pili, tutaweza kuona ambapo sisi kwenda kutokana na hili.
Na sasa taarifa, ni tata kidogo kwa mara ya kwanza
lakini mkazo tu kwa ni mstari kwa mstari.
Fs.stat maana kupata takwimu au nini si ya njia hiyo.
Wito callback hii wakati tayari.
Kanuni hii ni sawa mbele.
Kama kuna kosa, kuna tofauti moja sasa.
Tena, dhana ya kawaida sana katika programu node.js ni
kama kitu fulani kitaenda vibaya na callback mahitaji ya kujua
kwamba kwa mkataba huo, kwanza hoja ya callback ni kwenda
kuwa hakuna, kama wote ni vizuri au rejea Error kitu,
mji mkuu wa E. Ni kama Error darasa ambazo zipo duniani
lakini zaidi juu ya wakati mwingine.
Hivyo kwa kufanya hivyo, kama kuna makosa, nini maana?
Vizuri kulingana na kile mimi alisema mfululizo gani,
ni kama kitu huenda vibaya, sisi tu aina ya kutaka
kutoa mimba mfululizo mzima kazi ya majina wito.
Hivyo, yatosha kwa ajili yangu na tu kurudi callback kupita
katika Error kitu.
Kwa sababu kama stat alitoa mimi nyuma makosa,
Mimi naweza kujenga mpya Makosa kitu yangu mwenyewe,
lakini mimi si kweli huduma kwa,
Mimi nataka tu kupita chochote kosa ni kwamba kweli kutokea
hivyo siwezi kupita kwa callback hii.
Na tu kuwa wazi, kurudi ni si madhubuti muhimu.
Mimi kimsingi wanataka kufanya hivyo lakini nilitaka sasa kufanya "kurudi;
/ / Hivyo kwamba hakuna zaidi code hapa executes ".
Hivyo tena nyingine ya kawaida mkataba katika JavaScript,
ingawa wewe si kurudi thamani per se,
unataka kupita thamani kwa kazi callback
lakini kisha unataka kuacha utekelezaji
ya kazi uko katika, njia yasiyo na maana
kufanya hivyo ni kuwaita kurudi hapa.
Lakini kuna kitu kibaya,
sisi ni kufanya tu kurudi callback makosa hata ingawa ni kwenda
kurudi katika thamani kisichojulikana.
Haki ya wote, hii haina kurudi thamani uwezekano mkubwa.
All I huduma ya juu ni bweni utekelezaji zaidi.
Hivyo, conflation yangu ya hizi mistari miwili ni stylist
mkataba tu kuwa na idadi ya line
ya maadili ya mimi tu aliandika 2-1.
Hivyo kile kingine?
Kama kuna si kosa -
kweli kuwa wazi Mimi naweza pia kuepuka
kwamba kwa kufanya kama mwingine.
Lakini tena, mwingine kawaida dhana ni kuangalia
kwa makosa yako juu juu na kisha tu kurudi badala ya kuendelea
kwa Indent code yako na elses na elses na elses.
Hivyo kama si file, sasa, unajua,
Nataka kushughulikia suala hili kidogo hasa.
Hivyo hapa kama katika Java au C + + au lugha nyingine chache,
hapa ni jinsi gani wanaweza instantiate kitu aina makosa kupita
katika ujumbe default ya si file
na hii ni kiasi fulani holela.
Lakini mimi nina dalili makosa yangu mwenyewe.
Na nini hii ya mwisho line labda yanamaanisha?
Yote ni sawa.
Kama kupita katika null kwa makosa parameter, kwamba tu maana
na mkataba wa yote ni sawa.
Hivyo, nini maana ya kutokea mantiki?
Kama null ni kupita kwa callback
kwamba maana hii bila majina kazi imefanikiwa
hivyo kusema.
Hivyo, nini lazima mfululizo njia inafuatilia na sasa hawana msingi
juu ya tafsiri yangu matusi mapema?
[Inaudible Remark]
Hoja juu ya moja ijayo, sawa?
Kama amerudi mashirika yasiyo ya null thamani, ingekuwa tu mimba
na hakuna zaidi bila majina kazi bila kupata kuitwa.
Lakini kwa sababu hana, basi hii kupata iitwayo ijayo.
Kwa hiyo, mantiki katika hapa ni pretty kiasi sawa kama kabla ya
na tutaweza kuona jinsi ya kusafisha hii juu zaidi katika wakati huu.
Mimi kutambua hii ni aina ya mengi
kunyonya wote kwa maneno na kuibua.
Lakini sasa taarifa, pili bila majina kazi ambayo nataka
kutekeleza katika mfululizo ni kujaribu kusoma faili.
Wito callback hii wakati uko tayari.
Kama kuna kosa, tu ishara ni kwa njia ya callback
hivyo kwamba mapumziko ya mambo haya aborts.
Mwingine kurudi null.
Lakini kwa nini mimi kupita katika hoja mbili?
Vizuri wakati huu kama mimi kusoma file na kupata nyuma
kama variable kuitwa data,
Nataka yanamaanisha si tu wote ni vizuri na kurudi null
kwa hoja ya kwanza.
Nataka kurudi halisi data kama hoja ya pili.
Kwa sababu kama mimi kusoma zaidi katika nyaraka,
taarifa chunk hii ya mwisho ya maadili ya Mabano ya mraba ina maana kwamba ni
mwishoni mwa mfululizo.
Kulikuwa na mbili tu bila majina kazi katika mfululizo huu.
Kama kulikuwa na makosa hapa, basi Najua kwamba moja ya viungo
katika minyororo hii ili kusema alishindwa.
Hivyo kwa maneno mengine, hitilafu hii ni kwenda kuwa Error kitu
kwamba ni null kama wapo wa guys hawa alishindwa.
Na kama hiyo kesi, mimi tu kwenda kudhamini na mimi nina kwenda
kusema 400 ambayo maana ombi kushindwa,
kwamba generic sana makosa ujumbe.
Na kisha, mimi nina kwenda kwa magazeti nje ujumbe wa kosa.
Hivyo, mimi si bothering kuwa super anal wakati huu,
Mimi si kwenda kutofautisha kati ya 500 na 404 na 403,
Mimi nina aina tu ya upofu kupitisha mkono wangu
na kusema kitu potoka.
Lakini kama hakuna alifanya kwenda vibaya,
Mimi naenda kutuma res.end kupita data hii.
Sasa hii inaonekana kidogo fumbo.
Lakini tena kama mimi kusoma nyaraka,
Hoja ya pili kwa hii ya mwisho, ya mwisho callback,
guy hiyo tu ifanyike mara moja mfululizo inafanywa
utekelezaji au sehemu kuna ya, hii ni kwenda kuwa safu
ya hoja zote pili
kwamba walikuwa kupita kwa callback.
Sasa, zinageuka kuwa tu kiungo katika mfululizo huu
kwamba kweli kurudi pili Hoja ni hii moja hapa.
Hivyo nina kwenda kwa aina ya juu ya leap ya imani tu kutumia kudhani
kwa wakati huo mwisho ni njia
kwamba anatoa mwisho mambo ya safu.
Kwa sababu safu hii hiyo kuwa kupita
kwangu ina indicies mbili, sifuri na moja.
Ni zero tu hana thamani kwa sababu guy hii anarudi -
haiwezi kupita katika pili hoja lakini guy hii haina.
Hivyo matokeo bracket zero ni kitu,
matokeo bracket moja ina nini,
kama tumekuwa kufuatia pamoja hadi hatua hii?
file, hello, maudhui ya dunia labda,
hivyo kwamba ni jinsi gani mimi kwa kweli magazeti yake.
Na nimalize moja undani hapa.
Kama mimi kufanya aina hii ya zamani shule, kama nataka kupata
katika mambo mwisho, kama mimi naweza kufanya matokeo [results.length-1],
hiyo ni aina ya njia ya zamani shule
ya kupata mambo mwisho katika - au zero index safu.
Lakini kama katika upande, kukumbuka kuwa nilikuwa maktaba hii
hapa kusisitiza ambayo kwa mkataba inaitwa tu
literally kusisitiza tabia ambayo si maalum,
tu inaonekana baridi kama ishara ya dola gani kwa ajili ya jQuery.
Hii ni msaidizi njia kusisitiza dot mwisho
kwamba gani hasa kitu kimoja.
Na kama wewe sijawahi kutumika kabla ya kusisitiza JS wote
kwa upande wa mteja coding
na upande server ni maktaba ajabu muhimu
kwamba watu wengi ilivyoelezwa ni kama jQuery ina kila
ya mbinu, watu alitaka alikuja na JavaScript yenyewe.
OK.
>> Hivyo, kama pretty kwangu na Mimi nilikuwa kuangalia katika mfululizo,
wewe kama callback kama hoja?
>> Ndiyo.
>> Kama hivyo wakati wewe kweli kama kushinikiza kwamba katika,
na kama ni nini maana wakati tu
kama callback na kisha kufanya kama -
[Inaudible Remark]
>> OK, swali zuri.
Hivyo, basi mimi kuvuta up async kuu ukurasa hapa
au nyaraka juu ya GetHub.
Hivyo hii ni ya kisheria muundo.
Kama wewe ni wito kwa kutumia hii hasa njia mfululizo,
kuna sehemu mbili kubwa yake.
Moja ni safu ya kazi bila majina
na mbili ni callback ya mwisho kazi hiyo ni kweli
kuuawa kwa sana mwishoni mwa mfululizo.
Sasa, kama sisi kuvuta kidogo karibu juu ya kwanza
mambo hayo kubwa, safu ya kazi bila majina
na matakwa ya hii nyaraka guy ina
kuwa bila majina kazi ambayo inachukua
katika moja hoja aitwaye callback au foo au bar, haijalishi
lakini yeye kuiita callback.
Na hii ni aina ya buzzer yako kwamba Shake Shack mikono yenu.
Hii ni njia ambayo unaweza kurudi thamani
kwa wateja kwa sababu wewe hawezi tu wala literally kurudi.
Una kufanya hivyo kwa njia ya callback hii.
Kwa sababu kama ndani ya hii kazi ni baadhi mbio polepole
code kama swala database, kusoma file kutoka mfumo wa faili,
hawataki kusubiri huko na kuzuia kila mtu mwingine,
unataka simu callback.
Kwa hiyo, hili ni literally jina la hoja.
Lakini kama katika C, wewe na kuyatumia kazi.
Katika Java una mbinu mfumo wa kumbukumbu
na sawa hapa katika JavaScript.
Hii ni kutofautiana lakini aina yake ni kazi.
Hivyo tu kwa kuandika jina lake kama callback au foo
au bar, kisha wazi mabano na mabano karibu,
wewe ni utekelezaji kwamba juu ya kazi hiyo.
Na kupita null ambayo maana null makosa na moja
ambayo ina maana hii ni data kwamba mimi nataka kupita in
Na kisha chunk kuwa wazi, hii ni callback mwingine.
Na si aitwaye callback,
tu conceptually ni callback njia kazi
kwa sababu ni kuitwa kwa ufafanuzi
ya maktaba mwandishi huyu wakati mfululizo mzima amekamilisha
au subset yake kama makosa kilichotokea mapema.
Kwa hiyo, jina la callback kazi, wito callback kazi,
Jina la callback kazi, wito callback kazi,
callback mbalimbali kazi zote kwa pamoja.
>> Sisi sasa na kama kufafanua callback?
>> Hapana, kwa sababu guy hii itapita katika safu yako
kazi za majina,
pointer na kanuni anataka nitafanya.
Hasa, wote haki.
Kwa hiyo, tafadhali kusema kwamba code anapata kidogo rahisi.
Hivyo, unaweza.
Na kama wewe ni kama mimi, kuchukua faraja katika angalau kujua,
inachukua muda kwa kuzoea hii.
Lakini tunaweza safi hii juu kidogo,
si kutupa sana katika kwenu lakini hapa ni tofauti mwingine
na kutumia yake njia nyingine
katika maktaba hiyo aitwaye maporomoko ya maji.
suala la mafanikio ya ambayo ni tofauti na mfululizo ambapo kila
ya wale bila majina kazi kunyongwa kimsingi
kujitegemea ya kila moja ya mengine.
Maporomoko ya maji kama jina la kupendekeza inaruhusu kazi kushinda
na aina ya kupita katika maadili kwa kazi ya chini,
aina ya kama kuteleza ya maji.
Hivyo suala la mafanikio ya hii ni kwamba naweza aina
ya kutumia kwa faida yangu.
Katika async.waterfall, taarifa zifuatazo.
Naweza kuwaita tu fs.stat kupita katika njia
kwamba nataka kupata takwimu juu ya.
Na kisha nakumbuka kabla ya ilikuwa na wajibu bila majina
kwamba alikuwa hoja mbili kupotea,
esults na kisha mimi kuitwa callback kazi manually?
Katika neno nyingine ni tu kuwa wazi, kukumbuka kuwa mapema
katika async 2, mimi alifanya yote ya kazi hii nasty.
Mimi kuitwa fs.stat kupita katika P,
alitangaza majina yangu mwenyewe kazi.
Mimi kisha kuangaliwa kama kosa ni si null basi mimi alifanya hivyo,
mwingine mimi kwamba, yote uzuri wa zifuatazo mikataba
kama katika node.js ni kwamba callback kazi kwa ujumla ni maana
kuchukua hoja angalau moja, Kosa kitu ikifuatiwa na zero
au muhimu zaidi maadili.
Hivyo taarifa dhana hapa,
callback hii kazi mimi nina kutangaza ifuatavyo hasa
dhana kwamba guy huu async maktaba gani.
Ambayo ni ya kusema hayo, kwa nini ni Mimi utekelezaji wa callback yangu mwenyewe
njia wakati mwandishi wa hii maktaba ni halisi ya kukabidhi mimi
juu ya sahani hivyo kusema, a kazi callback naweza kutumia?
Hivyo, siwezi kupita tu katika rejea yeye kunipa
ili mara moja, mistari yangu kadhaa
ya maadili ya kuwa line moja ya kanuni.
Sasa, ambapo kufanya sisi kwenda na hili?
kazi ya pili ambayo Nataka nitafanya,
bila majina ijayo kazi katika safu hii
ya kazi gani zifuatazo.
Ilani ya kwanza stat ni kwanza hoja.
Hivyo kitu ina iliyopita tayari.
Sasa, guy hii ambao aliandika maktaba -
na mimi kusema guy kwa sababu ni guy.
Hii ni kijana ambaye aliandika maktaba hii ni dhamana nyaraka
kwamba kama kazi hii hapa hupita mimi nyuma Error kitu
au null ikifuatiwa na kukosa fahamu kutengwa orodha ya maadili mengine,
yeye kuhakikisha kwamba wale maadili mengine ni mitupu
kwa kazi hii bila majina ili kutoka upande wa kushoto na haki.
Na kile kutumika kwa kuwa tu callback kazi peke yake tu
inakuwa mwisho hoja hiyo.
Sasa, sijui mimi nina ambao kulenga tu unajua.
Lakini sasa, nini kuchukua mbali hapa?
Hivyo, tunajua kutoka nyaraka
au wanandoa kabla ya mifano
kwamba fs.stat hatimaye anatarajia callback na hoja mbili,
Kosa kitu ambayo ni Makosa kitu au null ikifuatiwa
ukihusishwa na stats kitu.
Basi, ikiwa mimi kufikiri juu ya kwamba, Makosa kitu kukosa fahamu stats kitu,
kwamba inafaa katika dhana ya maktaba ya mtu huyu.
Kwa hiyo, naweza tu kusema kwa sababu Mimi hakuna hoja ya pili
kwamba ni - kwamba kwenda kwa kupitishwa na fs.stat
kwa callback ni kupotea, stats kwa ufafanuzi wa maktaba hii,
Naweza kuweka pili jina hoja hapa
au chochote naweza kubadili jina hilo
kama nataka ikifuatiwa na callback hapa.
Kwa hiyo, siwezi kupita moja thamani kutoka hapa hapa.
Sasa, wote wa kanuni hii ingawa admittedly kwa kiasi fulani cryptic ni
angalau nakala kuweka kwa sehemu kubwa mbele.
tofauti tu ni taarifa hapa mimi nina kutangaza Error
kitu na sasa nataka kupata kidogo fancier.
Mimi kwa kweli unataka kujua nini makosa mara, hivyo mimi nina kwenda
Tuck ndani ya hii kitu a mali kiholela aitwaye code
ili Najua kwamba hii si file
kwamba lazima ruhusa, ni HTTP 403.
Hebu kumbuka kwamba kabla ya Mimi kupita Error kitu
kwa callback.
Na kisha Mwisho kujaribu kusoma faili, hivyo katika kesi hii,
maporomoko ya maji, nimekuwa kuvunjwa kanuni kutoka hatua mbili kubwa
katika hatua tatu ndogo.
Taarifa uzuri hapa,
Siwezi kuwaita fs.readFile kupita katika njia.
Na kisha sehemu ngumu kiakili, ni mimi tu kupita
katika callback guy ya.
kitu yeye kuwapatia yangu, mimi nina kwenda kupita kwa fs.readFile.
Kwa sababu sisi wote ni waliandamana mikataba ya huo,
kwanza hoja ya callback ni Kosa kitu au null ikifuatiwa
na kukosa fahamu au kutengwa orodha ya mambo muhimu.
Hivyo, nini maana ya sasa na kama mimi kusoma nyaraka mimi kufahamu
hii, callback mwisho sana, hii guy hapa nje
ya mabano mraba ni kwenda kuwa na kupita katika Error kitu
au null ambayo mimi inapaswa kuangalia kwa kama siku zote na hii code hapa.
Na kisha kwa ufafanuzi ya njia hii
katika nyaraka guy ya, thamani mwisho akarudi
kutoka kwenye njia mwisho katika safu yangu bila majina -
safu yangu ya kazi bila majina.
Hiyo, ni nini kusoma faili kurudi
na mimi nina kutumia kurudi loosely sasa.
I mean nini kusoma file kupita kama hoja
kwa njia ya kupiga tena mitupu yake?
Hoja mbili, kwanza ni Kosa kitu au null,
kwamba karibu kila mara kwenda kuwa na jibu.
Na jambo la pili ni kwenda kuwa kile kwa ajili ya kusoma faili?
yaliyomo ya faili, data kama sisi kuitwa ni mapema.
Hivyo, kwa kifupi kutangaza kupotea, matokeo,
na kuangalia kwa kosa hili ni aina ya boring sasa.
Mwingine, mimi res.end kupita katika matokeo.
Hii bila shaka mapenzi si kusawazisha katika kikamilifu
mpaka kweli kuandika mwenyewe.
Lakini kwa sasa, kuchukua mbali angalau ukweli
kwamba kuna inaonekana hii kawaida dhana, ambapo kama sisi
na waandishi wa maktaba kila aina ya fimbo
kwa mkataba huu ya mbinu callback.
Na hoja ya kwanza ni Kosa kitu au null.
Na pili na ya tatu
na vitu nne ni mambo sisi huduma ya juu na sisi aina
ya kufuata sheria na nyaraka.
Sisi ilianza na kificho kwamba uaminifu ni pretty mbaya.
Na hata kama hivi karibuni mfano ni kusema ukweli aina ya vigumu
wrap akili wako karibu, ni angalau kuibua,
Inaonekana kama ni kiasi stramare.
Na mara moja kupata starehe pamoja na hayo, hivyo ni rahisi zaidi
na hivyo ni kiasi kidogo kukabiliwa na mende kuliko mfano kwamba uliopita.
Hivyo, basi mimi kuonyesha jambo moja mwisho hapa.
Hili ni toleo la tatu.
Na - No, hebu kuondoka hii moja peke yake.
Hebu kwenda katika michache ya mambo mengine mwisho kama teasers.
Haki ya wote, hivyo katika server 2.
OK. Kwanza, maswali yoyote, Mimi najua hili ni mengi
lakini alitaka zaidi maelekezo, hivyo?
Wewe hakusema nzuri mafundisho lazima.
Yeah?
[Inaudible Remark]
Sahihi, wewe ni kimsingi ndogo kwa mfumo wa uendeshaji
kufikiri jinsi juggle wote wa mipira ya hizi kwa mara moja,
kusoma kutoka faili, kusoma kutoka database.
Na ni server hii JavaScript yenyewe kwamba katika minyororo moja.
Na kimsingi na kwa kweli,
kuna picha moja Mimi si kutupa up,
na siyo lazima mwangaza kwamba wote
lakini labda tutaweza kutoa ninyi kielelezo akili.
JavaScript yenyewe na node
hasa ina hii hivyo kuitwa tukio kitanzi.
Ambapo, unaweza kufikiria ya node.js, mpango
ni halisi kama usio kitanzi.
Ni tu kitanzi mwitu, kusubiri na kusubiri na kusubiri,
kuangalia kwa kazi ya kukamilisha.
Na kazi inaweza kuwa, kwenda kuchota kitu kutoka database
au hapa thamani kutoka database au kwenda kupata faili hii
kutoka disk au hapa kuomba kutoka kwa mtumiaji.
Aina yoyote ya tukio, kama vile browsers tukio inayotokana,
hivyo kama server tukio upande inayotokana.
Na yeyote mambo hayo kuanzisha matukio.
Ili mtu katika node.js, tu aliandika usio kitanzi,
pori kubwa kitanzi, kusubiri kwa ajili ya mambo kutokea.
Na kama mambo haina kutokea, ni kuishia katika foleni, sawa?
Hakika, database ili kurudi thamani.
Na faili mfumo, uendeshaji mfumo ili kurudi thamani
katika takribani huo huo lakini kuna pengine ni kwenda
kuwa baadhi ya kuagiza kwao.
Na node.js ni kwenda na kimsingi foleni
kama safu kubwa au vector, baadhi ya muundo data
kwamba mipaka yote ya mambo hayo.
Kwa sababu unaweza literally tu kushughulikia mmoja wao wakati huo.
Hivyo, wakati wewe, developer,
kuandika Asynchronous JavaScript code kutumia asynchronous
kazi, wewe ni kuruhusu hii kinachojulikana tukio kitanzi kwenda
kwa Jibu ijayo, sawa?
Hivyo, muda mrefu kama wewe mara moja kurudi kama wote
ya njia hizi asynchronous kufanya kama kusoma file na stat,
wao kurudi mara moja kwa sababu callback hatimaye
anapata nyuma.
Haraka kama wewe kurudi,
hiyo ina maana ya mtu mwingine unaweza kupata popped mbali hisa hapa
au kwamba wanaweza kupata popped mbali mbele ya foleni hapa.
Na hivyo, kuna katika ukweli serialization
wa kila kitu kinatokea,
hata kama hawa mambo yote unaweza kuwa kinachotokea katika sambamba
juu ya mfumo wa multithreaded.
Lakini node.js yenyewe na server walikuwa wanakimbia
kama thread moja.
Na upande wa chini ya kwamba ni t kufanya si lazima max
nje kompyuta yako uwezo ni kama hasa
kama una 16 ya msingi au hata kompyuta 2 msingi
na wewe ni mbio tu mfano moja ya node.
Lakini kama wameweza tena kuchukuliwa kitu kama 161,
kuepuka ndoto mkubwa ya maumivu ya kichwa linapokuja suala la
rangi hali na kufuli na semaphore
na kuandika kweli multithreaded code,
hivyo upsides na downsides.
OK. Hivyo, nyuma na kanuni hapa, napenda kupendekeza kwamba sisi kuanza
kurahisisha mambo kidogo.
Tuliona server moja kidogo iliyopita ambayo inaonekana kama hii.
Kwa hiyo, hiyo ni arguably pretty rahisi.
Lakini kama vile katika dunia ya PHP, kuna mifumo
kama Laravel na kuna mambo kama reli na Django,
kitu kimoja katika dunia node.js.
Na tutaweza kutumia zaidi wakati juu ya hili Jumatano
na katika mradi wa pili.
Lakini kama mimi kwenda katika server 2 directory,
taarifa mitizamo ya wanandoa hapa.
Hivyo hii ni - kuna kwenda kuwa mfano sawa
lakini ni kwa kutumia mfumo aitwaye express.js,
ambayo ni bure wazi chanzo programu kama reli na Django,
kama Laravel, hiyo ni tu hatimaye kwenda
kuwa unappreciated leo 'Sababu sisi tumekuwa kuandika
vile rahisi mifano.
Lakini imani yetu.
Haraka sana hii itakuwa kuwa rafiki yako
kwa sababu itakuwa kuokoa mengi ya TDS code.
Na dhana ya kawaida kwa maombi express.js ni
kuwa na app.js au server.js file ambayo ina mantiki
ya mpango wako au angalau hatua ya kuingia.
Unaweza kuwa na faili nyingi.
node moduli subdirectory ambayo ina maktaba
kwamba umefanya kupakuliwa kama async
na kueleza yenyewe kwa wengine.
Na kisha package.json, package.json inaonekana kama hii,
na unaweza kujenga manually au zana kujenga ni kwa ajili yenu
na ni halisi JSON file
na sehemu ya kuvutia ni maelewano hapa.
Tu kama katika Laravel, wewe na kwamba muuzaji directory
na alikuwa na wasiwasi kuhusu fedha na kufanya -
kweli uppdatering na Fundi au amri hiyo,
maktaba ninyi kuwa imewekwa,
vile vile kwa package.json hapa na kusimamia maktaba
na matoleo kwamba huduma ya juu.
Hivyo, kama mimi na package.json, Naweza tu kufanya NPM,
Node Package Manger kufunga, itakuja moja kwa moja kuangalia
wakati huo package.json file.
Kuangalia na kuona, je, mimi na toleo la karibuni
ya yote modules wachuuzi
katika node kusisitiza modules directory hapa au labda
katika baadhi mzazi au babu directory.
Na kama si, ni kwenda kushusha yao
na utaona rundo zima
ya mambo HTTP kwenda katika waya.
Hivyo kwa mfano, napenda kuonyesha yaliyomo
ya modules node kueleza tu.
Hebu kwenda mbele na ujasiri kufuta modules node
ili wote mimi na sasa ni hii.
Na kama mimi NPM kufunga, itabidi kuona kwamba ni kwenda kusoma
kwamba package.json file na tumeona pato sawa
hii katika dunia Laravel.
Ni kushusha zima rundo la mambo na kwamba
kwa sababu ya kueleza kwa upande inategemea rundo zima
ya maktaba ya watu wengine.
Kwa hiyo, wale wote ni aina ya kuwa kupakuliwa recursively.
Hadi sasa, kama mimi kufanya katika LS tena,
kuna modules yangu node directory nyuma
na kueleza kama nyuma.
Hivyo ni njia tu ya kurahisisha mfuko wa usimamizi.
Sasa, kama sisi kuangalia app.js file, hii ni kwenda
kuwa reversion kwa mtandao wetu wa mwanzo server
ambapo sisi tu mate nje "hello, dunia".
Lakini taarifa mitizamo hapa,
kwanza tunahitaji kueleza moduli, basi tuna line hii
ya kanuni ambayo unajua kutoka kwa nyaraka.
Wewe halisi kutibu kwamba variable moduli kama kazi,
hivyo wazi mabano karibu mabano maana nitafanya hivyo.
Hiyo inaenda inaonekana kurudi kitu tunakwenda
ujumla simu programu.
Jinsi kazi?
Mimi kwa kweli sijui.
Mimi itabidi basi mtu mwingine, unajua, katika dunia ya kueleza kuandika kwamba.
Mimi nina kwenda sasa kusimama juu ya mabega yake ili
kufanya maombi yangu mbio kidogo rahisi.
Hapa, mimi nina kwenda kusikiliza juu ya bandari husika
ambayo inaweza kuwa zaidi ya kitu chochote.
Na hapa ni kificho kwamba ni labda zaidi kukumbusha sasa
ya Laravel na routes.php.
Hivyo hii ni karamu rahisi, mimi nina tu kwenda bayana njia
kwa kufyeka nyota, hivyo kila kitu ni kwenda kufyonzwa
na ombi hili handler.
dhana ya ombi handler ni kazi yake bila
na hoja ombi
na majibu kitu tu kama ilivyokuwa kabla.
Na res.send katika njia ya kueleza kutuma code ikifuatiwa
na chochote unataka kutuma.
Na bila shaka, unaweza kufanya kitu fancier
kwa kweli kutuma files au HTML
au dynamically yanayotokana maudhui.
Lakini kwa sasa, kila tulivyofanya ilikuwa mate nje hello, dunia.
Tukienda kwenye server tatu, hii ni hata fancier tu
kuonyesha baadhi ya kazi.
Na tutaweza kuonyesha hata sexier version
hii juu ya Jumatano.
Lakini kama umefanya umewahi kusikia ya soketi IO labda,
hivyo kama Nadhani Jonathan au mtu alisema mapema,
moja ya mambo node ni kweli inayojulikana
kwa ni wakati yake halisi tabia, haki?
Fikiria juu ya PHP katika MySQL, kama wewe walikuwa kutekeleza mazungumzo server
katika PHP ambapo watu wawili inaweza kufungua dirisha browser foo.com
na kisha kuanza IMing kila nyingine, Alice katika dirisha moja,
Bob katika mwingine ili kila mmoja wao anaona yake
au ujumbe wake katika dirisha nyingine.
Jinsi gani unaweza kufanya hii katika PHP na MySQL?
Kutumia au si kutumia Laravel aina ya halina maana yoyote, unaweza kuwa na
kama index.php file.
Na got - katika baadhi ya matukio got mate
nje ya aina, hivyo kuna kwenda kuwa fomu HTML
kwamba pengine elekeza si kupitia fomu ya kawaida kuwasilisha
lakini Ajax pengine, sawa?
Hivyo, juu ya kuwasilisha handler, hivyo unapoandika katika uwanja wa maandishi,
wewe hit kuingia na kisha anapata alimtuma server kupitia Ajax.
Ni nini basi kufanya juu ya server?
Hivyo, nimepata index.php
au kitu dot PHP kwamba kupokea katika HTTP parameter
kutoka kwa mtumiaji, Alice au Bob ya ujumbe wa papo, unafanya nini
nayo ili kueneza ni kwa Bob au Alice, kwa mtiririko huo?
I mean wewe literally kuwa na zana ambayo
kufanya hivyo katika min yako.
Hivyo kama ungefanya nini?
Una dakika moja kwa kutekeleza mpango huu.
Yeah?
[Inaudible Remark]
Perfect. Haki, hivyo nimepata database.
Tunajua kidogo kidogo kuhusu MySQL.
Hivyo, una meza kwamba ujumbe,
labda kuna mara muhuri, user ID,
mwili wa ujumbe yenyewe kuundwa kwamba,
updated kuwa na yote hayo.
Hivyo, kuhifadhi katika database.
Na kudhani Alice inapeleka Ujumbe wa kwanza, jinsi gani Bob kupata
kwamba ujumbe sasa kutoka database?
>> Ni inaweza kuwa baadhi ya Ajax jibu kwamba ni mara kwa mara kwenda
nyuma database juu kupata [inaudible].
>> Hasa.
Hivyo Bob wa kanuni ambaye ni code ni sawa na Alice ni aina tu
uhusiano wa symmetrisk,
Kisakuzi Bob ina baadhi ya kanuni Ajax kwamba pengine labda kila 30
sekunde kuunganisha server kupitia Ajax usawazishaji,
kuna ujumbe mpya?
Je, kuna ujumbe mpya?
Kila sekunde 30 ni kwenda kuwa aina ya suboptimal
kwa sababu yeye ana kusubiri hata
kama Alice literally tu ujumbe.
Hivyo, browser Bob ya anaweza kila pili kugonga server.
Lakini hiyo ina maana Alice ya browser ni kupiga server
kila pili.
Nini kuhusu Charlie [Kudhani spelling]
na David [kudhani spelling] na Edward [kudhani spelling]
na kila barua nyingine ya alfabeti?
Tatizo ni nini ya mbinu hii?
mengi ya hits nyingi -
I mean wewe ni ufanisi tu Dosing mbele yako mwenyewe
au DDOSing, Kusambazwa Kunyimwa ya Huduma mashambulizi
kwenye tovuti yako mwenyewe, kwa kuwa wote
wa watumiaji hawa kukimbia JavaScript kificho kwamba ni pinging tu
heck nje ya server yako hata kama idadi holela,
Asilimia 80 ya wakati hakuna mtu kusema chochote
katika chumba mazungumzo.
Lakini wewe ni kuangalia tu ili kuhakikisha ya hayo.
Hivyo PHP katika mengi ya lugha ni tu si nzuri
kwa ajili ya mawasiliano muda halisi.
Kwa sababu katika PHP kukumbuka kuna hakuna kumbukumbu ya kati, sawa?
Una kikao vitu ambayo inajenga udanganyifu
ya kuhifadhi kati lakini kwamba juu ya kwa mtumiaji msingi.
Huwezi kuwa na kumbukumbu kimataifa kama wewe kufanya katika Java servlet
katika ukoo au nyingine sura ya kazi kama hiyo.
Node.js ingawa, una kimataifa kumbukumbu 'sababu una
server moja na kwamba unaweza kukumbuka kitu chochote inataka
kuhusu watumiaji wote.
Na bado unaweza na database.
Lakini jambo zuri kuhusu node.js pia ni kwamba ni bora zaidi
kuliko kitu kama PHP na kujenga udanganyifu
ya utunzaji nyingi mambo mara moja.
Na kwa kweli kama katika kando, unaweza kutekeleza watumishi kuzungumza katika PHP,
lakini bila kawaida ya kufanya kitu kinachoitwa muda mrefu kupigia kura
ambapo huna Ping server kila pili.
Wewe Ping server, server haina kukabiliana na wewe
kwa zaidi ya 30 sekunde, ni halisi anakaa
katika kitanzi kusubiri na kusubiri.
Na hundi server kama kuna data mpya katika database
na mara moja tu anaona, "Oh, hapa ni ujumbe kutoka Bob, "
gani kujibu HTP server?
Hivyo athari katika browser yako ni kwamba IE icon au Mozilla
au chochote kuvaa tu inazunguka kwa sekunde 30 wakati huo.
Lakini kichwa ni, huna na 30 maombi uhusiano
katika sekunde 30, una moja.
Hivyo ni wito kwa muda mrefu kupigia kura.
Lakini hata bora ya kisasa mtandao browsers ni kitu kinachoitwa
WebSocket, ambayo kuchukua CS143,
unaweza ufanisi kufanya TCP uhusiano kutoka kwa wateja
kama browser server na kisha hutegemea ni
bila ya kutumia karibu raslimali nyingi
kama HTTP wanaweza jadi kufanya.
Na soketi IO ni maktaba node.js
kwamba inafanya kuwa rahisi sana kwa kufanya uhusiano tundu
au ndoto huko katika browsers kwa miaka
ili uweze kutekeleza hili muda halisi ya utendaji ya.
Kwa hiyo, hapa ni mfano.
Mambo haya juu juu anapata ngumu zaidi kidogo
lakini ni zaidi ya nakala na kuweka kutoka kwa nyaraka socket.io 's.
Hapa ni sasa zaidi ombi sahihi handler.
Kama mtumiaji ombi a kufyeka, nini faili mimi kwenda
kuwa inaonekana kutumika juu yao?
Index.html.
Na kuna baadhi ya mwezi mambo hapa mkondo
ambayo mimi nitakuonyesha katika muda tu.
Lakini hii ni njia nyingine
ya grabbing file a kidogo kwa ufanisi zaidi
kuliko tu kufanya fs.readFile.
Ni nadhifu kidogo hasa kwa files kubwa.
Hadithi hivyo muda mfupi, mistari haya tu kutumika
up faili inayoitwa index.html
ambayo kwa sasa kudhani ina HTML fomu ambayo Alice
na Bob wanaweza intercommunicate.
Mwisho, io.sockets.on, hivyo hii linatokana na line hii hapa.
Kwa hiyo, mimi nina kusoma tu nyaraka io.socket anitiaye
upatikanaji wa kinachojulikana WebSocket na browser,
kati ya kivinjari na server.
Mimi nina kusikiliza maalum kwa ajili ya tukio uhusiano ambayo njia
wakati mtumiaji kwanza hits server kujaribu
kufungua uhusiano huu, mimi nina kwenda kuwaita wito huu nyuma.
Na sasa, mimi nina kwenda kufanya yafuatayo.
Kila sekunde tano, nini mimi kwenda kufanya nini?
Mimi nina kwenda emit au kutangazwa kama wewe kumbuka mwanzo,
lugha graphical ingekuwa kwamba vitalu matangazo?
Hivyo, wewe ni kwenda emit
au kusababisha tukio liitwalo kiholela kutoka kwa seva.
Na itakuja kwa vyenye ujumbe Ping
na tarehe ya sasa.
Kwa hiyo, hili ni halisi mazungumzo server kwamba Alice
na Bob wanaweza kutumia, lakini ni aina ya mazungumzo server automatiska
ambapo ujumbe ni tu aina ya Sonar pings.
Ni tu tarehe wakati kwamba ni kupelekwa kila sekunde tano.
Kwa hiyo, kama kweli kuendesha hii kitu - na hiyo ni yake.
Kuwa wazi hapa chini, taarifa hii ni magogo chini tu hapa.
Hivyo, basi mimi kugeuka macho hilo.
Hebu kufanya node ya app.js.
Hebu kwenda browser yangu.
Reload ukurasa wa nyumbani hapa.
[Pause]
Na napenda karibu mkaguzi.
Kila sekunde tano, nina maandamano hata kama si
maingiliano kwa ajili ya binadamu
ya kitu ambacho ni kinachotokea asynchronously.
Katika taarifa browser, hakuna icon inazunguka.
Ni kutumia kipengele fancier ya Chrome katika browsers kisasa
ya kudumisha tundu uhusiano chini ya Hood
na ni kile kinachoitwa ujumla pub / ndogo mfano,
kuchapisha / kujiunga mfano, ambapo hatujafanya
kwamba kabisa waziwazi hapa.
Lakini nini ni nzuri kuhusu hili ujumla pub / ndogo dhana ni
kwamba unaweza kuwa na mchapishaji moja.
Katika kesi hiyo kati server na wote
ya mtu binafsi browsers ni wateja.
Alices na Bobs ya dunia wanaweza kujiunga na yake,
hivyo unaweza relay ujumbe kati ya idadi yoyote ya watumiaji.
Na hata kama tena sisi ni si kuona interactivity,
tulikuwa na labda mistari 12 ya maadili ya tu ya kufanya hivyo.
Na pengine si leap kufikiria jinsi unavyoweza mjeledi
nje index.html file ambayo ina kweli HTML fomu,
kidogo ya jQuery kificho na Ajax kwamba haina kutuma mchana
lakini tu inapeleka chochote Alice au Bob aina kwa server
na kisha server itakuwa relay nje.
Na mimi ahadi glimpse saa moja jambo la mwisho tu
tease kwa hili.
Kama sisi kwenda katika mkondo wa sifuri na moja,
utaona kificho kwamba tu tofauti kidogo hapa.
Hivyo tu wameweza kuona hivyo, hii ni mbadala
na kile kinachoitwa fs.readFile njia mapema, ambapo,
unaweza kuwaambia node.js, "Nenda kusoma faili hili katika kumbukumbu.
Lakini kama ni kubwa tu kutoa mimi chunk kwa wakati. "
Na unaweza kujua kutoka CS165
au 161 mifumo ya faili kuwa tofauti
utendaji mali.
Unaweza kutaka kusoma katika vitalu 512 ka
au 2 kilobytes au chochote.
Hii ni optimize njia ya kupata nyuma ya faili iteratively
ili uweze mate nje haraka kidogo zaidi
browser au yeyote mteja mwisho ni.
Kiasi kubwa sana ya bidhaa leo na tunakwenda kwa kupiga mbizi
kwa undani zaidi juu ya Jumatano na Tim [kudhani spelling]
hasa kuangalia jinsi ya sisi unaweza kutafsiri baadhi ya mawazo
kutoka nusu ya kwanza ya Bila shaka Laravel na mifano
katika maktaba kwamba yeye mwenyewe aliandika aitwaye Bookshelf.js
ambayo ni kuzidi kuwa maarufu katika jamii
kwa sababu anakupa zaidi ya hayo,
ikiwa si zaidi ya utendaji wa fasaha
ambayo kukumbuka ni kwamba ufahamu maktaba ya Laravel,
hivyo zaidi juu ya kuwa na zaidi jinsi
kuendeleza fledged full programu juu ya Jumatano.
Tutaweza kuona wakati huo.