>> Deci, cu care fiind spuse,
doar un fel de simplu introducere de prototipuri
și modelul de obiecte JavaScript.
Noi nu vom schimba se pregătește un pic de a vorbi
despre mai multe JavaScript pe de server și Biblioteca Bookshelf
și conexiunea Knex Library.
Deci, aveți posibilitatea de fapt doar -
dacă veți căuta pentru Bookshelf.js ar trebui să fie destul de ușor
pentru a găsi, ar trebui să fie în primul rând rezultat, și Bookshelf
ca David a menționat doar oferă o mulțime de structuri
în jurul valorii de obiecte JavaScript și de lucru cu ei relațional
în baze de date relaționale.
Deci, o mulțime de caracteristici similare care este de fapt puternic inspirat
de ORM Laravel ca precum și Backbone.js,
care este un front-end MVC bibliotecă care vă permite
a structura codul, similar cu ceea ce am fost afișate
în exemplele de realizare prototipuri unde puteți -
în loc de doar arbitrar aruncarea clase
pe ici, pe colo opiniile dumneavoastră.
Acesta vă oferă modele și colecții de acele modele
care ar trebui să acționeze ca un fel de un singur punct de adevăr
despre datele de cererea dumneavoastră.
Și apoi să ascultați, ca și cele modele modificări, vă spun, OK,
re-face acest șablon aici și asta de aici
și nu doar să adăugați de clasă aici, adăuga clasă există și un fel de a alege
pe selectoare și de a face păianjen de cod jQuery.
Acesta oferă mai mult de o bază de clasă structura de piese individuale,
ci o componentă importantă a că biblioteca este modelele
care au o structură similară la ceea ce face modelele Bookshelf.
Deci, dacă sunteți familiarizați cu Raft ești destul, de asemenea,
destul de familiarizat cu Backbone.js modele,
și aș recomanda a lua o privire la asta.
Deci, unele dintre caracteristicile majore
că aceasta vă oferă sunt doar capacitatea de a stabili date de pe un obiect
pentru a apela aducă, care returnează o înregistrare individuală
din baza de date, de a crea de relații similare
pentru ceea ce ai rezolvat în în Laravel
în cazul în care vă pot spune un pacient stabilit o metodă de înregistrare
și spun acest lucru a câștigat înregistrare
în cazul în care obiectul de înregistrare este dosarele medicale nume de tabel.
Să vedem.
Are multe - din care face parte -
doar lucruri pe care esti destul de similare -
destul de familiarizat cu deja, dar în JavaScript.
Și sub capota, pentru Bookshelf,
se folosește un constructor de interogare numit Knex.js.
Deci, asta e Knex, knexjs.org.
Este o trimitere la jucărie dacă oricine a jucat vreodata cu aceasta.
Dar vă permite să - într-un mod similar, la jQuery,
ai doar un fel de a crea un lanț de metode diferite
că ai sunat pe dvs. rând de baze de date astfel încât să puteți -
ați început prin a spune Knex și numele tabelului.
Deci, de exemplu, utilizatorii Knex, selectați coloanele pe care doriți,
în cazul în care, și au diferite în cazul în care condiționale și puteți avea
Și unde, sau în cazul în care, unde între, unde nu,
acum, pe linie.
Puteți specifica diferite se alătură între tabele de baze de date
care Bookshelf foloseste intern de a crea un fel de magie
în jurul valorii de hasOne, hasMany, belongsTo, belongsToMany.
Și astfel încât combinația
de doi lăsa să faci destul de mult ceea ce ai fi folosit
în cadru ca Laravel în termeni
de funcționalitate lucrul cu baze de date.
Deci, să mergem mai departe și să ia o privire la un exemplu simplu
pentru o aplicație care Express face uz de aceste modele
și colecții de Raft jazz [fonetic].
Deci, am creat doar o aplicație simplă aici.
Am dezbrăcat unele din lucrurile care a fost inițializarea expres
și pentru a muta că într-o inițializare directorul pe care l-am creat.
Unul dintre lucrurile frumoase despre de lucru cu Express ca ar trebui
a Laravel este că există într-adevăr nu de mult în aplicare
pe tine stilizat.
Astfel, puteți crea directoare -
nu reprezintă cu adevărat vă oferă un lot întreg de a lucra în afara de.
Ai doar un fel de unii setările de bază și apoi -
dar ea nu-i pasă în cazul în care le-ați pus.
Nu trebuie să aibă directorul controlorului.
Nu aveți nevoie pentru a avea o modele director, un director de configurare.
Puteți crea un fel de cei ca nevoile dumneavoastra de proiect
și a stabilit lucrurile drum care face cel mai mult sens pentru tine.
Deci, în loc de a avea toate acest șabloane Express
în principalele app.js-am spus egali app necesită init / expres.
Și astfel în init,
dosarul de inițializare Tocmai am Express aici,
și acest lucru necesită Express, apelurile funcția de configurare, numește -
stabilește motorul de vedere, JSON parser, toate astea.
Deci, acum, să continuăm în jos.
Deci, eu sunt solicitând întâlnire instructor curs
și cerințele de modele.
Deci, acestea sunt într-un dosar care M-am decis să modele de nume.
Aceasta nu trebuie să fie faptul că fel cu toate acestea are sens,
dar modele este doar destul de comune, astfel încât Mi-ar recomanda.
Dar - Deci să mergem pentru curs.
Cred că eu sunt, folosind - Da, și exemplele
aici se bazează tot în jurul modelului de curs.
Așa că hai să ia o uita-te la asta.
Deci, acum, doar a prima linie a acestui model,
Sunt deja necesită altceva.
Deci, dacă veți observa în nodul ar trebui să fie necesită
sau ai de gând să se încheie care necesită o grămadă
de fișiere diferite care sunt situate
în diferite locuri în cererea dumneavoastră.
Și căile relative oriunde vă aflați
în cererea dumneavoastră curent,
excepția cazului în care este un înalt nivel deja definită ca în când îl instalați
cu MPM ca Raft sau Knex sau Express sau ceva,
cei care nu sunt relative.
Da? Măriți mai mult?
OK. OK. Deci, ai de gând să sfârșesc necesită o grămadă
de doar fișiere diferite în dvs. cod, ceea ce este bine și rău.
Într-un mod bun știi unde lucrurile sunt și nu e un fel
de magie ca la ceea ce este întâmplă sub capotă,
care poate fi foarte confuz
atunci când aveți un foarte Java grele -
sau cadru foarte greu ca Laravel, care un fel de spune,
vom avea grijă din aceasta, astfel încât să nu aveți
de a solicita orice dar ai
să știe cum totul lucrează în scopul de a folosi.
În cazul în care ca și în acest caz, este foarte simplu ca să
în cazul în care totul este, acestea sunt doar capete
a fi un pic mai mult tastare.
La fel ca în partea I place de a utiliza, există un plugin
dacă utilizați un text orb
unde puteți instala nodul module helper și puteți începe
să tastați ca instructor și se creează calea relativă
pentru cazul în care vă sunt la care cod dosar, un fel de util.
Deci, modelul de curs se impune de bază aici
și apoi intern de bază necesită init / raft
și apoi biblioteca, ea necesită raft la nivel de top
și apoi se inițializează cu instanța Knex initializat,
care stabilește numele de client
și conexiunea setările pentru baza de date.
Deci, eu sunt doar folosind un simplu exemplu de Sequel Pro care -
de MySQL, eu o accesare cu Continuare Pro și are un fel
unei baze de date asemănătoare configurare ca am avut
în prima cerere de probă cu catalogul curs.
Deci, am stabilit conexiunea mea Setările de aici,
și toate acestea sunt documentate pe pagina proiectului Knex.js
cu privire la modul de configurare aceste conexiuni.
Deci, am acum modelul meu de bază.
Și, după cum am menționat cu schimbarea prototip,
astfel încât poate de fapt, fi un fel de o mulțime de a -
adaugă o mulțime de șabloane la codul dvs., astfel încât convenție
care a fost adaptat de Backbone.js
iar acum este Bookshelf.js pentru a adăuga această metodă extinde
ca o proprietate static pe obiectelor JavaScript,
care îi conferă un fel de aproape bazată pe clasa de moștenire natură
în cazul în care dacă te sun extinde puteți configura orice
metodelor prototip pe care doriți aici
și apoi poți - orice metode suplimentare statice
pe care le-ar putea dori, tu le puteți seta doar voi înșivă
aici, așa că am putea-o extinde cu - așa că dacă, de exemplu,
mai multe modele necesar afișa numele și acest lucru a obține nume.
Deci, aici, spun nume de afișare pentru modelul
în mod implicit este, indiferent de numele său proprietate este altfel revenire
nici un nume.
Și acum pe fiecare model care este un -
care se extinde acest model de bază, am au acum o metodă de nume de afișare
pe prototip lanț undeva.
Și dacă vreau să-l suprascrie Eu pot seta doar - set ce -
getname ar fi aici.
Și vă permite să imite moștenire clasică
în JavaScript, care poate fi frumos special pentru lucruri
care se pretează a fi clasă bazat ca modele de obiecte.
Deci, haideți să sari înapoi în codul de aplicare.
Așa că am un traseu de doar slash, doar pentru index mea
și apoi slash cursuri.
Și ambele sunt de asteptare metoda renderCourses.
Deci, din nou, funcții sunt de primă clasă și poate fi trecut
ca argumente de metode.
Deci, în acest app.get, I-am sunat -
Trec renderCourses ca argument.
Și face - sau funcții poate fi setat ca var -
așa cum am fost a face var mai devreme renderCourses este egal cu funcție
sau ei pot fi doar renderCourses funcție.
Ea nu face prea de mult de o diferență.
Puteți avea de fapt, ceea ce sunt numite denumirea funcției
expresii, care sunt renderCourses var egal
renderCourses funcție.
Și, motivul pentru care doriți să aibă nume funcții deosebit de
în nod este că acesta vă oferă o mai curat -
mai ușor de citit urmă stivă.
Deci, dacă aveți o grămadă
funcțiilor anonime se va spune -
atunci când aveți o eroare în codul veți avea dumneavoastră -
tu nu va ști ce funcție este de asteptare ar trebui să te uiți
la numărul de cod și numărul liniei
și uneori e mai ușor doar pentru a analiza vizual
atunci când aveți de fapt nume
pentru funcțiile însele pe partea de server.
Deci, acest renderCourses, Să numim aplicații nod -
așa că am ascultat pe Core 3000 [fonetic].
Și astfel toate aceasta este de a face dreptate aici este doar obtinerea tuturor
cursuri de la baza de date.
Nu am nici o limitare așa se face un număr foarte mare
de rânduri se întoarce.
Și în scopul de a face acest lucru,
pe modelul Desigur, există este o proprietate static
numit de colectare.
Și așa că am doar o numesc - I a declarat crea o nouă colecție
pentru acest curs, și apoi se aduce,
și apoi să se întoarcă la cursuri colectare aici în promisiunea.
Deci, pe plan intern, David - ultima jumătate a învățat un pic
despre promisiuni și promisiunile sunt folosit foarte mult în ambele Knex
și Bookshelf deoarece se împrumută -
Acesta vă oferă capacitatea de a avea o grămadă
de diferite apeluri asincrone și un fel de se alătura apoi împreună
sau aduce ceva, și apoi
cu care un alt apel apel de baze de date asincron
și a reveni ca valoare și apoi sari la alta, atunci
și apoi următorul și apoi au o prinde la sfârșitul pentru a sorta
a imita captură încerca asincron comportament cu cod asincron,
pentru ca tu să-l văd acum
dar este chiar mai greu odată începe să se ocupe de ea.
Cod asincron este pur și simplu peste tot
în partea de server de activarea JavaScript-și într-adevăr într-o măsură mult mai mare
decât v-ați obișnuit, dacă ai facut JavaScript
pe partea de client.
Așa că într-adevăr, într-adevăr te-a ajutat acolo.
Ci doar să-ți arăt declarația debugger
că vorbeam în instrumentele de inspector de noduri,
Am de gând să merg mai departe și arunca o linie debugger aici
în funcția de renderCourses și a vedea unde mă duce
când - așa nod inspector poate fi instalat
de a face NPM Install cu un steag G,
ceea ce înseamnă Global Inspector nod.
Și-l voi aduce pentru NMP și-l instalați la nivel global
pentru aplicațiile dvs. astfel încât să puteți pur și simplu numi
de la linia de comandă.
Deja am instalat ea asa ca voi merge mai departe și -
de fapt, aceasta ar putea avea să se aștepte că va dura doar,
ia două secunde.
Și ce inspector nod din nou, vă permite
să faceți este să aibă acest lucru fără cap versiune a consolei debugger
că v-ați obișnuit atunci când se lucrează pe partea de client și să poată
pentru a opri, trebuie doar să adăugați specificat subliniază în cod.
Opri execuție și să ia o uita-te la ceea ce se întâmplă,
care ar fi într-adevăr veni la îndemână în cazul în care caracteristica
cum ar fi faptul că au fost disponibile
atunci când depanare dvs. Cod PHP Sunt sigur.
Așa că hai să ia o uita-te la asta.
Deci, eu pot apela doar inspector nod
și-l voi spune vizita acest URL portul 5858 pentru a începe depanare,
asta e doar implicit pentru modul în care se pornește.
Deci, am ajuns acum - nu e nimic nu se întâmplă aici
pentru că am nevoie pentru a începe.
Astfel nod impas [fonetic] flag depanare și apoi app.js.
Deci, spune debugger asculta pe portul 5858,
Ascultare Server Express pe 3000.
Deci, suntem gata de plecare.
Lasă-mă să actualizați această.
Și acum pot vedea app.js cod care mă uitam la
dar aici, în consola.
Deci, acum, dacă am încerca pentru a rula acest lucru, puteți să-l vedeți, se oprește.
Este doar de așteptare pentru că ei întreaga executarea de cod este acum
oprit pe acest depanator linie pe care am pus-o acolo.
Și eu pot acum de server -
[Inaudibil Observație]
Oh, da. Ce este cuvântul cheie comandă rapidă pentru a mări ecranul?
Oh, nu există.
Am prins-o. OK.
[Pauză]
Oh, nu se uită [Fonetic] asta.
Deci, cursuri este foarte mare
pentru că eu nu fac o limita clauză sau nimic,
e doar preluarea întreaga bază de date de cursuri
care sunt o mulțime de ei.
Și astfel - care este obiect
că de fapt s-ar putea prăbuși nota instanță inspector.
Este - OK.
Permiteți-mi să fac o limită și atunci putem arunca o privire
atunci când nu este preluarea sute de cursuri.
Deci, l omoare pe serverul și inspector
și voi face curs limită de interogare de colectare 20.
Deci, în Bookshelf, spre deosebire de Laravel
în cazul în care puteți apela doar limitează în mod direct sau suna orice
dintre aceste metode SQL pe care le utilizați
la direct pe instanță ORM.
Oricand pe care îl utilizați doar Metoda SQL care este furnizat
în Knex, trebuie să sunați la interogarea pentru a sorta
a robinet în lanțul de interogare.
Și acest lucru poate fi invocată fie cu o funcție,
astfel încât să puteți spune, funcție această limită de 10 sau de ai spune
prin specificarea Metoda doriți pentru a apela
în instanța de Knex și apoi ce valoare.
Așa că am de gând să faci limita de 20 și apoi setați.
Noi de fapt nu nevoie de debugger aici
pentru că putem doar seta puncte de întrerupere
și că face mai ușor.
Bine.
Deci, haideți să setați un punct de întrerupere aici și să încerce să-l încarce.
Linie greșit.
Chiar aici.
[Pauză]
OK. Deci, sa oprit din nou.
Deci, acum, cursuri este o obiect cu lungimea de 20
și putem vedea toate diferite modele care este preluat
din baza de date aici asa ca am luat un obiect model de
care are, interior atributele de proprietate
pe obiect sunt toate lucrurile că este găsit în baza de date.
Orice evenimente care au fost înregistrate
astfel încât să puteți înregistra diferite evenimente,
de exemplu atunci când Modelul este șters
sau atunci când este fie preluat,
puteți seta diferite proprietăți sau a modifica lucruri.
Există o mulțime de diferite cârlige și toate acestea sunt documentate
în Bookshelf.js documentație care vă permite
de a face un fel de nimic că într-adevăr vrei să faci
cu modele dvs. și colecții.
Puteți - acestea sunt menite să fie într-adevăr personalizabil
și într-adevăr ușor de sa le adapta
la nevoile dvs. aplicație.
Dar sa ne uitam pe aici,
Pot vedea ce diferitele cursuri sunt disponibile.
Și în acest caz, am de fapt, nu aduce
cu alte date, altele decât doar cursurile propriu-zise.
Dar, în mod similar cu Elocvent ORM puteți seta
relații, astfel încât cursul aparține multe instructor.
Deci, dacă am merge mai departe și încetarea aplicării,
sari la acest aducă apel, te pot specifica diferite opțiuni
pe care doriți să trece de-a lungul să-l.
Și una dintre ele este capacitatea de a încărca codul aferent
prin specificarea withRelated instructori apoi cursuri.
Deci, haideți să ne întoarcem și în stare proaspătă acest lucru aici și se va opri din nou.
Deci, acum, cursurile obiect, același număr de modele,
dar acum fiecare model are un hash relații
care are instructori care este legat de.
Deci, acest curs, de exemplu,
care este, desigur 082 are două modele de instructor conexe.
Și puteți vedea deja cum mult mai ușor acest lucru este de a sorta
de a lucra vizual cu mult atunci când ai de a face cu lucruri
pe care le fel de a schimba codul și apoi încercați să-l din nou în PHP.
Faptul că puteți doar opri executarea în întregime
și evalua ceea ce este aici și - in consola, -
zoom out, cursuri este, știți,
ceea ce că domeniul de aplicare locală variabile sunt disponibile
și acest lucru este în prezent, la nivel mondial obiect pentru că așa cum ați văzut,
dacă nu te sun cu un context specific, nu va
de a avea ceva relevant aici.
Și apoi, - Lasă-mă arata alte câteva exemple
de punere în aplicare promisiunile.
Deci, în loc de a face acest lucru instructori withRelated aici eu sunt
O să mergeți mai departe și pentru a muta acest pentru a descărca și apoi cursurile,
Am de gând să se întoarcă instructori courses.load.
Și apoi - atunci te sun atunci.
[Pauză]
Deci, atunci în acest moment, cursuri trebuie să fie încărcate
cu instructori, care este o acțiune asincron.
Dar, pentru că suntem o întoarce de la o promisiune, valoarea viitoare
de atunci este indiferent acest se întoarce de apel asincrone
care, în acest caz de sarcină este o metodă în Raft
care de fapt se întoarce colectarea în sine.
Deci, este încărcarea instructori pe acolo
și apoi puteți specifica - dacă e doar o proprietate,
aveți posibilitatea să specificați acest lucru ca string, în caz contrar,
puteți face instructori și cerințe
ca o metodă - îmi pare rău, ca o matrice.
Și apoi, dacă doriți să obțineți cu adevărat de lux și constrânge orice
dintre acestea având în vedere aduceri, te se poate specifica ca un hash
cu instructori și apoi ce iti place pentru a limita interogarea pe.
Deci, aș dori să se încarce toate instructori la cursurile în cazul în care -
astfel QB pentru interogare constructor unde stare este activă.
Și puteți obține cu adevărat fantezie cu orice
de interogări aferente v-ar dori să construiască.
Dar, doar pentru acum, vom să rămânem la doar instructori
și ne întoarce acea valoare
astfel încât, atunci următoarea atunci ar trebui să toate cursurile încărcate
în mod corespunzător.
Și dacă a existat o eroare la orice pas în acest lanț,
s-ar sări în jos pentru a captura.
Deci, haideți să mergem mai departe și că a alerga.
Deci, de fiecare dată - spre deosebire de PHP, un dezavantaj este
"Pentru ca nod" este o funcționare de lungă proces, de fapt, aveți nevoie de
pentru a opri procesul de nod cum vă actualizați codul,
deoarece versiunea care este care rulează în timpul de rulare este,
Versiunea cod care a fost încărcat
atunci când nu a început ceea ce aveți fel
a actualizat codul cu de atunci.
OK. Vom stabili un punct de întrerupere aici, aici și de reîmprospătare.
[Pauză]
Oh, am de fapt, nu reîmprospăta această pagină, fie
așa că a fost în procesul de vechi.
Astfel încât să reîmprospătați atât acest și inspectorul nod.
Deci, acum vom vedea cursuri.
Dacă luăm doar eșantion de unul dintre aceste modele,
putem vedea că relațiile obiect este gol, dar acum -
și motivul pentru care aveți nevoie pentru a seta puncte de întrerupere este, ei bine,
Am menționat că puteți sari în trasarea stivei
și vezi tu știi, unde se merge în app.
Deci, acum pot vedea ce este întâmplă în metoda de încărcare,
pe care le-am definit pe colecțiile.
Este un fel de "sarcini Eager relații pe o deja ".
Și puteți pas prin și vezi linie cu linie
în cazul în care aceste lucruri este merge, care este mare.
Dacă aveți ceva care este rupt în codul dvs.,
este aruncat unele erori și esti ca, chiar vreau
pentru a vedea în cazul în care acest lucru se întâmplă.
Dar, de îndată ce aveți o ceva asincron, -
se duce la alta bifați din bucla eveniment
și veți pierde dvs. - ai pierdut locul dvs.
în inspectorul nod.
Deci, ai nevoie să spun, "OK, o dată ce am pierde,
de care are nevoie pentru a opri acum la această linie din nou. "
Pentru că dacă am păstrat lovind în jos, în jos stivă,
ar avea în cele din urmă doar plecat dacă nu am stabilit acest lucru
linia 22 albastru linie pauză.
Deci, acum, dacă mă uit la cursuri de aici,
ar trebui pe relația instructori
și apoi au instructori le atașați.
Deci, puteți vedea că m-am întors o promisiune de la prima promisiune
și apoi puteți continuu face acest lucru pe linie.
Astfel încât diferite promisiunea, promit biblioteci,
Am folosit unul numit Bluebird care este foarte util.
Se adaugă o mulțime de frumos de acest pentru schimbarea asincron -
schimbarea apel înapoi Codul de bază în chestii
care funcționează bine cu promisiuni.
Dar - îmi pare rău [inaudibil] ce Am fost de gând să-l spun aici.
Să aruncăm o privire deși la -
deci haideți să spunem că a existat o problemă atunci când preluarea ceva.
Așa că am această altă cale pentru a găsi numit ID curs.
Deci, hai sa facem curs 2.
Pot obține - curs JSON.
Și acest lucru nu [neauzit].
[Pauză]
Miroase a ceva în neregulă aici.
Nu în 3000, am fost la fila inspector Chrome.
OK. Deci, haideți să mergem la Desigur - curs JSON 1.
Și acest lucru se întoarce doar în JSON format, cursul încărcat
cu unele instructori.
Dar exemplul am vrut pentru a da aici este faptul că,
Fac JSON ID curs.
Și în preluați parametrii, Am nevoie de specificarea adevărat,
care este o opțiune care este documentate în Bookshelf
în cazul în care se spune că, "În cazul în care, Am încerca și de a găsi acest curs
și nu este acolo, apoi arunca o eroare. "
Și că ar trebui să fie prins de către captura bloca aici.
Deci, haideți să mergem mai departe și sări înapoi în inspectorul nod și încercați
și rupe acest lucru și vedem ce avem.
Deci, hai sa stabilit o pauză aici pe cursul JSON.
Bine.
Voi merge la curs și JSON Mi-ar pune doar în unele -
[Pauză]
Acesta poate fi un pic dificil uneori, atunci când sunteți încercarea
pentru a gestiona care unul a fost împrospătat
și care nu au - să vedem.
Așa că sună eroare răspuns gol.
[Pauză]
Să arunca un program de depanare în aici.
Din cauza modului nod de fapt optimizează
pentru runtime JavaScript să fie atât de repede pe server,
uneori debugger nod are unele erori atunci când încercați
și a stabilit puncte de întrerupere dinamic și aveți de fapt nevoie de
de a utiliza un program de depanare și nu linie cu linie.
Să vedem dacă acest ne primește ceea ce ne dorim.
Așa că am stabilit, app.get Desigur JSON id,
și am stabilit debugger mea acolo
în declarația de captură în partea de jos.
Fetch necesita adevărat, ar trebui - în regulă, acolo mergem, sa rupt.
Deci, acum pot vedea care a oprit
la acest bloc finală captură deoarece withRelated -
sau pentru că necesita adevărat specificată și nu există nici un curs
cu ID-ul de acest mare număr printr-o excepție
care este acum Emessage.
Și fiecare eroare în JavaScript are o proprietate stivă
care vine împreună cu ea.
Deci, este de multe ori util la, de exemplu,
consola log out e.stack.
Și eu pot vedea de fapt, atunci când am lovit o eroare.
Așa că am obține eroare gol răspuns, că este mesajul
care a fost trimis prin Bookshelf.
Dar acum, eu pot arunca o privire la, la apel stiva și vedea
că în Bookshelf dialecte SQL model de 83,
acest răspuns gol eroare a fost aruncat.
Și acest lucru este în cazul în care am menționat, este dot anonim
pentru că este un anonim funcție.
În cazul în care au o funcție de nume ar avea idei mai bune
la care funcționează efectiv prin intermediul fără a fi nevoie să meargă
în codul model.js.
Deși este menit să fie destul, destul de ușor de citit,
așa că am putea vedea că on-line.
Ce au spus mi-a fost de linie 83.
Deci, dacă options.require și răspunsul nu exista,
acum aruncă o nouă Eroare răspuns gol.
Deci, puteți vedea destul de simplu modul în care funcționează.
Și pe plan intern în Bookshelf,
nu esti doar un întreg grămadă de utilizare de promisiuni.
Astfel, puteți specifica Promise.method
cu biblioteca Bluebird care ține de contextul corect
din aceasta în timp ce se întoarce o promisiune.
Și așa am - Am obligatoriu valoarea acestui similare
la ceea ce am menționat mai devreme, dar folosind promisiuni
și apoi eu pot - este nou.
Acesta poate fi asincron sau dacă nu vreau.
Și apoi m-am face ceva alte lucruri care pot
sau poate să nu fie asincron și apoi felul de salturi în jos acest lucru.
Deci, Promise.all este un ajutor care o mulțime de biblioteci populare au
unde puteți avea o matrice de potențial poate
sau poate să nu fie promisiuni.
Și odată ce toate acestea sunt finalizat, vă întoarceți că
și apoi sare la linia următoare
și puteți vedea cum într-adevăr aplatizează piramida
pe care le obține, iad apel invers ca sa cunoscut
dacă faci totul cu callback linie cu linie.
Există modalități de a obține în jurul valorii de asta, dar promisiunile sunt una
dintre cele mai bune moduri în opinia mea
pentru a menține într-adevăr codul curat și ușor de citit.
Astfel că este doar o scurtă Introducere în JavaScript
și la raft și Knex în general.
Și, dacă există întrebări, Știu că este o tona de material
la fel de a încerca și de acoperire mai ales că limbile,
spre deosebire de cele mai multe pe care le sunt familiarizat cu așa că am vrut doar
pentru a face astfel încât cel puțin dacă aveți probleme
cu codul dvs., poate un fel de salt în -
asta e ceea ce îmi place să fac, este un fel de a sări în bibliotecile
pe care îl folosesc și văd modul în care sunt structurate lucrurile.
Nu e unul care am menționat sunat mai devreme Backbone.js
și de fapt, este [Inaudibil] pe partea de client
pentru a ajuta da vedere modelul Structura de control
la codul.
Dar ea are de fapt sursă de documentare adnotat
care vă permite să vedeți un fel de.
Este foarte bine documentat, ce se întâmplă,
cum se sporind funcționalitatea Ajax
sau funcționalitatea eveniment sau modele și colecții fel
de a explica ceea ce este întâmplă în acest proces.
Și dacă ați înțeles elementele de bază ale JavaScript
ca moștenirea prototypal și doar modul în care sunt utilizate funcții
atât ca obiecte și valori și clase și tot.
Ea face mult mai ușor pentru a înțelege ce se întâmplă
la potențial în biblioteci pe care îl utilizați
și codul debugger și să poată să nu fi dat cu capul tău
de perete, deoarece nu înțelege cum
diferite piese sunt de lucru, așa.