>> Tak, z tym mówi się,
właśnie rodzaj proste Wprowadzenie do prototypów
i model obiektowy JavaScript.
Nie zamierzamy przesuwać przekładnie trochę porozmawiać
o bardziej JavaScript na Serwer i Biblioteka Schowek
i połączenie Knex biblioteka.
Tak więc, można właściwie tylko -
jeśli szukasz Bookshelf.js powinno być dość łatwe
znaleźć, należy najpierw Wynik i Schowek
jak Dawid wspomniał tylko Daje to wiele struktury
JavaScript i wokół obiektów pracy z nimi relacyjnie
w relacyjnych bazach danych.
Tak, wiele podobnych cech kto jest rzeczywiście mocno inspirowane
przez ORM Laravel jako także Backbone.js,
który jest przedni koniec MVC Biblioteka, która pozwala
do struktury kodu, podobny do tego, co było widać
z przykładami prototypy, gdzie można -
zamiast po prostu arbitralnie rzucanie klas
na tu i tam swoich poglądów.
To daje modele i zbiory tych modeli
które mają działać jako jakby jeden punkt prawdy
o dane dla aplikacja.
A potem słuchać, jak te Modele zmian, można powiedzieć, OK,
ponownie uczynić ten szablon tutaj, a ten tutaj
a nie tylko dodać, klasę, dodaj klasę tam i rodzaj piłki
na selektorów i zrobić pajęczyna kodu jQuery.
To daje więcej klasowe Struktura na pojedyncze fragmenty
ale istotnym składnikiem że biblioteka jest modele
które mają podobną strukturę co zrobić modele półkowe.
Tak więc, jeśli jesteś zaznajomiony z Regał jesteś całkiem również
dość znane Backbone.js modele,
i polecam rzucić okiem na to.
Tak więc, niektóre z głównych cech
że daje to tylko Możliwość ustawiania danych dotyczących obiektu
zadzwonić do pobrania, które zwraca pojedynczy rekord
z bazy danych, tworzyć Stosunki w podobnych
do czego rozpatrywane ciągu w Laravel
, gdzie można powiedzieć, Pacjent ustawić metodę nagrywania
i powiedzieć, że to jest rekord wygrał
gdzie obiekt jest rekord Nazwa tabeli dokumentacji medycznej.
Zobaczmy.
Ma wielu - należy do -
tylko rzeczy, że jesteś bardzo podobne -
dość znane już, ale w JavaScript.
I pod maską, na półce
używa Konstruktora kwerend nazywa Knex.js.
Tak, to jest Knex, knexjs.org.
Jest to odniesienie do zabawki, czy kto kiedykolwiek grał z tym.
Ale to pozwala - w podobny sposób, do jQuery,
po prostu coś w rodzaju tworzenia Łańcuch różnych metod
że dzwonisz na swoje wiersz bazy danych, dzięki czemu można -
zacząłeś od stwierdzenia, Knex i nazwa tabeli.
Tak więc, na przykład, użytkownicy Knex, wybierz kolumny, które chcesz,
gdzie, i inaczej w sytuacji, warunkowe i można mieć
I gdzie, albo w przypadku, gdzie pomiędzy, gdzie nie,
teraz, w dół.
Można określić różne przyłącza między tabel bazy danych
które Schowek używa wewnętrznie ustawić rodzaj magii
wokół hasOne, hasMany, belongsTo, belongsToMany.
I tak połączenie
z nich pozwala robić całkiem czego można stosować
w ramach, jak Laravel w kategoriach
funkcjonalności pracy z bazami danych.
Tak, idziemy do przodu i podjąć spojrzenie na prosty przykład
dla aplikacji, które wyraźnego korzysta z tych modeli
i zbiory Schowek jazz [fonetycznie].
Tak, mam ustawić tylko prosta aplikacja tutaj.
Rozebrałem się niektóre rzeczy który został inicjowanie wyraźnych
i przejść na init, że w katalog, który stworzyłem.
Jedną z miłych rzeczy pracy z Express ma
do Laravel jest to, że nie ma Naprawdę nie wiele egzekwowane
Ci skonwencjonalizowane.
Dzięki czemu można tworzyć katalogi -
tak naprawdę nie daje dużo do pracy off.
Masz tylko rodzaj niektórych podstawowe ustawienia, a następnie -
ale to nie obchodzi gdzie je umieścić.
Nie musisz mieć katalog sterownika.
Nie trzeba mieć modele katalog, katalog config.
Jakby można utworzyć tych, jak Twoje potrzeby projektu
i wszystko skonfigurować sposób że sens najbardziej do Ciebie.
Więc zamiast wszystko to ekspresowa boilerplate
w głównych app.js właśnie powiedziałem równi startowy / app wymaga wyraźnej.
I tak w init
Folder inicjowanie Ja po prostu nie Wyraź tutaj,
a to wymaga Express, połączenia Funkcja konfiguracji, połączenia -
ustawia silnik widok, Parser JSON, to wszystko.
Więc teraz, niech dalej w dół.
Więc jestem wymagający Kurs instruktora spotkanie
i wymagania modeli.
Więc to są w folderze Właśnie postanowił modeli nazwy.
Nie muszą być tak droga jednak ma sens,
ale jest po prostu ładna modele Wspólne więc polecam go.
Ale - Więc chodźmy w toku.
Myślę, że używam - Tak, a przykłady
tutaj są oparte całego modelu kursu.
Więc po prostu wziąć popatrz na to.
Tak, teraz, tylko z Pierwsza linia tego modelu,
Ja już jestem wymagający coś innego.
Więc jeśli zauważysz w węźle powinien być wymóg,
lub masz zamiar skończyć wymagające całą masę
z różnych plików które są usytuowane
w różnych miejscach w aplikacji.
I względne ścieżki gdziekolwiek jesteś
w bieżącej aplikacji,
chyba, że ​​jest już najwyższy poziom zdefiniowane jak w zainstalowaniu go
z MPM jak regał na książki lub Knex lub ekspresowe czy coś,
te, które nie są względne.
Tak? Powiększyć więcej?
OK. OK. Tak, będziesz skończyć całą masę wymagających
po prostu różne pliki w Kod, który jest dobry i zły.
W dobry sposób wiesz, gdzie rzeczy i nie jest to rodzaj
magii, co jest dzieje się pod maską,
która może być naprawdę kłopotliwe
gdy masz bardzo ciężkie Java -
lub bardzo ciężkie ramy jak Laravel, które jakby mówi,
będziemy dbać tego tak nie masz
wymagać wszystko ale trzeba
wiedzieć, jak wszystko działa w celu wykorzystania go.
W przypadku, gdy tak jak w tym przypadku, to jest bardzo proste, jak do
gdzie wszystko jest, oni są tylko końce
się być trochę więcej pisania.
Podobnie jak w części I like w użyciu, nie ma wtyczki
jeśli używasz ślepy tekst
gdzie można zainstalować węzeł Moduły pomocnik i można rozpocząć
do instruktora i wpisz jak tworzy ścieżkę względną
do miejsca, gdzie są do tego Plik kod, rodzaj przydatne.
Tak, oczywiście model jest wymagający tutaj bazę
Baza stażysta, a następnie wymaga startowy / półkę
i Schowek, to wymaga półce najwyższego poziomu
a następnie inicjuje go zainicjowany instancji Knex,
który ustawia nazwę klienta
oraz połączenia Ustawienia bazy danych.
Więc jestem po prostu za pomocą prostego wystąpienie Sequel Pro, który -
MySQL, mam dostępu do niego z Sequel Pro i ma tylko rodzaj
podobnej bazie konfiguracja, mieliśmy
w pierwszej przykładowej aplikacji z katalogu kursów.
Tak, mogę ustawić połączenie Ustawienia tutaj,
i wszystkie one są udokumentowane na stronie projektu Knex.js
co do sposobu instalacji te połączenia.
Tak, teraz mam mój model bazowy.
I jak już wspomniałem z Zmiana prototyp,
tak, że może faktycznie być trochę dużo do -
Dodaje wiele boilerplate do kodu, więc konwencja
, który został dostosowany przez Backbone.js
i teraz Bookshelf.js jest dodać to rozszerzenie metody
jako właściwości statyczne Twoje obiekty JavaScript,
co daje mu coś w rodzaju niemal dziedziczenie oparte klasa natura
gdzie jeśli zadzwonisz rozszerzyć można skonfigurować dowolny
metod prototypowych że chcesz tutaj
a następnie można - każdy dodatkowe metody statyczne
że może chcesz, można po prostu ustawić je sobie
tutaj więc mogę go przedłużyć o - tak, jeśli na przykład
Wiele modeli potrzebne wyświetlić nazwę i tę nazwę dostać.
Tak, tu, mówię Wyświetlana nazwa dla modelu
domyślnie jest bez względu na jej nazwę Obiekt jest inaczej powrót
no name.
I teraz na każdy Model, który jest -
który rozciąga się ten model bazowy, ja teraz mają sposób wyświetlania nazwy
prototypu łańcuch gdzieś.
A jeśli chcę go zastąpić Można po prostu ustawić go - ustawić co -
GetName byłoby tutaj.
I pozwala naśladować klasycznego dziedziczenia
w JavaScript, które mogą być ładne rzeczy, zwłaszcza dla
które nadają się jako klasa modeli obiektów na podstawie jak.
Warto więc wrócić do kod aplikacji.
Więc mam tylko trasy dla slash, tylko dla mojego indeksu
a następnie ciąć kursy.
I oba te wzywają Metoda renderCourses.
Więc znowu, funkcje pierwszej klasy i mogą być przekazywane
jako argumenty metod.
Tak więc, w tym app.get, Dzwonię -
Olewam renderCourses jako argument.
I renderowanie - lub funkcje może być ustawiony jak var -
jak robiłem wcześniej var renderCourses równa funkcji
albo mogą być po prostu renderCourses funkcyjnych.
To nie ma zbyt dużej różnicy.
Rzeczywiście można mieć co Nazwa funkcji są nazywane
wyrażeń, które renderCourses var równi
renderCourses funkcyjnych.
I powód do chcą mieć nazwa funkcji, szczególnie
w węźle jest to, że daje czystsze -
bardziej czytelny ślad stosu.
Więc jeśli masz całą masę
funkcji anonimowych powie -
gdy masz błąd W kodzie odzew -
nie wiem która funkcja ona dzwoni, że trzeba patrzeć
pod numerem kodowym i numer linii
i to jest czasami łatwiej tylko wizualnie analizować
gdy rzeczywiście mają nazwy
dla funkcji się na serwerze.
Więc to renderCourses, nazwijmy aplikacje węzła -
tak słucham na Rdzeń 3000 [fonetycznie].
I tak to wszystko robi w prawo tu jest po prostu wszystko się
Kursy z bazy danych.
Nie mam nawet jego ograniczania więc to robi ogromną liczbę
wierszy to wraca.
I aby to zrobić,
modelu tam przedmiotów Właściwość statyczne jest
zwany zbiór.
I tak właśnie nazywają to - ja powiedział utworzyć nową kolekcję
na ten kurs, a następnie pobrać go,
, a następnie powrót na kursy Kolekcja tutaj w obietnicy.
Tak wewnętrznie, David w - Ostatnie pół nauczył się trochę
o obietnice i obietnice są używany bardzo mocno zarówno Knex
i Schowek, ponieważ to nadaje -
Daje Możliwość pęczku
z różnych połączeń asynchronicznych i jakby to razem połączyć
lub pobrać coś, a następnie
z tego zaproszenia innym asynchroniczne połączenie bazy danych
i tę wartość i powrócić następnie przejść do następnego, a następnie
i następny wtedy i wtedy złapać na samym końcu, aby posortować
z próbować łapać naśladować asynchroniczny zachowanie z kodu asynchronicznego,
bo widzisz to teraz
ale jest jeszcze trudniej, gdy zaczniesz sobie z tym poradzić.
Kod asynchroniczny jest po prostu wszędzie
w JavaScript i po stronie serwera naprawdę dużo większym stopniu
niż masz w zwyczaju, jeśli zrobiłeś JavaScript
po stronie klienta.
Tak, że naprawdę pomógł ci tam.
Ale tak, aby pokazać, Oświadczenie debugger
że mówił o w narzędzia inspektor węzłów,
Mam zamiar iść do przodu i rzucać linię debugger tutaj
w funkcji renderCourses i zobaczyć, gdzie to prowadzi mnie
gdy - tak węzeł inspektor może być zainstalowany
wykonując KMP Zainstaluj z flagą G,
co oznacza, Cały świat Inspektor węzeł.
I będzie to sprowadzić go do NMP i zainstalować go na całym świecie
dla aplikacji więc można po prostu nazwać to
z linii poleceń.
Mam już zainstalowane tak pójdę dalej i -
faktycznie może to mieć czekać, to będzie po prostu wziąć,
przyjmować dwóch sekund.
A co węzeł inspektor ponownie pozwala
zrobić, to mieć to bez głowy wersja konsoli debuggera
że masz w zwyczaju podczas pracy Po stronie klienta i móc
zatrzymać, po prostu dodaj określono Wskazuje w kodzie.
Zatrzymać wykonywanie i podjąć spojrzeć na to, co się dzieje,
które mają bardzo się przydać, jeśli funkcja
tak były dostępne
podczas debugowania Kod PHP na pewno.
Więc po prostu wziąć popatrz na to.
Więc może po prostu zadzwonić Węzeł inspektor
i powiem odwiedzić ten adres URL Port 5858, aby rozpocząć debugowanie,
to jest po prostu domyślne w jaki sposób uruchamia się.
Tak, ja teraz mam - nie nic nie dzieje się tutaj
bo trzeba zacząć.
Więc węzeł impas [fonetycznie] flag debugowania i app.js.
Tak mówi debugger nasłuchuje na porcie 5858,
Ekspresowe serwer słuchania na 3000.
Więc jesteśmy dobrze iść.
Pozwólcie mi tylko odświeżyć.
A teraz mogę zobaczyć app.js kod, który po prostu patrząc na
ale tutaj w konsoli.
Więc teraz, gdy próbuję uruchomić to, można go zobaczyć, to zatrzyma.
To jest po prostu czeka, ponieważ jej Cały kod jest wykonanie
zatrzymał się na tym debugger linia Wrzuciłem tam.
I mogę teraz serwer -
[Niesłyszalny Uwaga]
O, tak. Co to jest słowo kluczowe skrót do ekranu powiększyć?
Och nie ma.
Rozumiem. OK.
[Pauza]
Och, to nie patrzy [Fonetycznie], że.
Tak, jest naprawdę duży kursy
bo ja nie robię ograniczenie klauzuli lub cokolwiek,
to jest po prostu ściągam Cała baza kursów
które wiele z nich.
I tak - co jest przedmiotem
że rzeczywiście może upaść Instancja inspektor uwaga.
It's - OK.
Pozwól mi zrobić, a limit wtedy możemy spojrzeć
gdy nie ściągam setki kursów.
Tak, zabić serwer i inspektor
i zrobię Course Limit zapytanie zbiór 20.
Tak więc, w półce w przeciwieństwie Laravel
gdzie można po prostu zadzwonić ograniczyć bezpośrednio lub any
te metody SQL że używasz
się bezpośrednio na przykład ORM.
W każdej chwili, że używasz tylko Sposób, który jest SQL
w Knex, musisz wywołać zapytanie do sortowania
TAP do łańcucha zapytania.
I to może być wywołana albo z funkcją,
więc można powiedzieć, funkcja ten limit 10 lub to nazwać
określając, które Metoda chcesz zadzwonić
na przykład Knex i których wartość.
Więc mamy zamiar zrobić ograniczenie 20, a następnie ustawić.
My rzeczywiście nie potrzebujesz debuggera tutaj
bo może po prostu ustawić punkty przerwania
i sprawia, że ​​łatwiej.
Dobrze.
Tak, niech ustawić punkt przerwania tu i spróbować go załadować.
Źle linia.
Tutaj.
[Pauza]
OK. Więc zatrzymał ponownie.
Więc teraz, kursy jest obiekt o długości 20
i widzimy wszystko inaczej Modele, że to naciągane
z bazy danych tutaj więc mam obiekt modelu
który ma wewnątrz atrybuty nieruchomości
na obiekcie są wszystkie rzeczy, że znalazł się w bazie danych.
Wszelkie wydarzenia, które mają zarejestrowany
więc można zarejestrować różne wydarzenia,
Na przykład, gdy Model jest usuwany
lub gdy jest to jest naciągane,
można ustawić różne Właściwości lub zmodyfikować rzeczy.
Istnieje wiele różnych haczyków i wszystkie one są udokumentowane
w Bookshelf.js dokumentacja, które umożliwiają
zrobić coś w rodzaju że naprawdę chcesz to zrobić
ze swoimi modelami i kolekcje.
Można - oni na myśli być bardzo konfigurowalny
i bardzo proste do można je dostosować
do potrzeb Twojego aplikacji.
Ale patrząc przez tutaj,
Widzę to, co różni Kursy są dostępne.
I w tym przypadku, faktycznie nie pobierał
z innymi danymi innymi niż tylko same kursy.
Jednak w podobny sposób jak Wymownym ORM można ustawić
się stosunki, więc oczywiście Należy do wielu instruktora.
Tak więc, jeśli pójdę do przodu i zaprzestania stosowania,
Przejdz do pobrania połączenie, można określić różne opcje
, które chcesz przejść do niego.
A jeden z nich jest Możliwość załadowania kodu powiązanego
określając withRelated instruktorzy następnie kursy.
Więc wróćmy i świeże znowu to tu i zatrzymać.
Więc teraz, kursy, obiekt, sama liczba modeli,
ale teraz każdy model ma mieszania relations
który ma instruktorów że jest to związane.
Tak więc na przykład ten kurs
co jest oczywiście 082 ma dwa podobne modele instruktora.
I już można zobaczyć, jak znacznie łatwiej jest do sortowania
z wizualnie pracować niż kiedy masz do czynienia z rzeczy
że jakby zmienić kod , a następnie spróbować ponownie w PHP.
Fakt, że można po prostu całkowicie zatrzymać wykonywanie
i ocenić, co jest tu i - w konsoli, -
pomniejszyć, kursy, wiesz,
co, że zakres lokalny zmienne są dostępne
i to jest obecnie globalnym obiektu, ponieważ, jak to zobaczyłem,
chyba że nazywają się specyficzny kontekst, to nie będzie
mieć coś odpowiedniego tutaj.
A następnie, - pozwól mi pokazać jeszcze kilka przykładów
realizacji obietnic.
Więc zamiast robić to withRelated instruktorzy tu jestem
zamiar iść do przodu i przesunąć ten do pobrania, a następnie kursy,
Mam zamiar wrócić Instruktorzy courses.load.
A potem - potem zadzwoń, a następnie.
[Pauza]
Tak więc w tym momencie, Kursy powinny być ładowane
z instruktorów, który jest asynchroniczne działanie.
Ale ponieważ jesteśmy jego zwrot z obietnicą, obok wartości
na to, co to jest asynchroniczne wywołanie powraca
która w tym przypadku obciążenia Sposób jest Regał
że faktycznie zwraca Sama kolekcja.
Więc to ładowanie instruktorzy na nie
a następnie można określić - jeśli to tylko jedna właściwość,
można określić to jako ciąg znaków, w przeciwnym razie,
można zrobić instruktorów i wymagania
jako metoda - przepraszam, w postaci tablicy.
A następnie, jeśli chcesz, aby bardzo wyszukane i ograniczyć wszelkie
z nich podano pobierające, ty Można określić go jako hash
z instruktorami, a następnie co chcesz ograniczyć zapytanie na.
Tak, chciałbym, aby załadować wszystkie instruktorzy na kursach, w którym -
tak QB dla konstruktora zapytań gdzie stan jest aktywny.
I można dostać naprawdę Lataj z dowolnego
związanych z nimi pytań chcesz zbudować.
Ale właśnie teraz, idziemy trzymać się tylko instruktorzy
a my wracamy, że wartość
tak, to następnym, to powinieneś mają wszystkie kursy załadowany
prawidłowo.
I, jeśli nie było błędu w dowolnym punkcie w tym łańcuchu
byłoby skoczyć do połowu.
Więc idź naprzód i uruchomić to.
Więc za każdym razem - w przeciwieństwie do PHP, jednym minusem jest to,
"Ponieważ węzeł" jest długi bieg Proces, rzeczywiście trzeba
zatrzymać proces węzła jak zaktualizować swój kod,
powodu, że jest to wersja działa w czasie pracy jest,
wersja Kod, który został załadowany
gdy nie rozpoczął co masz sort
z zaktualizowany kod się od tego czasu.
OK. Będziemy ustawić punkt przerwania tutaj, tutaj i odświeżania.
[Pauza]
Och, tak naprawdę nie odświeżyć stronę albo
tak było na starym sposobem.
Więc jak to odświeżyć i inspektor węzeł.
Teraz widzimy kursy.
Jeśli po prostu wziąć próbkę jednego z tych modeli
widzimy, że stosunki obiekt jest pusty, ale teraz -
i powód, że trzeba ustawić punkty przerwania, dobrze,
Wspomniałem, że można skok w ślad stosu
i zobaczyć, wiesz, gdzie to się dzieje w aplikacji.
Więc teraz mogę zobaczyć, co znajduje się dzieje się metodą obciążenia,
które zostały zdefiniowane na zbiorach.
To rodzaj "Chętni ładunki relacje na już ".
I można krok po kroku i zobaczyć, linia po linii
gdzie ten materiał jest dzieje co jest.
Jeśli masz coś , który jest uszkodzony w kodzie,
to jakiś błąd i rzucanie jesteś jak, naprawdę chcę
aby zobaczyć, gdzie to się dzieje.
Ale jak tylko napotkasz coś asynchroniczny, -
przechodzi do następnego tick pętli zdarzeń
i stracisz - utratę miejsca
w Inspektorze węzła.
Więc trzeba powiedzieć, "OK, gdy stracę to,
musi przestać co znowu tej linii. "
Bo jeśli trzymałem uderzenie w dół, w dół stosu,
byłoby to w końcu tylko odszedł gdybym nie ustawisz
linia 22 niebieska linia przerwy.
Więc teraz, kiedy patrzę na kursach tutaj,
powinien na związek Instruktorzy
i wtedy Instruktorzy dołączyć je.
Więc widać, że wróciłem Obietnica od pierwszej obietnicy
a następnie można stale zrobić w dół.
Tak różne obietnice, Obiecujemy bibliotek,
Kiedyś jeden o nazwie Bluebird co jest bardzo przydatne.
Dodaje wiele miło z tego zmiany asynchroniczny -
zmiany oddzwonienie kod bazowy do rzeczy
że dobrze współpracuje z obietnic.
Ale - przepraszam [niesłyszalne], co Chciałem powiedzieć, że nie.
Rzućmy okiem choć -
Więc powiedzmy, że nie było Problem podczas pobierania coś.
Więc mam ten drugi trasą aby znaleźć nazwie ID przedmiotów.
Więc zróbmy kurs 2.
Czy mogę dostać - kurs JSON.
I to robi [niesłyszalne].
[Pauza]
Czuję coś złego tutaj.
Nie w 3000, byłem na Zakładka Inspektor Chrome.
OK. Więc chodźmy do Oczywiście - JSON kurs 1.
I to właśnie w JSON zwraca Format, oczywiście załadowany
z niektórych instruktorów.
Ale przykład chciałem otrzymując tutaj jest to, że
Robię JSON przedmiotów ID.
I parametrów pobierają, Jestem określenie wymaga prawdziwe,
co jest rozwiązaniem, które jest Regał udokumentowane
w którym mówi, że: "Jeśli, Staram się znaleźć ten kurs
i to nie jest tam, następnie wyrzucić błąd. "
I że powinny być objęte połów zablokować tutaj.
Więc idź naprzód i wrócić do węzła i spróbuj inspektora
i to i przerwa zobacz, co mamy.
Więc ustalmy sobie przerwę tu w trakcie JSON.
Dobrze.
Pójdę do JSON i oczywiście Chciałbym po prostu umieścić w niektórych -
[Pauza]
To może być trochę trudne czasami, gdy próbujesz
do zarządzania, który z nich został odświeżony
i które nie - zobaczymy.
Więc dzwoni błąd pusta odpowiedź.
[Pauza]
Wyrzućmy debuggera tutaj.
Ze względu na to, jak węzeł faktycznie optymalizuje
do wykonywania JavaScript się tak szybko na serwerze
czasami debugger węzeł ma pewne błędy podczas próby
i ustawić punkty przerwania dynamicznie i rzeczywiście potrzebujemy
używać debuggera i nie linia po linii.
Zobaczmy więc, czy to dostaje nam to, co chcemy.
Tak ustawić, app.get id Oczywiście JSON,
i mam ustawić tam mój debugger
w instrukcji catch na dole.
Fetch wymagają prawdziwe, to powinny - Wszystko w porządku, nie idziemy, złamał.
Tak, teraz widzę że zatrzymany
w tym ostatnim bloku catch bo withRelated -
lub dlatego, że wymagają prawdziwe określony i nie ma przebieg
z ID to duży Numer poprzez wyjątek
który jest teraz Emessage.
A każdy błąd w JavaScript ma właściwość stosu
która przychodzi wraz z nim.
Więc jest to często przydatne na przykład, do
pocieszyć wylogować e.stack.
I mogę naprawdę zobaczyć kiedy uderzył błąd.
Więc ja się błąd pusty odpowiedź, że to wiadomość
, który został wysłany przez Regał.
Ale teraz mogę spojrzeć na stos, na rozmowy i zobacz
że w Bookshelf dialekty SQL modelu 83,
Odpowiedź ta pusta Błąd został wyrzucony.
I to jest, gdzie wspomniano, jest to kropka anonimowy
bo jest anonimowy funkcja.
Gdyby to była nazwa funkcji to masz lepsze pomysły
do której w rzeczywistości funkcjonować przez bez konieczności przechodzenia
do kodu model.js.
Mimo, że to ma być dość, dość czytelny,
tak widzę, że w Internecie.
Co mówią mnie to linia 83.
Tak więc, jeśli options.require i Odpowiedź nie istnieje,
teraz rzuca nowe błąd odpowiedzi pusty.
Więc widać, dość proste, jak to działa.
I wewnętrznie w półce
tam po prostu całość Pęczek stosowania obietnic.
Tak można określić Promise.method
z Bluebird biblioteki który utrzymuje prawidłowe kontekstu
podczas powrotu z tego obietnica.
I tak mam - mam wiązania Wartość ta podobna
na co ja wspomniałem powyżej, lecz stosując obiecuje
i wtedy mogę - jest nowy.
Może być asynchroniczne czy nie, czy chcę.
A potem zrobić kilka inne rzeczy, które mogą
lub może nie być, a asynchroniczny następnie sortuje zeskakuje ta.
Więc Promise.all pomocnika, który jest Wiele popularnych bibliotek mają
gdzie można zjeść Tablica potencjalnie może
lub może być gadanie.
I wszystkich, którzy są po raz zakończone, że wrócisz
a potem skacze Zgodnie z kolejnym
i można zobaczyć, jak to naprawdę spłaszcza się piramidę
że masz, oddzwanianie piekło jak jego znany
jeśli robisz wszystko z callbacki linia po linii.
Istnieją sposoby, aby ominąć to, ale obietnice są jednym
z najlepszych sposobów, w mojej opinii
naprawdę utrzymać kod czyste i łatwe do odczytania.
Więc to jest tylko krótki Wprowadzenie do JavaScript
i do schowka i Knex w ogóle.
I, jeśli istnieje jakiekolwiek pytania, Wiem, że jest mnóstwo materiału
do rodzaju próby i pokrywa zwłaszcza, że ​​w językach,
w przeciwieństwie do większości, że jesteś zna więc chciałem
zrobić to tak, że co najmniej jeśli masz problemy
z kodem, to może jakby skok -
to jest to, co lubię robić, to jakby skoczyć do biblioteki
że używam i zobaczyć jak rzeczy są zbudowane.
Jest jedna, że ​​nie wspomniał wcześniej nazywany Backbone.js
i faktycznie jest to [Niesłyszalne] po stronie klienta
pomóc dać widok modelu struktura regulatora
do kodu.
Ale faktycznie ma odnotowany źródłem dokumentacji
która pozwala na rodzaj zobaczyć.
To naprawdę dobrze udokumentowane, co się dzieje,
jak to się zwiększając funkcjonalność Ajax
lub zdarzenie lub funkcjonalność modele i kolekcje sortowania
wyjaśnić, co jest dzieje się w procesie.
I jeśli zrozumiesz Podstawy JavaScript
jak prototypal dziedziczenia i jak są wykorzystywane funkcje
w obu obiektów i wartości i klasy i wszystko.
To sprawia, że ​​o wiele łatwiej aby zrozumieć, co się dzieje
na potencjalnie biblioteki, że używasz
i kod debugger i być w stanie aby nie być walić głową
na ścianę, gdyż nie rozumiem, jak
różne kawałki pracują, więc.