>> Kaya, may na sinasabi,
uri ng isang simpleng lamang panimula sa mga modelo
at ang modelo sa bagay na JavaScript.
Hindi namin pagpunta sa shift Gears Medyo na makipag-usap
tungkol sa higit pa na JavaScript sa server at ang bookshelf Library
at ang koneksyon Knex Library.
Kaya, maaari mong talagang lamang -
kung naghahanap ka para Bookshelf.js dapat itong maging medyo madali
upang makita, ay dapat na unang resulta, at bookshelf
tulad ng nabanggit lamang David ay nagbibigay ng maraming istraktura
sa paligid ng object JavaScript at nagtatrabaho sa kanila relationally
sa mga database ng pamanggit.
Kaya, ng maraming mga katulad na mga tampok kung sino ang talagang mabigat pinukaw
sa pamamagitan ng ORM Laravel bilang na rin ang Backbone.js,
na kung saan ay isang front end ng MVC library na nagbibigay-daan sa iyo
upang buuin ang iyong code, katulad ng kung ano ako ay nagpapakita ng
gamit ang mga halimbawa ng mga mga modelo kung saan maaari kang -
sa halip na nagkataon lang masusuka klase
sa iyong mga tanawin dito at doon.
Nagbibigay ito sa iyo ng mga modelo at mga koleksyon ng mga modelo
na kung saan ay dapat na kumilos bilang uri ng isang solong punto ng katotohanan
tungkol sa mga data para sa ang iyong application.
At pagkatapos ay makinig ka sa, bilang mga mga modelong pagbabago, sabihin mo, OK,
muling i-render ang template na ito dito at ang isang ito sa paglipas dito
at hindi magdagdag lang ng klase dito, magdagdag ng klase doon at uri ng pick
sa tagapili at gawin ang mga spiderweb ng jQuery code.
Nagbibigay ito higit pa sa isang klase-based istraktura sa mga indibidwal na piraso,
ngunit isang mahalagang bahagi ng na aklatan ay ang mga modelo
kung saan ay mayroon ng isang katulad na istraktura sa kung ano ang mga modelo bookshelf gawin.
Kaya, kung hindi ka pamilyar sa Bookshelf Ikinalulungkot medyo din sa iyo
medyo pamilyar sa Backbone.js mga modelo,
at gusto ko inirerekumenda ng pagtingin sa ito.
Kaya, ang ilan sa mga pangunahing tampok
na nagbibigay ito ikaw lamang ang kakayahang magtakda ng data sa isang object
upang tumawag fetch, na Ibinabalik ng isang indibidwal na tala
mula sa database, lumikha ng relasyon bilang katulad
sa ano Aaksyunan mo sa loob ng sa Laravel
kung saan maaari mong sabihin ng pasyente magtakda ng isang pamamaraan na tala
at sabihin na ito ay nanalo ng tala
kung saan sa rekord bagay ay pangalan ng talahanayan talaan ng kalusugan.
Ni makita Hayaan.
Mayroong maraming - ito ay kabilang sa -
bagay lamang na ikaw ay medyo katulad na -
medyo pamilyar sa Mayroon, subalit sa JavaScript.
At sa ilalim ng hood, para sa bookshelf,
ito ay gumagamit ng isang tagabuo ng query tinatawag Knex.js.
Kaya, na Knex, knexjs.org.
Ito ay isang reference sa mga laruang kung sinuman ay kailanman na-play na may ito.
Ngunit ito ay nagbibigay-daan sa iyo upang - sa isang katulad fashion, sa jQuery,
ikaw lang ang uri ng lumikha ng isang kadena ng iba't ibang mga paraan
na kayo ay tumatawag sa iyong hilera ng database sa gayon maaari mong -
nang sinimulan mong sumali sa pamamagitan ng sinasabi Knex at ang pangalan ng table.
Kaya, halimbawa, ang mga gumagamit Knex, piliin kung aling mga hanay gusto mo,
kung saan, at magkaroon ng iba't ibang saan conditionals at maaari kang magkaroon ng
AT kung saan, O kung saan, kung saan sa pagitan ng, kung saan hindi,
ka ngayon, down ang linya.
Maaari mong tukuyin ang iba't ibang sumali sa pagitan ng iyong mga talahanayan sa database
na bookshelf ay gumagamit ng panloob upang i-set up ang isang uri ng magic
sa paligid ng hasOne, hasMany, belongsTo, belongsToMany.
At gayon ang kumbinasyon
sa dalawang ipaalam gagawin mo medyo magkano kung ano ang nais mong gamitin
upang sa framework tulad ng Laravel sa tuntunin
ng pag-andar nagtatrabaho na may mga database.
Kaya, sabihin sige at tumagal Tingnan ang isang simpleng halimbawa
para sa isang Express app na Ginagawang paggamit ng mga modelo
at mga koleksyon ng mga Bookshelf jazz [pagbigkas].
Kaya, nai-set up ko lang simpleng application dito.
Nakuha ko ang ilan sa mga bagay-bagay na na-initialize ang express
at ilipat na sa isang init direktoryo na aking nilikha.
Isa sa mga magandang bagay tungkol sa nagtatrabaho sa Express bilang pakunwari
sa Laravel ay mayroong talagang hindi magkano ipinatupad
sa iyo conventionalized.
Kaya maaari kang lumikha ng mga direktoryo -
hindi ito talagang magbibigay sa iyo ng isang buong lot upang gumana off ng.
Nag-Nalaman lamang uri ng ilan mga pangunahing setting at pagkatapos -
ngunit hindi ito mahalaga sa kung saan inilagay mo ang mga ito.
Hindi mo kailangang magkaroon direktoryo ng controller ng.
Hindi mo kailangang magkaroon ng isang modelo direktoryo, isang direktoryo config.
Maaari mong uri ng lumikha mga bilang pangangailangan ng iyong proyekto
at itakda ang mga bagay-bagay sa paraan ng na magkaroon ng kahulugan pinakamahalaga sa iyo.
Kaya sa halip ng pagkakaroon ng lahat ito express boilerplate
sa pangunahing app.js lang sinabi ko Kapantay app nangangailangan ng init / express.
At kaya sa init,
Sinisimulan ang folder Ko lang na express dito,
at ito ay nangangailangan ng Express, ang mga tawag ang pag-andar ng pag-setup, mga tawag na -
Nagtatakda up view ng engine, JSON pang-parse, ang lahat ng iyon.
Ngayon Kaya, ni magpatuloy down na ipaalam.
Kaya ako na nangangailangan ng pulong kurso magtuturo
at mga kinakailangan sa modelo.
Kaya ang mga ito ay sa isang folder na Ko lang ang nagpasyang pangalan ng mga modelo.
Hindi nito kailangang maging na paraan gayunpaman ito ang may katuturan,
ngunit modelong lamang ang kaakit-akit karaniwang kaya Gusto ko inirerekumenda ito.
Ngunit - Kaya sabihin pumunta para sa kurso.
Sa tingin ko gumagamit ako ng - oo, at ang mga halimbawa
down na dito ay batay lahat sa paligid ng modelo kurso.
Kaya ipaalam sa tumagal ng lang isang tumingin sa na.
Kaya, ngayon, lamang ng unang linya ng model na ito,
Ginagamit ko na nangangailangan ng ibang bagay.
Kaya kung mapapansin mo sa node dapat kang na nangangailangan ng
o gumagamit ka ng pagpunta sa magtapos up nangangailangan ang maramihang
ng iba't-ibang mga file na matatagpuan
sa iba't ibang lugar sa iyong application.
At ang mga kaugnay na mga path sa nasaan ka man
sa iyong kasalukuyang application,
maliban kung ito ay isang nangungunang antas na tinukoy bilang sa mo i-install ito
may MPM tulad ng bookshelf o Knex o Express o isang bagay,
mga hindi kamag-anak.
Oo? Mag-zoom in pa?
OK. OK. Kaya, ikaw ay pagpunta sa napupunta na nangangailangan ang maramihang
ng lamang iba't ibang mga file sa iyong code, na ay mabuti at masama.
Sa isang mahusay na paraan alam mo kung saan bagay ang at ito ay hindi uri
ng magic bilang sa kung ano ang pagpunta sa ilalim ng hood,
na maaaring talagang maging nakalilito
kapag mayroon kang isang napaka- mabigat Java -
o napaka-mabigat na framework tulad ng Laravel, na uri ng mga sinasabi,
kami ay pagpunta sa mag-ingat ng ito kaya hindi mo na kailangang
upang mangailangan ng lahat ng bagay ngunit mayroon kang
malaman kung paano ang lahat ng bagay gumagana upang magamit ito.
Saan bilang sa kasong ito, ito ay napaka prangka bilang sa
kung saan lahat ng bagay ay, ang mga ito ay dulo lamang
up pagiging isang kaunti pa pagta-type.
Tulad ng sa gilid na gusto ko gamitin, mayroong isang plugin
kung gumamit ka ng isang bulag teksto
kung saan maaari kang instal ang node module Helper at maaari mong simulan
i-type tulad ng Instruktor at ito ay lumilikha ng mga kamag-anak landas
sa kung nasaan ka sa na code na file, uri ng kapaki-pakinabang.
Kaya, ang modelo kurso ay nangangailangan ng base dito
at pagkatapos ay base makulong Nangangailangan ng init / bookshelf
at pagkatapos ay ang bookshelf, ito Nangangailangan ng nangungunang antas na bookshelf
at pagkatapos ay initializes ito sa ang nasimulan Knex halimbawa,
na nagtatakda ang pangalan ng client
at ang koneksyon setting para sa database.
Kaya ako lamang ang paggamit ng isang simpleng Halimbawa ng sumunod na pangyayari Pro na -
ng MySQL, ako ma-access ito sa Sumunod na pangyayari Pro at ito ay may uri lamang
ng isang katulad na database pag-setup bilang namin ay may
sa unang sample application may mga kurso catalog.
Kaya, itinakda ko ang aking koneksyon Mga setting dito,
at ang mga ito ay dokumentado lahat sa pahina ng proyekto Knex.js
bilang sa kung paano i-setup mga koneksyon.
Kaya, mayroon akong ngayon ang aking base modelo.
At tulad ng nabanggit ko sa ang pagbabago prototype,
sa gayon ay maaari talaga maging uri ng marami sa -
nagdadagdag ng maraming boilerplate sa iyong code sa gayon convention
na iniakma sa pamamagitan ng Backbone.js
at ngayon ay Bookshelf.js upang magdagdag ng pahabain ang pamamaraang ito
bilang isang static na ari-arian sa iyong mga object JavaScript,
kung saan ay nagbibigay ito ng isang uri ng halos klase-based inheritance kalikasan
kung saan kung tawagan ka pahabain maaari mong i-set up ang anumang
sa mga pamamaraan sa prototype na gusto mo dito
at pagkatapos ay maaari mong - anumang dagdag static na pamamaraan
na maaaring gusto, mo Maaari lamang itakda ang mga iyon inyong sarili
out dito sa gayon ay maaari ko ba itong patagalin may - kaya kung halimbawa,
maramihang mga modelong kinakailangan ipakita ang pangalan at ito makakuha ng pangalan.
Kaya, narito, ako sinasabi ko ang display name para sa modelo
sa pamamagitan ng default ay ang kahit anong pangalan nito ari-arian ay kung hindi man return
walang pangalan.
At ngayon sa bawat modelo na ay isang -
na umaabot ito base ng modelo, ako Sa ngayon ay isang paraan ng display name
sa prototype chain sa isang lugar.
At kung gusto ko itong patungan Maaari ba akong magtakda lang ito - itakda kung ano -
Gusto getname maging dito.
At pinapayagan ka upang gayahin classical inheritance
sa JavaScript, na maaaring maging magaling partikular para sa mga bagay
na ihahandog ang kanilang mga sarili sa pagiging class na batay tulad ng bagay na mga modelo.
Kaya sabihin tumalon pabalik sa ang code application.
Kaya Nakakuha ako ng isang ruta para lamang iwa, para lang sa aking index
at pagkatapos ay i-iwa kurso.
At pareho ng mga ito ay pagtawag ang pamamaraan renderCourses.
Kaya muli, pag-andar ay first class at maaaring maipasa
bilang argumento sa mga pamamaraan.
Kaya, sa ganitong app.get, Ako pagtawag -
Ako pagpasa renderCourses bilang ang argumento.
At render - o function ay maaaring maging setup tulad ng var -
bilang ako ay ang paggawa ng mas maaga var renderCourses ay katumbas ng pag-andar
o maaari silang maging lamang function na renderCourses.
Hindi ito gumawa ng masyadong karami ng isang pagkakaiba.
Maaari mong aktwal na mayroon ano ay tinatawag na pangalan ng function
expression, na mga var renderCourses Kapantay
function na renderCourses.
At, ang dahilan sa nais na magkaroon pangalanan ang mga function lalo na
sa node ay tumutulong ito Binibigyan ka ng isang mas malinis -
mas nababasa stack trace.
Kaya kung mayroon kang isang buong bungkos
ng anonymous function ay ito sinasabi -
kapag mayroon kang isang error sa iyong code you'll -
Hindi mo malalaman kung aling mga function na ito tumatawag ang kailangan mong i tumingin
sa numerong code at ang bilang linya
at minsan ito ay mas madali lamang sa visual na-parse
kapag mayroon kang mga pangalan talaga
para sa mga pag-andar kanilang sarili sa gilid ng server.
Kaya ito renderCourses, tawagan ng node apps ipaalam -
kaya ako makinig sa Core 3000 [pagbigkas].
At kaya ang lahat ng ito ay ginagawa kanan dito ay lamang sa pagkuha ng lahat ng
mga kurso mula sa database.
Hindi ako kahit na naglilimita ito kaya ang paggawa ng isang malaking bilang
ng mga hilera ito ay bumabalik.
At upang gawin ito,
sa modelo kurso doon ay isang static na ari-arian
tinatawag na koleksyon.
At kaya tawagan ko lang ito - ko Sinabi lumikha ng isang bagong koleksyon
para sa kursong ito, at pagkatapos makuha ang mga ito,
at pagkatapos ay bumalik ang mga kurso koleksyon dito sa pangako.
Kaya panloob, si David sa - ang huling kalahati nagturo kaunti
tungkol sa mga pangako at pangako ay ginamit napaka mabigat sa parehong Knex
at bookshelf dahil lends ito ang -
binibigyan ka nito ng kakayahan upang magkaroon ng isang bungkos
ng iba't ibang mga asynchronous na mga tawag at uri ng mga sumali pagkatapos ay sama-sama
o makuha ang isang bagay, at pagkatapos ay
may na tawag sa isa pang asynchronous database tawag
at bumalik halaga na at pagkatapos ay lumipat sa susunod na pagkatapos
at mga susunod na pagkatapos at pagkatapos ay magkaroon ng isang mahuli sa dulo upang ayusin
gayahin ng asynchronous try catch pag-uugali na may asynchronous na code,
dahil nakakakita ka ito ngayon
pero kahit na mas mahirap nang isang beses simulan mo haharapin ang mga ito.
Asynchronous code ay isa lamang sa lahat ng dako
sa server side JavaScript at talagang isang mas malaking degree na
kaysa sa nakasanayan mo na kung nagawa mo na JavaScript
sa gilid ng client.
Kaya na talaga ito, talaga nakatulong sa iyo out doon.
Ngunit upang ipakita sa iyo ang debugger pahayag
na pakikipag-usap ko tungkol sa ang mga tool inspector node,
Pupunta ako sa sige at magtapon ng isang line ng debugger dito
sa ang pag-andar renderCourses at makita kung saan na humantong sa akin
kapag ako - kaya node maaaring i-install inspector
sa pamamagitan ng paggawa NPM I-install may G flag,
na nangangahulugan Global Node Inspector.
At magkakaroon ito makuha ang mga ito para sa NMP at i-install ito sa buong mundo
para sa iyong mga application sa gayon ay maaari mong tawagin lamang ito
mula sa command line.
Na-install ko na ito kaya makikita ba akong magpatuloy at -
talaga maaaring mayroon ito maghintay magkakaroon ito lang ang dadalhin,
tumagal ng dalawang segundo.
At kung ano node inspector muli ay nagpapahintulot sa iyo
gawin ay may ito walang puno bersyon ng debugger console
na nakasanayan mo kapag nagtatrabaho sa gilid ng client at magagawang
upang itigil, idagdag lamang ang tinukoy tumuturo sa iyong code.
Itigil ang pagpapatupad at kumuha ng isang tumingin sa kung ano ang nangyayari sa,
na kung saan ay magkakaroon talaga dumating sa madaling-magamit na kung ang tampok
tulad na available
kapag dine-debug mo Code na PHP ako sigurado.
Kaya ipaalam sa tumagal ng lang isang tumingin sa na.
Kaya ko maaaring lamang tumawag sa node inspector
at sasabihin nito sabihin bisitahin ang URL na ito port 5858 upang simulan ang pag-debug,
na default lang ang para sa kung paano ito magsimula up.
Kaya, nai-ngayon ang nakuha ko - mayroong walang pagpunta sa dito
dahil kailangan ko bang magsimula.
Kaya node hindi pagkakasundo [pagbigkas] ang debug flag at pagkatapos ay app.js.
Kaya sabi debugger pakikinig sa port 5858,
Express pakikinig server sa 3000.
Kaya hindi namin handa na upang patakbuhin.
Hayaan ang i-refresh sa akin lang ito.
At ngayon maaari kong makita ang app.js code na lang ako ay naghahanap sa
ngunit dito sa console.
Kaya ngayon, kung sinubukan kong patakbuhin ang, maaari mong makita ito, hihinto ito.
Lamang Ito ay naghihintay dahil nito buong pagpapatupad ng code na ngayon
Huminto sa debugger ito line na ako ng ilalagay sa doon.
At maaari kong server ngayon -
[Hindi marinig Puna]
Oh, oo. Ano ang keyword shortcut upang mag-zoom screen?
Oh mayroong.
Nakuha namin. OK.
[I-pause]
Oh, hindi ito hinahanap [Pagbigkas] na.
Kaya, mga kurso ay talagang malaki
dahil hindi ako paggawa ng limitahan sugnay o anumang bagay,
lamang ito sa pagkuha ng mga buong database ng mga kurso
na kung saan ay marami sa mga ito.
At gayon - na kung saan ay bagay
na aktwal na maaaring crash ang tala na inspector halimbawa.
It's - OK.
Hayaan akong gawin ang isang limitasyon at pagkatapos ay maaari naming tingnan
kapag hindi ito kinukuha daan-daang mga kurso.
Kaya, patayin ang server at inspector
at makikita kong gawin kurso limitasyon sa 20 query koleksyon.
Kaya, sa bookshelf, hindi katulad sa Laravel
kung saan maaari mo lamang tumawag sa limitahan direkta o tumawag sa anumang
sa mga pamamaraan na SQL na gamitin mo
upang nang direkta sa ORM halimbawa.
Anumang oras na ginagamit mo lamang Paraan ng SQL na kung saan ay ibinigay
sa Knex, kailangan mong tawagan ang query upang ayusin
ng mag-tap sa mga query chain.
At ito ay maaaring mahihingi na may alinman sa isang function,
sa gayon maaari mong sabihin, function na ito ang limitasyon ng 10 o tawagan mo ito
sa pamamagitan ng pagtukoy kung aling mga pamamaraan gusto mong itawag
sa Knex halimbawa at pagkatapos na halaga.
Kaya kami ay pagpunta sa gawin limitahan 20 at pagkatapos ay itakda.
Talaga naming gawin hindi kailangan ng debugger dito
dahil kami ay maaari lamang set breakpoints
at na ginagawang mas madali.
Ayos lang.
Kaya, itakda ang isang breakpoint ipaalam dito mismo at subukang i-load ito.
Maling linya.
Kanan dito.
[I-pause]
OK. Kaya ito tumigil muli.
Kaya ngayon, mga kurso ay isang sa bagay na may haba na 20
at maaari naming makita ang lahat ng iba't ibang modelo na ito ay fetch
mula sa database dito mismo kaya Nakakuha ako ng modelong bagay
na may, sa loob ng mga katangian ng ari-arian
sa Bagay ay ang lahat ng bagay na ito ay natagpuan sa database.
Ang anumang mga kaganapan na mayroon Nakarehistro na
sa gayon maaari mong magrehistro iba't ibang mga kaganapan,
halimbawa kapag ang modelo ay tinatanggal
o kapag ito ay pagiging fetch,
maaari kang magtakda ng iba't ibang mga pag-aari o baguhin ang mga bagay.
Maraming ng iba't ibang mga Hooks at ang mga ito ay dokumentado lahat
sa Bookshelf.js dokumentasyon na payagan mo
gawin uri ng anumang bagay na na gusto mo talagang gawin
gamit ang iyong mga modelo at mga koleksyon.
Maaari mong - ito ay naka nilalayong upang maging talagang napapasadyang
at talagang madali para sa mong iangkop ang mga ito
sa mga pangangailangan ng iyong application.
Ngunit lamang ng pagtingin sa dito,
Maaari ko bang makita kung ano ang iba't ibang mga kurso ay magagamit.
At sa kasong ito, ako talaga ay hindi makuha ang
sa anumang iba pang data maliban sa lamang ang mga kurso sa kanilang sarili.
Ngunit sa mga katulad na fashion sa ang magaling magsalita ORM maaari mong itakda
up relasyon, kaya ang mga kurso ay kabilang sa maraming mga titser.
Kaya, kung pumunta ako magpatuloy at itigil ang application,
tumalon sa ito makuha ang mga tawag, mo Maaari tukuyin ang iba't ibang mga pagpipilian
na nais mong i- makipagsalitaan dito.
At isa sa mga ito ay ang kakayahang mag-load kaugnay na code
sa pamamagitan ng pagtukoy withRelated instructor pagkatapos kurso.
Kaya sabihin bumalik at sariwang ito dito at tumigil muli.
Kaya ngayon, ang mga kurso sa bagay, parehong bilang ng mga modelo,
ngunit ngayon bawat modelo May relasyon hash
na kung saan ay may instructor na ito ay nauugnay sa.
Kaya ang kursong ito halimbawa
na kung saan ay kurso 082 ay may dalawang mga kaugnay na mga modelo magtuturo.
At maaari ka nang makita kung paano mas madali ito ay upang ayusin
ng visual na gumagana sa mga kaysa kapag tapos ka pagharap sa mga bagay-bagay
na uri ng baguhin ang code at pagkatapos ay subukan ito muli sa PHP.
Katotohanan Ang na maaari mo lamang itigil ang ganap na pagpapatupad
at suriin kung ano ang dito at ang - sa console, ang -
mag-zoom out, mga kurso ay, alam mo na,
ano na ang mga lokal na saklaw mga variable ay magagamit
at ito ay kasalukuyang ang global bagay dahil bilang na nakita mo ito,
maliban kung tumawag sa iyo ng isang tiyak na konteksto, hindi ito ang nangyayari
upang magkaroon ng isang bagay na may-katuturan dito.
At pagkatapos, ang - ipaalam sa akin ipakita ang ilang higit pang mga halimbawa
pagpapatupad ng mga pangako.
Kaya sa halip ng paggawa nito withRelated instructor dito ako
pagpunta sa sige at ilipat ito kunin at pagkatapos ay ang mga kurso,
Pupunta ako upang bumalik courses.load instructor.
At pagkatapos ay - pagkatapos pagkatapos mong tawagan.
[I-pause]
Kaya pagkatapos ay sa puntong ito, ang Dapat-load ang mga kurso
may instructor, na ay asynchronous na pagkilos.
Ngunit dahil kami ay bumabalik na ito mula sa isang pangako, ang susunod na halaga
para pagkatapos ay kahit anong ito asynchronous babalik ang tawag
na sa ganitong kaso ng pagkarga ay isang pamamaraan sa bookshelf
na aktwal na nagbabalik ang koleksyon mismo.
Kaya ito ay naglo-load ng instructor sa doon
at pagkatapos ay maaari mong tukuyin - kung ito ay ari-arian ng isa lang,
maaari mong tukuyin ito bilang string, kung hindi man,
maaari mong gawin instructor at mga kinakailangan
bilang paraan - ng paumanhin, bilang isang array.
At pagkatapos ay kung nais mong makakuha ng talagang magarbong at pilitin sa anumang
ng mga ibinigay na kinukuha, mo maaaring tukuyin ito bilang isang hash
may instructor at pagkatapos ay kung ano ang Gusto mo bang limitahan ang query sa.
Kaya, nais kong i-load ang lahat instructor sa mga kurso kung saan -
kaya QB para sa tagabuo ng query kung saan katayuan ay aktibo.
At maaari kang makakuha ng talagang mahumaling sa anumang
ng mga nauugnay na query gusto mo upang bumuo.
Ngunit, para lang sa ngayon, ipinapadala namin ng pagpunta upang dumikit lamang instructor
at kami ay bumabalik na halaga na
kaya pagkatapos ng susunod na pagkatapos ay dapat may load ang lahat ng mga kurso
up nang maayos.
At kung nagkaroon ng error sa anumang hakbang sa na kadena,
Gusto ito tumalon pababa sa catch.
Kaya sabihin sige at magpatakbo ng mga iyon.
Kaya sa bawat oras - hindi katulad sa PHP, isa downside ay ang
"Dahil node" ay isang mahaba ang pagtakbo proseso, ang talagang kailangan
upang itigil ang proseso ng node bilang i-update mo ang iyong code,
dahil ang bersyon na ito tumatakbo sa time run ay,
ang bersyon ng code na noon ay na-load
kapag nagsimula hindi kung ano ang iyong pag-uuri
ng-update ang iyong code may mula noon.
OK. Susubukan naming magtakda ng isang breakpoint dito, dito at pag-refresh.
[I-pause]
Oh, talagang ako ay hindi refresh ang pahinang ito alinman
kaya ito ay sa ang lumang proseso.
Kaya i-refresh mo ang parehong ito at ang node inspector.
Kaya ngayon makita namin na kurso.
Kung namin tumagal lang sample ng isa sa mga modelo,
maaari naming makita na ang mga pakikipag-ugnayan bagay ay walang laman, ngunit ngayon -
at ang dahilan na kailangan mo upang i-set breakpoints ay, mahusay,
Binanggit ko na maaari kang tumalon papunta sa stack trace
at makita alam mo na, kung saan ito ang nangyayari sa app.
Kaya ngayon maaari kong makita kung ano ang mangyari sa pamamaraan ng pag-load,
na tinukoy mo ako sa mga koleksyon.
Ito uri ng mga "sabik na naglo-load relasyon sa isang mayroon ".
At maaari kang magbasa-basa at makita ang linya sa pamamagitan ng linya
kung saan bagay-bagay na ito ay pagpunta kung saan ay napakahusay.
Kung mayroon ka ng isang bagay na sira sa iyong code,
ito ay masusuka ilang mga error at ikaw ay tulad, talagang nais ko
upang makita kung saan ito ay pagpunta.
Ngunit sa lalong madaling patakbuhin mo ang sa isang bagay asynchronous, ang -
ito ang papunta sa susunod lagyan ng loop kaganapan
at makikita mo mawawala ang iyong - mo mawawala ang iyong lugar
sa node inspector.
Kaya kailangan mong sabihin, "OK, sa sandaling nawala ko ito,
kailangan nito upang ihinto ngayon sa muli linyang ito. "
'Sanhi kung iningatan ko ang pagpindot pababa, pababa ng stack,
Gusto ito ng malaon lamang nawala na ang layo ay hindi ako magse-set ito
line 22 asul line break.
Kaya ngayon, kung tiningnan ko sa mga kurso dito,
dapat ito sa kaugnayan instructor
at pagkatapos ay magkakaroon ng instructor ilakip ang mga ito.
Kaya, maaari mong makita na ibinalik ko isang pangako mula sa unang pangako
at pagkatapos ay maaari mong patuloy gawin na pababa ang linya.
Kaya ang iba't ibang mga pangako, ipinapangako ng mga aklatan,
Ko ginamit ang isa na tinatawag na Bluebird na kung saan ay talagang kapaki-pakinabang.
Nagdadagdag ito ng maraming magaling ng ito para sa pagbabago ng asynchronous -
pagbabago ng tawag pabalik base code sa mga bagay-bagay
mahusay na gumagana sa mga pangako.
Ngunit - paumanhin [hindi marinig] ano Ako ay pagpunta sa sabihin ito doon.
Hayaan ang kumuha ng isang hitsura bagaman sa -
kaya sabihin nating nagkaroon ng problema kapag kinukuha ang isang bagay.
Kaya Mayroon akong ito sa iba pang mga ruta upang mahanap ang tinatawag na ID kurso.
Kaya hayaan gawin ni kurso 2.
Maaari ba akong makakuha - JSON kurso.
At ito gumagana [hindi marinig].
[I-pause]
Amoy ko sira dito.
Hindi sa 3000, ako ay sa ang Chrome inspector tab.
OK. Kaya sabihin pumunta sa Siyempre - JSON course 1.
At ito ay nagbabalik lamang sa JSON format, ang kurso na-load
up na may ilang instructor.
Ngunit ang halimbawa Nais kong upang bigyan dito ay na,
Ako ay paggawa ng JSON kurso ID.
At sa makuha ang mga parameter, Ako pagtukoy nangangailangan ng totoo,
na kung saan ay isang pagpipilian na dokumentado sa bookshelf
kung saan ay sinasabi nito na, "Kung, Ako subukan at maghanap ng kursong ito
at ito ay hindi doon, pagkatapos ay ihagis ng isang error. "
At na dapat ay nakuha ng harangan down na dito ang catch.
Kaya sabihin sige at tumalon pabalik papunta sa node inspector at subukan
at masira ito at makita kung ano ang aming nakuha.
Kaya ipaalam sa set ng isang bakasyon dito sa JSON na kurso.
Ayos lang.
Kukunin ko pumunta sa JSON na kurso at Gusto ko lang ilagay sa ilang -
[I-pause]
Maaari itong maging isang maliit na manlilinlang minsan kapag sinusubukan
upang pamahalaan kung saan isa Na-refresh
at saan mayroon hindi - sabihin makita.
Kaya ito ay error sa pagtawag Walang laman ang tugon.
[I-pause]
Magtapon ng isang debugger in dito Hayaan.
Dahil sa kung paano node talaga ino-optimize
para sa runtime JavaScript upang maging kaya mabilis sa server,
minsan ang debugger node May ilang mga error kapag sinusubukan mong
at itakda ang breakpoints pabagu-bagong at na aktwal mong gawin kailangan
gumamit ng debugger at hindi ang mga line-by-line.
Kaya sabihin makita kung ito ay nakakakuha sa amin kung ano ang gusto namin.
Kaya ako magse-set, app.get json kurso id,
at na-set ko ang aking debugger doon
sa catch statement sa ibaba.
Kunin ang nangangailangan ng totoo, dapat ito - lahat ng karapatan, doon kami pumunta, sinira.
Kaya, ngayon maaari kong makita na ito tumigil
sa ito huling catch block dahil ang withRelated -
o dahil ang nangangailangan ng totoo na at na walang kurso
may ID ng ito malaki numero sa pamamagitan ng pagbubukod
na ngayon ay Emessage.
At ang bawat error sa JavaScript May stack na ari-arian
na ay kasama ito.
Kaya ito ay madalas na kapaki-pakinabang Upang halimbawa,
console log out e.stack.
At maaari ko talaga makita kapag hit ako ng error.
Kaya makakuha ako ng error na walang laman tugon, iyon ang mensahe
na ipinadala sa pamamagitan ng bookshelf.
Ngunit ngayon, maaari ko ba iyang tingnan sa, sa tawag stack at makita
na sa bookshelf dialects SQL modelo 83,
walang laman tugon error ay itinapon.
At ito ay kung saan ako Binanggit, ito ay tuldok anonymous
dahil ito ay isang hindi nakikilalang function.
Kung iyon ay isang function pangalan magkakaroon ka ng mas mahusay na mga ideya
na kung saan gumana talaga sa pamamagitan nang hindi na kinakailangang pumunta
sa model.js code.
Kahit na ito ay sinadya upang maging walang kinikilingan, walang kinikilingan nababasa,
kaya ang maaari kong makita na ang mga online.
Ano ang sinabi nila sabihin ako ay 83 linya.
Kaya, kung options.require at ang tugon ay hindi umiiral,
throws ito ngayon ng isang bagong Walang laman ang error na tugon.
Kaya maaari mong makita ang kaakit-akit prangka kung paano na gumagana.
At nang panloob sa bookshelf,
Mayroon bang ikaw lamang isang buo tungkos ng paggamit ng mga pangako.
Kaya maaari mong tukuyin Promise.method
may Bluebird library na kung saan pinanatili ang tamang konteksto
ng ito habang bumabalik isang pangako.
At kaya ko pa - ako na bisa ang halaga ng mga katulad na ito
sa kung anong nais ko nabanggit mas maaga, ngunit ang paggamit ng mga pangako
at pagkatapos ko ma - ay bagong.
Maaari itong maging asynchronous o hindi kung gusto ko.
At pagkatapos gawin ko ang ilan iba pang mga bagay na maaari
o maaaring hindi asynchronous at pagkatapos uri ng mga jumps down na ito.
Kaya Promise.all ay isang lingkod na ng maraming popular na mga aklatan mayroon
kung saan maaari kang magkaroon ng isang hanay ng mga potensyal na maaari
o maaaring hindi nangangako.
At sa sandaling ang lahat ng mga ito ay nakumpleto na, bumalik ka na
at pagkatapos ito jumps sa susunod na linya
at maaari mong makita kung paano ito talaga flattens out ang mga pyramid
kumuha ka, ang callback impiyerno bilang kilala nito
kung gumagawa ka ng lahat ng bagay may callbacks linya sa pamamagitan ng linya.
May mga paraan upang makakuha ng paligid na ngunit pangako ay isa
ng mga pinakamahusay na paraan sa aking opinyon
sa tunay na panatilihin ang iyong code malinis at madaling basahin.
Kaya na lamang ang maikling panimula sa JavaScript
at sa bookshelf at Knex sa pangkalahatan.
At, kung mayroong anumang mga katanungan, Alam ko ito ay isang tonelada ng materyal
sa uri ng subukan at pabalat lalo na dahil ang mga wika,
hindi katulad pinaka na ikaw ay pamilyar sa gayon Nais kong lamang
upang gawin ito upang hindi bababa sa kung nagkakaproblema ka sa mga problema
sa iyong code, mo Maaari uri ng tumalon sa -
na kung ano ang gusto kong gawin, ay uri ng tumalon sa mga aklatan
na gumagamit ako at makita kung paano ang mga bagay ay nakaayos.
May isang na ako ay nabanggit mas maaga na tinatawag na Backbone.js
at aktwal na ito [Hindi marinig] sa gilid ng client
upang makatulong na magbigay sa view ng modelo controller istraktura
sa iyong code.
Ngunit ito talaga ay nalagyan ng annotation dokumentasyon pinagmulan
na nagbibigay-daan sa iyo upang uri ng makita.
Ito ay talagang mahusay dokumentado, ano ang nangyayari sa,
kung paano ito augmenting ang pag-andar Ajax
o pag-andar ng mga kaganapan o ang mga modelo at mga koleksyon uri
ng na nagpapaliwanag kung ano ang nagaganap sa proseso.
At kung naiintindihan mo ang mga pangunahing kaalaman ng JavaScript
tulad ng prototypal mana at lamang kung paano function ay ginagamit
bilang parehong mga bagay at mga halaga at mga klase at ang lahat.
Ginagawang ito ay mas madaling upang maunawaan kung ano ang nangyayari
sa potensyal sa library na ginagamit mo
at debugger code at magagawang upang hindi ma-banging iyong ulo
laban sa pader dahil hindi mo maunawaan kung paano ang
iba't ibang piraso ay nagtatrabaho, kaya.