>> Так, з гэтым, як гаворыцца,
толькі выгляд просты ўвядзенне ў прататыпах
і мадэль JavaScript аб'ект.
Мы не збіраемся перакладаць шасцярні крыху пагаварыць
пра больш JavaScript на сервер і Кніжная палка Бібліятэка
і злучэнне Knex Бібліятэка.
Такім чынам, вы можаце на самой справе проста -
калі вы шукаеце Bookshelf.js гэта павінна быць даволі лёгка
знайсці, павінна быць першым вынік, і Кніжная палка
Давід згадваецца толькі дае шмат структуры
вакол аб'ектаў JavaScript і працаваць з імі рэляцыйнай
ў рэляцыйных базах дадзеных.
Так, шмат падобных рысаў хто на самай справе моцна натхнёны
па ORM Laravel ў якасці а таксама Backbone.js,
які з'яўляецца пярэдняя частка MVC бібліятэка, якая дазваляе вам
структураваць ваш код, падобна таму, што я паказваў
з прыкладамі прататыпы, дзе вы можаце -
а не проста адвольна кідаць заняткі
з вашых меркаванняў тут і там.
Гэта дае вам мадэлі і зборнікі гэтых мадэляў
якія, як мяркуецца, у якасці роду адзіная кропка ісціны
аб дадзеных за ваша прыкладанне.
І тады вы слухаць, як тыя, Мадэлі змены, вы кажаце, у парадку,
зноў вынесці гэты шаблон тут і на гэты раз тут
а не проста дадаць клас тут, дадаць клас там і свайго роду падабраць
на селектараў і зрабіць Павуцінне JQuery кода.
Гэта дае больш на аснове класаў Структура для асобных частак,
але важным кампанентам што бібліятэка мадэлі
якія маюць падобную структуру да таго, што мадэлі на паліцу зрабіць.
Так што, калі вы знаёмыя з Кніжная палка вы даволі таксама
даволі добра знаёмыя з Backbone.js мадэлі,
і я рэкамендую зірнуць на гэта.
Так, некаторыя з асноўных асаблівасцяў
што гэта дае вам усяго толькі магчымасць усталёўкі дадзеных на аб'екце
патэлефанаваць запыце, што вяртае асобны запіс
з базы дадзеных, стварыць адносіны як падобныя
тое, што вы мелі справу ў ў Laravel
дзе вы можаце сказаць Пацыент ўсталяваць метад запісу
і сказаць, што гэта выйграў рэкорд
дзе аб'ект запіс імя табліцы паказчыкі здароўя.
Давайце паглядзім.
Мае шмат - яна належыць -
проста рэчы, якія вы вельмі падобныя -
даволі добра знаёмыя з ўжо, але ў JavaScript.
І пад капотам, для кніжнай паліцы,
ён выкарыстоўвае построитель запытаў называецца Knex.js.
Такім чынам, вось Knex, knexjs.org.
Гэта спасылка на цацкі, калі хто-небудзь калі-небудзь гуляў з гэтым.
Але гэта дазваляе - у Аналагічным чынам, у JQuery,
Вы толькі выгляд стварэння ланцуг розных метадаў
што вы тэлефануеце на вашым запіс у базе дадзеных, так што вы можаце -
Вы пачалі з таго, Knex і імя табліцы.
Так, напрыклад, карыстальнікі Knex, выбраць, якія слупкі трэба,
дзе, і маюць розныя WHERE ўмоўныя і вы можаце мець
І дзе, ці там, дзе, дзе паміж імі, дзе няма,
Вы цяпер, па лініі.
Вы можаце паказаць розныя далучаецца паміж табліц базы дадзеных
якія Кніжная палка выкарыстоўвае ўнутрана стварыць свайго роду магіі
вакол hasOne, HasMany, належыць да, belongsToMany.
І таму камбінацыя
з двух дазволіць вам зрабіць даволі ступені, што вы б выкарыстоўваць
у рамках як Laravel з пункту
функцыянальнасці працы з базамі дадзеных.
Такім чынам, давайце ісці наперад і прымаць паглядзіце на простым прыкладзе
для экспрэс прыкладанне, якое робіць выкарыстанне гэтых мадэляў
і зборнікі Кніжная палка джаз [фанетычныя].
Так, я стварыў проста простае дадатак тут.
Я распрануць некаторыя рэчы , Які быў ініцыялізацыі экспрэс
і рухацца, што ў ініцыялізацыі каталог, які я стварыў.
Адна з добрых рэчаў аб працы з Экспрэс як меркавалася
каб Laravel тое, што ёсць сапраўды не вельмі ў жыццё
на вас стылізаваная.
Такім чынам, вы можаце ствараць каталогі -
гэта сапраўды не дае вам шмат, каб адпрацоўваць.
У вас ёсць толькі выгляд некаторых асноўныя параметры, а затым -
але гэта не хвалюе , Дзе яны знаходзяцца.
Вы не павінны мець Каталог кантролера.
Вам не трэба, каб мець мадэлі каталог, каталог канфігурацыі.
Вы можаце сартаваць, стварыць тыя, як вашыя патрэбы праекта
і ўсталяваць рэчы шлях што сэнс найбольш важныя для вас.
Так замест таго, усе гэта экспрэс шаблонны
ў асноўных app.js я толькі што сказаў дадатак роўна патрабуюць ініцыялізацыі / Экспресс.
І так у ініцыялізацыі,
ініцыялізацыі папка Я проста Экспрэс тут,
і гэта патрабуе Express, званкі функцыя ўстаноўкі, называе -
настройвае выгляд рухавіка, JSON парсер, ўсё такое.
Так што цяпер, давайце і далей ісці.
Так што я патрабуюць Вядома інструктар сустрэча
і патрабаванні мадэляў.
Так што гэта ў тэчцы, Я проста вырашыў мадэляў імёнаў.
Гэта не абавязкова павінна быць спосаб, аднак, гэта мае сэнс,
але мадэлі проста даволі агульны таму я рэкамендаваў бы яго.
Але - Так пойдзем для курса.
Я думаю, што я выкарыстоўваю - Так, і прыклады
тут усё заснаваныя вакол мадэлі курса.
Так што давайце проста ўзяць паглядзіце на гэта.
Такім чынам, зараз, толькі з Першы радок гэтай мадэлі,
Я ўжо патрабуе нешта яшчэ.
Так што калі вы заўважыце ў вузле Вы павінны быць якія патрабуюць
ці вы збіраецеся ў канчатковым выніку патрабуючы цэлы букет
з розных файлаў , Якія размешчаны
у розных месцах ў вашым дадатку.
І адносныя шляху туды, дзе вы знаходзіцеся
у бягучым дадатку,
калі гэта не верхні ўзровень ужо вызначаецца, як ва ўсталёўцы яго
з MPM як кніжнай паліцы ці Knex або экспрэс ці нешта,
тыя ці не сваяк.
Да? Павелічэнне больш?
ОК. ОК. Такім чынам, вы будзеце ў канчатковым выніку патрабуе цэлы букет
проста розныя файлы ў Код, які добра і што дрэнна.
У добрым сэнсе, вы ведаеце, дзе рэчы, і гэта не свайго роду
магіі, як да таго, што адбываецца пад капотам,
якія могуць рэальна прывесці да блытаніны
калі ў вас ёсць вельмі цяжкія Java -
або вельмі цяжкі рамкі, як Laravel, які выгляд кажа,
мы збіраемся, каб клапаціцца гэта так у вас няма
патрабаваць усё але ў вас ёсць
ведаць, як усе працуе для таго, каб выкарыстоўваць яго.
Дзе, як у дадзеным выпадку, гэта вельмі проста, як у
дзе ўсе, яны проста канцы
тым, што крыху больш друкаваць.
Гэтак жа, як у баку мне падабаецца ў выкарыстанні, ёсць убудова
калі вы выкарыстоўваеце сляпой тэкст
дзе вы можаце ўсталёўваць вузел Модулі дапаможныя і вы можаце пачаць
ўвесці як інструктар і ён стварае адносны шлях
, Дзе вы знаходзіцеся ў тым, што Код файл, накшталт карысна.
Такім чынам, мадэль вядома патрабуе, тут базу
а затым база стажор патрабуецца ініцыялізацыі / кніжную паліцу
а затым Кніжная палка, ён патрабуе верхняга ўзроўню Кніжная палка
а затым ініцыялізуе яго ініцыялізацыі асобніка Knex,
які задае імя кліента
і сувязь налады для базы дадзеных.
Так што я проста з дапамогай простай Асобнік Сіквел Pro, які -
з MySQL, я да яго доступ з Сіквел Pro і яна мае толькі выгляд
аналагічнага базе Ўстаноўка, як мы мелі
у першым прыкладзе прыкладання з каталогам курсаў.
Так, я магу ўсталяваць злучэнне налады тут,
і ўсе яны апісаны на старонцы праекта Knex.js
пра тое, як усталяваць гэтыя сувязі.
Так, у мяне зараз ёсць свой базавую мадэль.
І як я ўжо казаў з змена прататып,
так што можа на самай справе быць нават шмат, каб -
дадае шмат шаблоннага у код так канвенцыя
што была адаптаваная па Backbone.js
і цяпер Bookshelf.js з'яўляецца каб дадаць гэта відэа пашырыць метад
як статычнае ўласцівасць Вашы аб'екты JavaScript,
што надае яму выгляд амаль клас на аснове характару ў спадчыну
дзе, калі вы тэлефануеце пашырыць вы можаце наладзіць любы
са спосабаў-прататыпаў што вы хацелі б тут
а затым вы можаце - любая дадатковыя статычныя метады
што вы, магчыма, захочаце, вы можаце проста ўсталяваць іх самі
тут, таму я магу падоўжыць яго с - гэта, калі, напрыклад,
некалькі мадэляў неабходна паказаць імя і гэты атрымаць імя.
Такім чынам, вось, я кажу, адлюстроўваецца імя для мадэлі
па змаўчанні з'яўляецца тое, што яго імя Гатэль знаходзіцца ў адваротным выпадку вяртанне
няма назвы.
І зараз на кожны мадэль, якая ўяўляе сабой -
што пашырае гэтую базавую мадэль, я зараз ёсць метад адлюстроўваецца імя
на прататыпе ланцуг недзе.
І калі я хачу, каб перазапісаць яго Я магу проста ўсталяваць яго - усталяваць, што -
GetName б тут.
І гэта дазваляе імітаваць класічная спадчыну
у JavaScript, якая можа быць прыемна прыватнасці для рэчаў
, Якія паддаюцца быць Клас заснаваны як аб'ектных мадэляў.
Так што давайце перайсці назад у код прыкладання.
Так што я атрымаў маршрут для ўсяго слэш, толькі для майго індэкса
а затым скараціць курсы.
І абодва гэтыя заклікаюць метад renderCourses.
Такім чынам, яшчэ раз, функцыі першы клас, і могуць быць перададзены
ў якасці аргументаў метадаў.
Так, у гэтым app.get, Я тэлефаную -
Я перадаю renderCourses ў якасці аргументу.
І зрабіць - або функцыі можа быць наладжаны як вар -
як я рабіў раней вар renderCourses роўная функцыю
або яны могуць быць проста Функцыя renderCourses.
Гэта не робіць занадта асаблівай розніцы.
Вы сапраўды можаце ёсць тое, што называюцца функцыі імя
выразы, якія VAR renderCourses роўна
Функцыя renderCourses.
І, прычына хочаце мець назваць функцыі асабліва
ў вузле тым, што ён дае вам чысцей -
больш зручным для чытання трасіроўкі стэка.
Так што калі ў вас ёсць цэлы букет
ананімных функцый ён будзе казаць -
калі ў вас ёсць памылкі у кодзе You'Ll -
вы не будзеце ведаць, якая функцыя гэта тэлефануе вам прыйдзецца шукаць
на нумар кода і нумар радка
і гэта часам лягчэй проста візуальна разабраць
калі вы на самой справе маюць імёны
для функцый самі на боку сервера.
Так што гэта renderCourses, давайце назавем вузлоў прыкладанняў -
так я слухаю на Ядро 3000 [фанетычныя].
І так усё гэта робіць правільна тут проста становіцца ўсё
курсы з базы дадзеных.
Я нават не абмяжоўваючы яго так ён робіць велізарную колькасць
радкоў ён вяртае.
І для таго, каб зрабіць гэта,
ад мадэлі, вядома, ёсць з'яўляецца статычнае ўласцівасць
называецца калекцыя.
І таму я проста назваць яго - я сказаў стварыць новую калекцыю
для гэтага курса, а затым спампаваць яго,
, А затым вярнуцца курсы Калекцыя тут, у абяцаньні.
Так ўнутрана, Дэвід ў - Апошняя палова вучыў трохі
аб абяцанні і абяцанні з'яўляюцца выкарыстоўваецца вельмі моцна і ў Knex
і Кніжная палка таму гэта падае -
Гэта дае вам Здольнасць мець кучу
з розных асінхронныя выклікі і як бы далучыцца, то разам
або прынесці нешта, а затым
з выклікам іншага асінхронны выклік базы дадзеных
і вярнуць гэтую каштоўнасць і затым перайсці да наступнага, то
а ў наступным, то і тады прыйдзецца злавіць ў самым канцы, каб разабрацца
мімічных асінхронны спроба злавіць паводзіны з асінхроннага кода,
таму што вы бачыце яго зараз
але гэта яшчэ складаней, як толькі вы пачынаеце мець справу з ім.
Асінхронны код проста ўсюды
у баку сервера JavaScript і сапраўды ў значна большай ступені
чым вы прывыклі да таго, калі вы зрабілі наяўнасць
на кліенцкім боку.
Так што сапраўды, сапраўды дапамог вам там.
Але толькі, каб паказаць вам, адладчык заяву
што я казаў у інспектар інструменты вузел,
Я збіраюся ісці наперад і кінуць адладчыка лінію тут
у функцыі renderCourses і паглядзець, дзе, што прыводзіць мяне
калі я - так вузла інспектар можа быць усталяваны
робячы НПМ Усталяваць з сцягам G,
што азначае Global Вузел інспектар.
І гэта прынясу яго для NMP і ўсталяваць яго глабальна
для вашых прыкладанняў так што вы можаце проста назваць яго
з каманднага радка.
Я ўжо ўстаноўлены так, каб я пайду наперад і -
на самай справе гэта, магчыма, прыйдзецца чакаць яго проста вазьму,
зойме пару секунд.
І тое, што вузел інспектар зноў дазваляе вам
зрабіць, гэта мець гэты абезгалоўлены версія кансолі адладчыка
што вы прывыклі да пры працы на баку кліента і ўмець
, Каб спыніць, проста дадайце паказана паказвае ў кодзе.
Спыніць выкананне і прымаць паглядзець на тое, што адбываецца,
якія б сапраўды спатрэбіцца, калі функцыя
так былі даступныя
пры адладцы PHP код, я ўпэўнены.
Так што давайце проста ўзяць паглядзіце на гэта.
Так што я магу проста патэлефанаваць інспектар вузел
і гэта скажу наведаць гэты URL порт 5858, каб пачаць адладку,
вось толькі па змаўчанні за тое, як яна запускаецца.
Так што, я зараз атрымалі - ёсць нічога не адбываецца тут
таму што мне трэба, каб пачаць.
Так вузел тупік [фанетычныя] сцяг адладкі, а затым app.js.
Так ён кажа адладчык праслухоўвае порт 5858,
Экспрэс слухае сервер на 3000.
Так што мы добра ісці.
Дазвольце мне проста абновіце гэта.
А цяпер я бачу app.js код, які я проста гляджу на
але тут, у кансолі.
Так што цяпер, калі я спрабую запусціць гэта, Вы можаце бачыць гэта, ён спыняецца.
Гэта толькі і чакаюць, таму што яго Увесь выкананне кода цяпер
спыніўся на гэтым адладчык лінія, якую я паклаў там.
І я зараз магу сервер -
[Неразборліва Заўвага]
О, так. Што такое ключавое слова ярлык для павелічэння экрана?
О, ёсць.
Зразумеў. ОК.
[Паўза]
О, гэта не глядзіць [Фанетычныя], што.
Так, курсы сапраўды вялікі
таму што я не раблю абмежаваць пункт або што-небудзь,
гэта проста выбарка Уся база дадзеных курсаў
якія многія з іх.
А так - што аб'ект
што на самой справе можа прывесці да збою асобнік інспектар запіска.
It's - ОК.
Дазвольце мне зрабіць мяжа і то мы можам зірнуць
калі ён не выманне сотні курсаў.
Так, забіць сервер і інспектар
і я зраблю Course мяжа калекцыя запыт 20.
Так, у кніжнай паліцы, у адрозненне ад Laravel
дзе вы можаце проста патэлефанаваць абмежаваць непасрэдна або любым
з гэтых метадаў SQL што вы карыстаецеся
непасрэдна на экзэмпляры ORM.
У любы час, што вы карыстаецеся толькі Спосаб SQL, які прадугледжаны
у Knex, вы павінны выклікаць запыт для сартавання
з падлучыцца да ланцуга запыту.
І гэта можа быць выклікана альбо з функцыяй,
таму можна сказаць,, функцыі гэты мяжа 10 ці вы гэта называеце
, Паказаўшы, якая метад вы хацелі б патэлефанаваць
на экзэмпляры Knex а затым, якое значэнне.
Так што мы збіраемся рабіць абмежаваць 20, а затым ўсталяваць.
Мы на самой справе не трэба адладчык тут
таму што мы можам проста ўсталяваць кропкі супыну
і што робіць яго лягчэй.
Добра.
Такім чынам, давайце ўсталяваць кропку супыну прама тут і паспрабаваць загрузіць яго.
Няправільны лініі.
Прама тут.
[Паўза]
ОК. Так што зноў спыніўся.
Так што цяпер, курсы з'яўляецца аб'ект з даўжынёй 20
і мы бачым, усе розныя мадэлі, што гэта за вушы
з базы дадзеных прама тут так у мяне ёсць аб'ект мадэлі
які мае, усярэдзіне атрыбуты уласнасці
па аб'екце ўсе рэчы што ён знаходзіцца ў базе дадзеных.
Любыя падзеі, якія маюць было зарэгістравана
так што вы можаце зарэгістравацца розныя мерапрыемствы,
напрыклад, калі мадэль знаходзіцца ў працэсе выдалення
або калі яна быць вушы,
можна задаць розныя ўласцівасці або змяняць рэчы.
Там вельмі шмат розных гаплікаў і ўсе яны апісаны
у Bookshelf.js дакументацыя, якія дазваляюць вам
зрабіць выгляд нічога што вы сапраўды хочаце зрабіць
са сваімі мадэлямі і калекцыі.
Вы можаце - яны прызначаны каб быць сапраўды наладжвальны
і проста для адаптаваць іх
да патрэбаў вашага Дадатак.
Але толькі праглядаючы тут,
Я бачу, што розныя курсы даступныя.
І ў гэтым выпадку, я фактычна не прынесці
з любымі іншымі дадзенымі, акрамя за ўсё самі курсы.
Але ў аналагічна Красамоўны ОРМ можна ўсталяваць
да адносін, таму курс належыць многіх інструктара.
Так што, калі я іду наперад і спыніць дадатак,
перайсці да такой запыт выклік, вы Можна паказаць розныя параметры
што вы хацелі б данесці да яго.
І адзін з іх з'яўляецца магчымасць загрузкі адпаведны код
, Паказаўшы withRelated інструктары затым курсы.
Так давайце вернемся і свежы гэта тут і спыніцца.
Так што цяпер, аб'ект курсы, такое ж колькасць мадэляў,
але цяпер кожная мадэль мае хэш адносін
які мае інструктараў што гэта звязана з.
Так што гэта, вядома, напрыклад
які з'яўляецца, вядома 082 мае два звязаныя мадэлі інструктар.
І вы ўжо можаце ўбачыць, як значна лягчэй гэта для сартавання
візуальна працаваць, чым з калі вы маеце справу з рэчамі
што вы як бы змяніць код а затым паспрабаваць зноў у PHP.
Той факт, што вы можаце проста цалкам спыніць выкананне
і ацэньваць тое, што тут і - У кансолі, -
паменшыць маштаб, курсы, вы ведаеце,
што гэта лакальная вобласць зменныя даступныя
і гэта ў цяперашні час з'яўляецца глабальнай Аб'ект, таму што, як вы бачылі яго,
калі вы не тэлефануеце з канкрэтнага кантэксту, ён не збіраецца
мець нешта адпаведную тут.
І потым, - хай мне паказаць яшчэ некалькі прыкладаў
рэалізацыі абяцанні.
Такім чынам, замест таго, каб рабіць гэта withRelated інструктары тут я
збіраюся ісці наперад і рухацца ў гэтым каб забраць, а затым курсы,
Я збіраюся вярнуцца courses.load інструктары.
А потым - потым вы называеце то.
[Паўза]
Так то ў гэтай кропцы, курсы павінны быць загружаны
з інструктарамі, якія з'яўляецца асінхронным дзеянне.
Але таму, што мы яе вяртанне ад абяцанні, наступнае значэнне
бо тады гэта ўсё, што гэты асінхронныя вяртаецца выклікаў
які ў гэтым выпадку нагрузка з'яўляецца спосаб, у кніжнай паліцы
што на самой справе вяртае сама калекцыя.
Так што гэта пагрузкі інструктары на там
а затым вы можаце паказаць - калі гэта проста адно з уласцівасцяў,
вы можаце паказаць гэта у выглядзе радка, у адваротным выпадку,
Вы можаце зрабіць інструктараў і патрабаванні
як метад - прабачце, ў выглядзе масіва.
А потым, калі вы хочаце, каб атрымаць сапраўды фантазія і абмежаваць любы
з іх далі выбарак, вы можаце паказаць яго ў якасці хэша
з інструктарамі і што потым Вы хацелі б абмежаваць запыт на.
Такім чынам, я хацеў бы, каб загрузіць усе інструктары на курсах, дзе -
так QB для построитель запытаў дзе стан актыўна.
І вы можаце атрымаць сапраўды фантазіі з любым
з звязаных запытаў Вы хацелі б пабудаваць.
Але, толькі на дадзены момант, мы збіраемся прытрымлівацца за ўсё інструктараў
і мы вяртаемся, што значэнне
так то ў наступным затым варта ёсць усе курсы загружалася
належным чынам.
І калі адбылася памылка на любым этапе гэтым ланцугу,
было б саскочыць з уловам.
Так што давайце ісці наперад і працаваць, што.
Такім чынам, кожны раз - у адрозненне ад PHP, адзін недахоп з'яўляецца
», Таму што вузел" з'яўляецца даўно працуе Працэс, вам сапраўды трэба
, Каб спыніць працэс вузла як вы абнавіць свой код,
паколькі версія, што гэта працуе ў перыяд выканання з'яўляецца,
версія Код, якім ён тады быў
калі пачаў ня што ў вас ёсць свайго роду
з абнавілі код з тых часоў.
ОК. Мы ўсталюем кропку супыну тут, тут і абнаўлення.
[Паўза]
О, я на самой справе не абновіце гэтую старонку альбо
так што гэта было на старым працэсу.
Такім чынам, вы абнавіць як гэта і інспектар вузел.
Так што цяпер мы бачым, курсы.
Калі мы проста ўзяць ўзор адной з такіх мадэляў,
мы бачым, што адносіны Аб'ект пусты, але цяпер -
і прычына таго, што вам трэба ўсталяваць кропкі супыну, ну,
Я згадаў, што вы можаце скакаць у трасіроўку стэка
і паглядзець, вы ведаеце, дзе ён збіраецца ў дадатак.
Так што цяпер я магу бачыць тое, што адбываецца ў метадзе нагрузкі,
якія я вызначыў аб калекцыях.
Ён накшталт як "Імкнучыся нагрузкі адносіны на ўжо ".
І вы можаце пакрокава і паглядзець, радок за радком
дзе гэты матэрыял збіраецца і гэта выдатна.
Калі ў вас ёсць што-то што не працуе ў кодзе,
гэта кідае памылку і вы, як я сапраўды хачу
каб убачыць, дзе гэта адбываецца.
Але як толькі вы сутыкнецеся з нешта асінхронны, -
ён ідзе да іншага адзначце з цыклу падзей
і ты страціш сваю - Вы губляеце сваё месца
у інспектара вузла.
Такім чынам, вы павінны сказаць, "Добра, толькі я страціць гэта,
ён павінен спыніць зараз на гэтай лініі яшчэ раз. "
Таму што калі я працягваў паражаць ўніз, уніз па стэку,
яна павінна была б у рэшце рэшт проста пайшоў бы я не ўсталяваць гэта
лініі 22 сінюю лінію разрыву.
Так што цяпер, калі я гляджу на курсах тут,
ён павінен на стаўленне інструктары
а затым інструктары прымацаваць іх.
Такім чынам, вы можаце бачыць, што я вярнуўся абяцанне ад першага абяцанні
а затым вы можаце пастаянна зрабіць гэта па лініі.
Такім чынам, розныя абяцанні, абяцаюць бібліятэкі,
Я выкарыстаў адзін называецца Bluebird які з'яўляецца сапраўды карысным.
Гэта дадае шмат прыемна гэта для змены асінхронны -
змены ператэлефанаваць базавы код у матэрыял
што добра працуе з абяцаннямі.
Але - шкада [неразборліва], што Я збіраўся сказаць гэта там.
Давайце зірнем хоць у -
так скажам, што існуе Праблема пры выбарцы нешта.
Таму ў мяне ёсць гэты іншы маршрут знайсці пад назвай курса ID.
Так давайце зробім курс 2.
Ці магу я атрымаць - JSON курс.
І гэта робіць [неразборліва].
[Паўза]
Я адчуваю пах нешта не так тут.
Ці не на 3000, я быў на інспектар ўкладка Chrome.
ОК. Так што давайце ісці ў Вядома - JSON Вядома 1.
І гэта вяртае толькі ў JSON Фармат, вядома загружаны
з некаторымі выкладчыкамі.
Але прыклад я хацеў даць тут з'яўляецца тое, што,
Я раблю JSON курсу ID.
І ў выбарку параметраў, Я і паказваецца, патрабуецца дакладна,
які з'яўляецца варыянт, які задакументаваныя ў кніжнай паліцы
дзе ён кажа, што: "Калі, Я паспрабаваць знайсці гэты курс
і гэта не там, затым выдасць памылку ".
І гэта павінна быць злоўлены ўлоў блакаваць сюды.
Так што давайце ісці наперад і вярнуцца назад у інспектара вузла і паспрабуйце
і зламаць гэта і паглядзець, што мы атрымалі.
Так давайце ўсталюем перапынак тут, на працэсе JSON.
Добра.
Я пайду ў JSON вядома ж, і Я б проста пакласці ў некаторых -
[Паўза]
Гэта можа быць крыху больш складана часам, калі вы спрабуеце
кіраваць якой адзін быў абноўлены
і якія маюць не - паглядзім.
Так што тэлефануе памылку пусты адказ.
[Паўза]
Давайце кінуць адладчык тут.
Таму што, як вузел фактычна аптымізуе
для выканання JavaScript настолькі хутка на сэрвэры,
часам вузел адладчык мае некаторыя памылкі пры спробе
і ўсталяваць кропкі супыну дынамічна і вы на самой справе трэба
выкарыстоўваць адладчык і ня лінія за лініяй.
Такім чынам, давайце паглядзім, калі гэта атрымлівае нас, што мы хочам.
Таму я, app.get JSON Вядома ID,
і я ўсталяваў мой адладчык ёсць
ў заяве на вылаў у ніжняй часткі.
Fetch патрабуюць праўда, трэба - Усё ў парадку, там мы ідзем, зламаўся.
Такім чынам, цяпер я бачу, што ён спыніўся
ў гэтым апошнім ўлове блока таму што withRelated -
ці таму, што патрабуюць дакладна вызначаны і няма вядома
з ID гэтага вялікі лік шляхам выключэнні з
які ў цяперашні час Emessage.
І кожная памылка ў JavaScript мае ўласцівасць стэка
, Які пастаўляецца разам з ім.
Так даволі часта бывае карысна Для напрыклад,
суцешыць выйсці e.stack.
І я магу рэальна ўбачыць калі я ударыў памылку.
Так што я атрымліваю памылку пусты адказ, што гэта паведамленне
які быў адпраўлены праз Кніжная палка.
Але цяпер, я магу зірнуць ў, пры заходзе стэка і ўбачыць
, Што ў кніжнай паліцы дыялекты SQL мадэль 83,
гэта пустое адказ Памылка была кінута.
І гэта тое, дзе я згадвалася, гэта кропка ананімна
таму што гэта ананімны функцыя.
Калі б гэта было функцыяй назву вам давядзецца лепшыя ідэі
да якой функцыянуюць фактычна праз, не звяртаючыся да
у код model.js.
Хоць гэта прызначаецца, каб быць даволі, даволі чытаным,
так што я магу бачыць, што ў Інтэрнэце.
Што яны кажуць мне было лініі 83.
Так што, калі options.require і адказ не існуе,
цяпер кідае новы пустая памылка адказ.
Такім чынам, вы можаце бачыць даволі проста, як гэта працуе.
І ўнутрана ў кніжнай паліцы,
там проста ў цэлым куча выкарыстання абяцанняў.
Такім чынам, вы можаце паказаць Promise.method
з Bluebird бібліятэцы які трымае правільны кантэкст
гэта пры вяртанні абяцанне.
І таму я - я звязвання Значэнне гэтага аналагічны
да таго, што я згадаў раней, але з выкарыстаннем абяцанні
і тады я магу - гэта новая.
Гэта можа быць асінхронны ці не, калі я хачу.
А потым я зрабіць некаторыя іншыя рэчы, якія могуць
быць ці не быць асінхроннымі і то віды скачкоў ўніз гэта.
Так Promise.all з'яўляецца дапаможным, што шмат папулярных бібліятэк маюць
дзе вы можаце мець масіў патэнцыйна можа
быць ці не быць абяцанні.
І як толькі ўсе тыя завершана, вы вернецеся, што
а затым ён скача да наступнай радку
і вы можаце ўбачыць, як на самой справе выраўноўваецца піраміду
што вы атрымаеце, зваротнага выкліку, чорт вазьмі, як яго вядомы
калі вы робіце ўсё з зваротныя выклікі радок за радком.
Ёсць спосабы, каб абыйсці гэта, але абяцанні з'яўляюцца адным
з лепшых спосабаў, на мой погляд
каб сапраўды падтрымліваць вашу код чыстым і лёгкім для чытання.
Так што гэта ўсяго ў некалькіх хвілінах Ўвядзенне ў JavaScript
і Кніжная палка і Knex ў цэлым.
І, калі ёсць якія-небудзь пытанні, Я ведаю, што тона матэрыялу
да выгляду паспрабаваць вечка тым больш, што на мовах,
у адрозненне ад большасці, што вы знаёмыя з так што я проста хацеў
зрабіць так, каб па крайняй меры калі ў вас узніклі праблемы
з вашым кодам, вы можа роду скачок -
гэта тое, што мне падабаецца рабіць, гэта роду скокнуць у бібліятэках
што я выкарыстоўваю і паглядзець, як рэчы ўладкованыя.
Там адна, што я згадаў раней назваў Backbone.js
і на самай справе гэта [Неразборліва] на баку кліента
каб дапамагчы даць выгляду мадэлі Структура кіравання
у код.
Але гэта на самай справе мае анатаваны крыніца дакументацыі
якая дазваляе сартаваць, бачаць.
Гэта сапраўды добра дакументальна, што адбываецца,
як гэта павелічэння функцыянальнасць Ajax
ці функцыянальнасць падзея або мадэлі і калекцыі роду
растлумачыць тое, што адбываецца ў працэсе.
І калі вы разумееце, асновы JavaScript
як прототипных спадчыну і проста, як выкарыстоўваюцца функцыі
як абодвух аб'ектаў і каштоўнасцяў і класы, і ўсё.
Гэта робіць яго нашмат прасцей каб зразумець, што адбываецца
на патэнцыйна ў бібліятэкі, якія вы карыстаецеся
і код адладчык і ўмець каб ня быць біцца галавой
да сцяны, таму што Вы не разумееце, як
розныя часткі працуюць, так.