>> Έτσι, με αυτό που είπε,
ακριβώς το είδος της μια απλή εισαγωγή στα πρωτότυπα
και το μοντέλο αντικειμένου JavaScript.
Εμείς δεν πρόκειται να αλλάξει γρανάζια λίγο να μιλήσω
για περισσότερες JavaScript σχετικά με την server και η Βιβλιοθήκη Βιβλιοθήκη
και η σύνδεση Knex Βιβλιοθήκη.
Έτσι, μπορείτε πραγματικά μόνο -
αν ψάχνετε για Bookshelf.js θα πρέπει να είναι αρκετά εύκολο
να βρείτε, θα πρέπει να είναι η πρώτη αποτέλεσμα, και Βιβλιοθήκη
όπως ο David αναφέρθηκε μόνο δίνει πολλές δομής
γύρω JavaScript αντικείμενα και σε συνεργασία με τους relationally
σε σχεσιακές βάσεις δεδομένων.
Έτσι, πολλά παρόμοια χαρακτηριστικά που στην πραγματικότητα είναι σε μεγάλο βαθμό εμπνευσμένη
από ORM Laravel ως καθώς και το Backbone.js,
το οποίο είναι ένα εμπρόσθιο άκρο MVC βιβλιοθήκη η οποία σας επιτρέπει
να δομήσει τον κωδικό σας, παρόμοιο με αυτό που έδειχνε
με τα παραδείγματα της πρωτοτύπων όπου μπορείτε -
και όχι μόνο αυθαίρετα ρίχνοντας κατηγορίες
τις απόψεις σας εδώ και εκεί.
Σας δίνει μοντέλα και συλλογές των μοντέλων αυτών
οι οποίες υποτίθεται ότι δρουν ως το είδος της ένα ενιαίο σημείο της αλήθειας
σχετικά με τα δεδομένα για αίτησή σας.
Και τότε μπορείτε να ακούσετε, όπως αυτές αλλαγές μοντέλα, που λέτε, εντάξει,
εκ νέου να καταστήσει αυτό το πρότυπο εδώ και αυτό εδώ
και όχι μόνο προσθέτουν τάξη εδώ, προσθέτουν τάξη εκεί και το είδος των pick
για επιλογείς και να καταστεί το spiderweb των jQuery κώδικα.
Δίνει περισσότερο από ένα ταξικά δομή σε μεμονωμένα κομμάτια,
αλλά ένα σημαντικό συστατικό της ότι η βιβλιοθήκη είναι τα μοντέλα
τα οποία έχουν παρόμοια δομή σε ό, τι κάνουν τα μοντέλα Βιβλιοθήκη.
Έτσι, εάν είστε εξοικειωμένοι με το Βιβλιοθήκη είστε αρκετά επίσης
αρκετά εξοικειωμένοι με Backbone.js μοντέλα,
και θα ήθελα να συστήσω ρίχνοντας μια ματιά σε αυτό.
Έτσι, ορισμένα από τα κύρια χαρακτηριστικά
ότι σας δίνει είναι ακριβώς το δυνατότητα να ορίσετε τα δεδομένα σε ένα αντικείμενο
να καλέσετε fetch, η οποία επιστρέφει ένα ατομικό ρεκόρ
από τη βάση δεδομένων, να δημιουργήσει σχέσεις ως παρόμοια
σε ό, τι ασχολήθηκε μέσα σε Laravel
όπου μπορείτε να πείτε ένα ασθενή που μια μέθοδο ρεκόρ
και να πω αυτό έχει κερδίσει ρεκόρ
όπου το αντικείμενο είναι ρεκόρ μητρώων υγείας όνομα του πίνακα.
Ας δούμε.
Έχει πολλές - στην οποία ανήκει -
απλά πράγματα που είστε αρκετά παρόμοια -
αρκετά εξοικειωμένοι με ήδη, αλλά σε JavaScript.
Και κάτω από την κουκούλα, για την Βιβλιοθήκη,
χρησιμοποιεί ένα ερώτημα οικοδόμος ονομάζεται Knex.js.
Έτσι, αυτό είναι Knex, knexjs.org.
Είναι μια αναφορά στο παιχνίδι, αν κανείς ποτέ παίξει με αυτό.
Αλλά σας επιτρέπει να - σε ένα Με παρόμοιο τρόπο, με jQuery,
σας ακριβώς το είδος του να δημιουργήσει ένα αλυσίδας των διαφορετικών μεθόδων
ότι είστε καλώντας σας σειρά δεδομένων, έτσι ώστε να μπορεί -
Σας ξεκίνησε λέγοντας Knex και το όνομα του πίνακα.
Έτσι, για παράδειγμα, Knex χρήστες, επιλέξετε τις στήλες που θέλετε,
όπου και έχουν διαφορετική περίπτωση υποθετικοί και μπορείτε να έχετε
ΚΑΙ όταν, OR όπου, όπου μεταξύ, ό, τι δεν,
τώρα, κάτω από τη γραμμή.
Μπορείτε να καθορίσετε διαφορετικούς συνδέσμους μεταξύ των πινάκων της βάσης δεδομένων σας
που χρησιμοποιεί εσωτερικά Βιβλιοθήκη να δημιουργήσει το είδος της μαγείας
γύρω από το hasOne, hasMany, belongsTo, belongsToMany.
Και έτσι ο συνδυασμός
από τα δύο σας επιτρέπουν να κάνετε αρκετά πολύ ό, τι θέλετε να χρησιμοποιείται
στο πλαίσιο, όπως Laravel άποψη
λειτουργικότητας εργασία με βάσεις δεδομένων.
Έτσι, ας πάμε μπροστά και να λαμβάνει μια ματιά σε ένα απλό παράδειγμα
για Express app που κάνει χρήση αυτών των μοντέλων
και συλλογές Βιβλιοθήκη τζαζ [φωνητική].
Έτσι, έχω δημιουργήσει απλά μια απλή εφαρμογή εδώ.
Θα αφαιρεθούν μερικά από τα πράγματα που είχε την προετοιμασία ρητή
και να προχωρήσουμε ότι σε ένα init κατάλογο που δημιούργησα.
Ένα από τα ωραία πράγματα για σε συνεργασία με Express ως δήθεν
να Laravel είναι ότι δεν υπάρχει πραγματικά δεν είναι πολύ εκτελεστεί
σε σας conventionalized.
Έτσι, μπορείτε να δημιουργήσετε καταλόγους -
δεν πραγματικά να σας δώσει ένα πάρα πολύ να εργαστούν μακριά του.
Έχεις ακριβώς το είδος ορισμένων βασικές ρυθμίσεις και στη συνέχεια -
αλλά δεν με νοιάζει πού τα βάλατε.
Δεν χρειάζεται να έχουν κατάλογο ελεγκτή.
Δεν χρειάζεται να έχουμε μια μοντέλα καταλόγου, ένα κατάλογο config.
Είδος μπορείτε να δημιουργήσετε εκείνες τις ανάγκες του έργου σας
και να ρυθμίσετε τα πράγματα με τον τρόπο ότι έχει νόημα πλέον σε σας.
Έτσι, αντί να έχουν όλα αυτή η ρητή στερεότυπο
στην κύρια app.js μόλις είπα ισούται app απαιτούν init / ρητή.
Και έτσι στο init,
η αρχικοποίηση φάκελο Απλά έχουν Express εδώ,
και αυτό απαιτεί Express, κλήσεις η λειτουργία ρύθμισης, καλεί το -
θέτει τον κινητήρα θέα, JSON parser, όλα αυτά.
Έτσι τώρα, ας συνεχίσουμε.
Έτσι είμαι απαιτεί η συνάντηση μαθημάτων εκπαιδευτή
και τις απαιτήσεις μοντέλα.
Έτσι, αυτά είναι σε ένα φάκελο που Απλά αποφάσισα να μοντέλα όνομα.
Δεν πρέπει να είναι ότι τρόπο αυτό όμως είναι λογικό,
αλλά τα μοντέλα είναι απλά όμορφοι κοινό γι 'αυτό θα το συνιστούσα.
Αλλά - Ας πάμε για το μάθημα.
Νομίζω ότι είμαι με τη χρήση - ναι, και τα παραδείγματα
εδώ κάτω είναι όλα βασίζονται γύρω από το μοντέλο πορεία.
Οπότε ας λάβει μια ματιά σε αυτό.
Έτσι, τώρα, μόνο από το πρώτη γραμμή αυτού του μοντέλου,
Είμαι ήδη απαιτούν κάτι άλλο.
Έτσι, αν θα παρατηρήσετε στον κόμβο θα πρέπει να απαιτούν
ή θα πάμε να καταλήξετε απαιτεί ένα σωρό
διαφορετικά αρχεία που βρίσκονται
σε διαφορετικές θέσεις στην εφαρμογή σας.
Και οι σχετικές διαδρομές όπου κι αν βρίσκεστε
στην τρέχουσα εφαρμογή σας,
εκτός αν είναι ένα κορυφαίο επίπεδο ήδη ορίζεται ως το να το εγκαταστήσετε
με MPM όπως Βιβλιοθήκη ή Knex ή Express ή κάτι τέτοιο,
εκείνων που δεν είναι σχετική.
Ναι; Ζουμ σε περισσότερα;
OK. OK. Έτσι, θα πάμε να καταλήγουν απαιτεί ένα σωρό
μόλις διαφορετικά αρχεία σε σας κώδικα, το οποίο είναι καλό και κακό.
Σε έναν καλό τρόπο ξέρετε πού τα πράγματα είναι και δεν είναι το είδος
της μαγείας ως προς το τι είναι συμβαίνει κάτω από την κουκούλα,
η οποία μπορεί πραγματικά να προκαλέσει σύγχυση
όταν έχετε ένα πολύ βαριά Java -
ή πολύ βαρύ πλαίσιο, όπως Laravel, η οποία είδος του λέει,
θα πάμε να φροντίσει του, ώστε να μην έχουν
να απαιτούν τα πάντα αλλά έχετε
να ξέρετε πώς όλα έργων, προκειμένου να το χρησιμοποιήσει.
Σε περίπτωση που, όπως στην προκειμένη περίπτωση, είναι πολύ απλό ως προς
όπου τα πάντα είναι, είναι απλά άκρα
να είναι λίγο περισσότερη πληκτρολόγηση.
Ακριβώς όπως στην πλευρά μου αρέσει να χρησιμοποιούν, υπάρχει ένα plugin
αν χρησιμοποιείτε ένα τυφλό κείμενο
όπου μπορείτε να εγκαταστήσουν τον κόμβο ενότητες βοηθός και μπορείτε να ξεκινήσετε
να πληκτρολογήσετε σαν εκπαιδευτής και δημιουργεί τη σχετική διαδρομή
όπου είστε με αυτό κώδικα του αρχείου, είδος χρήσιμο.
Έτσι, το μοντέλο πορεία ζητεί από βάση εδώ
και εν συνεχεία με βάση intern απαιτεί init / ράφι
και, στη συνέχεια, η Βιβλιοθήκη, το απαιτεί τη Βιβλιοθήκη ανώτερο επίπεδο
και στη συνέχεια με αρχικοποιεί η προετοιμασία Knex παράδειγμα,
το οποίο καθορίζει το όνομα του πελάτη
και η σύνδεση ρυθμίσεις για τη βάση δεδομένων.
Έτσι, είμαι μόνο με τη χρήση ενός απλού παράδειγμα του Sequel Pro το οποίο -
της MySQL, είμαι αυτό πρόσβαση με Sequel Pro και έχει ακριβώς το είδος
από μια παρόμοια βάση δεδομένων setup όπως είχαμε
στην πρώτη εφαρμογή του δείγματος με τον κατάλογο μαθημάτων.
Έτσι, μπορώ να ρυθμίσω τη σύνδεσή μου ρυθμίσεις εδώ,
και όλα αυτά είναι τεκμηριωμένα στη σελίδα του έργου Knex.js
ως προς το πώς να στήσετε αυτές οι συνδέσεις.
Έτσι, έχω τώρα βασικό μοντέλο μου.
Και όπως ανέφερα με η αλλαγή του πρωτοτύπου,
έτσι ώστε να μπορεί πραγματικά είναι το είδος της μια πολλά να -
προσθέτει πολλά στερεότυπο με τον κωδικό σας, ώστε σύμβαση
που έχει προσαρμοσθεί από Backbone.js
και τώρα είναι Bookshelf.js για να προσθέσετε αυτό το επεκτείνουμε τη μέθοδο
ως ένα στατικό ακίνητο αντικειμένων σας JavaScript,
η οποία δίνει ένα είδος σχεδόν ταξικό χαρακτήρα κληρονομιάς
όπου κι αν καλέσετε επεκτείνει μπορείτε να δημιουργήσετε οποιαδήποτε
από τις μεθόδους πρωτοτύπου ότι θα θέλατε εδώ
και στη συνέχεια μπορείτε - οποιαδήποτε επιπλέον στατικές μεθόδους
ότι μπορεί να θέλετε, μπορείτε μπορεί να τους μόνο τους εαυτούς σας
εδώ για να μπορώ να το επεκτείνει με - οπότε αν, για παράδειγμα,
πολλαπλά μοντέλα που απαιτούνται εμφανίζει το όνομα και αυτό να πάρει το όνομα.
Έτσι, εδώ, λέω το εμφανιζόμενο όνομα για το μοντέλο
από προεπιλογή είναι ό, τι το όνομά του ιδιοκτησίας είναι διαφορετικά επιστροφή
no name.
Και τώρα κάθε το μοντέλο αυτό είναι ένα -
που εκτείνεται σε αυτό το βασικό μοντέλο, I τώρα έχουμε μια μέθοδο εμφανιζόμενο όνομα
στο πρωτότυπο αλυσίδας κάπου.
Και αν θέλω να το αντικαταστήσετε Μπορώ να το ρυθμίσετε μόνο - που ό, τι -
getName θα είναι εδώ.
Και αυτό σας επιτρέπει να μιμούνται κλασική κληρονομιά
σε JavaScript, τα οποία μπορεί να είναι ωραία ιδιαίτερα για τα πράγματα
που είναι προσφέρονται είναι ταξικές σαν μοντέλα αντικειμένου.
Οπότε ας πηδήσει πίσω στο ο κώδικας εφαρμογής.
Έτσι έχω μια διαδρομή μόνο για κάθετος, μόνο για το δείκτη μου
και στη συνέχεια να μειώσει τα μαθήματα.
Και τα δύο αυτά καλούν η μέθοδος renderCourses.
Έτσι και πάλι, οι λειτουργίες είναι πρώτης κατηγορίας και μπορεί να περάσει
ως επιχειρήματα για τις μεθόδους.
Έτσι, σε αυτό το app.get, Παίρνω -
Είμαι πέρασμα renderCourses ως επιχείρημα.
Και να καταστήσει - ή λειτουργίες μπορεί να ρυθμιστεί όπως var -
όπως έκανα νωρίτερα var renderCourses ισούται με τη λειτουργία
ή μπορούν να είναι απλά renderCourses λειτουργία.
Αυτό δεν κάνει πάρα πολύ μεγάλη διαφορά.
Μπορείτε να έχετε πραγματικά ό, τι καλούνται λειτουργίας όνομα
εκφράσεις, οι οποίες είναι renderCourses var ισούται
renderCourses λειτουργία.
Και ο λόγος για να θέλουν να έχουν αναφέρουμε τις λειτουργίες ιδιαίτερα
στον κόμβο είναι ότι σας δίνει ένα καθαρότερο -
πιο ευανάγνωστο ίχνος στοίβας.
Έτσι, εάν έχετε ένα σωρό
ανώνυμων λειτουργίες θα πω -
όταν έχετε ένα σφάλμα στον κώδικα εσείς θα σας -
δεν θα ξέρει που λειτουργούν είναι καλώντας σας θα πρέπει να εξετάσουμε
στο κωδικό αριθμό και τον αριθμό σειράς
και είναι μερικές φορές πιο εύκολο απλά για να αναλύσει οπτικά
όταν έχετε πραγματικά ονόματα
για τις λειτουργίες τους εαυτούς τους στην πλευρά του διακομιστή.
Έτσι, αυτό renderCourses, ας την ονομάσουμε κόμβο apps -
έτσι ακούω για Πυρήνας 3000 [φωνητική].
Και έτσι όλα αυτά που κάνει σωστά εδώ είναι απλά να πάρει όλα τα
μαθήματα από τη βάση δεδομένων.
Δεν είμαι καν το περιορισμό έτσι ώστε να κάνει ένα τεράστιο αριθμό
των σειρών είναι επιστροφή.
Και για να το κάνουμε αυτό,
με το μοντέλο βέβαια υπάρχουν είναι μια στατική ιδιοκτησία
ονομάζεται συλλογή.
Και γι 'αυτό ακριβώς το αποκαλούν - I είπε να δημιουργήσετε μια νέα συλλογή
για αυτό το μάθημα, και στη συνέχεια να το φέρω,
και στη συνέχεια επιστρέφουν τα μαθήματα συλλογής εδώ στην υπόσχεση.
Έτσι, στο εσωτερικό της, Ντέιβιντ - η το τελευταίο εξάμηνο διδάσκεται λίγο
σχετικά με υποσχέσεις και υποσχέσεις χρησιμοποιείται σε πολύ μεγάλο βαθμό τόσο Knex
Βιβλιοθήκη και γιατί δανείζει η -
σας δίνει την δυνατότητα να έχουν μια δέσμη
διαφορετικών ασύγχρονης κλήσεις και το είδος ενταχθούν στη συνέχεια μαζί
ή φέρω κάτι, και στη συνέχεια
με την εν λόγω κλήση άλλο ασύγχρονη κλήση της βάσης δεδομένων
και να επιστρέψει αυτή την τιμή και Στη συνέχεια μεταβείτε στο επόμενο τότε
και στη συνέχεια το επόμενο και στη συνέχεια να έχουν μια πιάσει στο τέλος για να ταξινομήσετε
των μιμούνται ασύγχρονη δοκιμή αλιευμάτων συμπεριφορά με ασύγχρονο κώδικα,
επειδή είστε το βλέπουμε τώρα
αλλά είναι ακόμα πιο δύσκολο φορά αρχίσετε να ασχοληθεί με το θέμα.
Κώδικα ασύγχρονης είναι απλά παντού
στην πλευρά του server και JavaScript πραγματικά σε πολύ μεγαλύτερο βαθμό
από ό, τι έχετε συνηθίσει, αν έχετε κάνει JavaScript
στην πλευρά του client.
Έτσι ώστε πραγματικά, πραγματικά Σας βοήθησε εκεί έξω.
Αλλά ακριβώς για να σας δείξω η δήλωση εντοπισμού σφαλμάτων
ότι μιλούσα για το τα εργαλεία επιθεωρητής κόμβο,
Πάω να προχωρήσει και ρίξει μια γραμμή εντοπισμού σφαλμάτων εδώ
στη λειτουργία renderCourses και να δούμε εάν αυτό με οδηγεί
όταν εγώ - τόσο κόμβο επιθεωρητής μπορεί να εγκατασταθεί
κάνοντας NPM Εγκατάσταση με μια σημαία G,
πράγμα που σημαίνει Παγκόσμια Κόμβος Επιθεωρητής.
Και αυτό θα το φέρω για την NMP και να το εγκαταστήσετε σε παγκόσμιο επίπεδο
για τις εφαρμογές σας ώστε να μπορείτε να καλέσετε μόνο
από τη γραμμή εντολών.
Έχω ήδη εγκαταστήσει έτσι θα πάω μπροστά και -
στην πραγματικότητα θα μπορούσε να έχει να περιμένει ότι θα πάρει μόνο,
λάβει δύο δευτερόλεπτα.
Και τι κόμβο επιθεωρητής και πάλι σας επιτρέπει
να κάνετε είναι να έχουν αυτό το ακέφαλο έκδοση της κονσόλας εντοπισμού σφαλμάτων
ότι έχετε συνηθίσει να εργάζονται, όταν από την πλευρά του πελάτη και να είναι σε θέση
να σταματήσει, απλά προσθέστε καθορίζεται σημεία στον κώδικά σας.
Σταματήστε την εκτέλεση και να πάρει μια να δούμε τι συμβαίνει,
που θα έχουν πραγματικά έρθει σε πρακτικό εάν η λειτουργία
όπως αυτό ήταν διαθέσιμα
όταν debugging σας PHP κώδικα είμαι σίγουρος.
Οπότε ας λάβει μια ματιά σε αυτό.
Έτσι μπορώ να πάρω τηλέφωνο κόμβο επιθεωρητής
και θα πω επισκεφτείτε αυτό το URL θύρα 5858 για να ξεκινήσει τον εντοπισμό σφαλμάτων,
αυτό είναι μόνο η προεπιλεγμένη για το πώς ξεκινάει.
Έτσι, τώρα έχω πήρα - δεν υπάρχει τίποτα δεν συμβαίνει εδώ
γιατί πρέπει να ξεκινήσει.
Έτσι, ο κόμβος αδιέξοδο [φωνητική] η debug σημαία και στη συνέχεια app.js.
Έτσι λέει το πρόγραμμα εντοπισμού σφαλμάτων ακρόαση στη θύρα 5858,
Express ακρόασης του διακομιστή στις 3000.
Έτσι είμαστε καλοί να πάτε.
Επιτρέψτε μου μόνο να ανανεώσετε αυτό.
Και τώρα μπορώ να δω τα app.js κώδικα που ήμουν απλά κοιτάζοντας
αλλά εδώ στην κονσόλα.
Έτσι τώρα, αν προσπαθήσει να τρέξει αυτό, μπορείτε να το δείτε, να σταματήσει.
Είναι απλά περιμένουν, επειδή της ολόκληρη η εκτέλεση κώδικα είναι τώρα
σταμάτησε σε αυτό το πρόγραμμα εντοπισμού σφαλμάτων γραμμή που έχω βάλει εκεί.
Και μπορώ τώρα διακομιστή -
[ΑΚΟΥΓΕΤΑΙ Παρατήρηση]
Ω, ναι. Ποια είναι η λέξη-κλειδί συντόμευση για να μεγεθύνετε την οθόνη;
Ω είναι εκεί.
Το 'πιασα. OK.
[Παύση]
Ω, δεν ψάχνει [Φωνητική] αυτό.
Έτσι, τα μαθήματα είναι πραγματικά μεγάλο
γιατί δεν έχω κάνει μια περιορίσει ρήτρα ή οτιδήποτε άλλο,
είναι ακριβώς ο γοητευτικός ολόκληρης της βάσης δεδομένων των μαθημάτων
ποιες είναι πολλά από αυτά.
Και έτσι - που αποτελεί αντικείμενο
ότι στην πραγματικότητα θα μπορούσε να συντριβή το σημείωμα επιθεωρητής παράδειγμα.
Ειναι για - OK.
Επιτρέψτε μου να κάνω ένα όριο και τότε μπορούμε να ρίξουμε μια ματιά
και όταν δεν γοητευτικός εκατοντάδες των μαθημάτων.
Έτσι, να σκοτώσει τον server και επιθεωρητής
και θα κάνω μάθημα όριο ερώτημα συλλογής 20.
Έτσι, στη Βιβλιοθήκη, σε αντίθεση με Laravel
όπου μπορείτε να καλέσετε μόνο περιορίζουν άμεσα ή καλέσετε
από αυτές τις μεθόδους SQL ότι θα χρησιμοποιήσετε
με απ 'ευθείας στην παρουσία ORM.
Κάθε φορά που χρησιμοποιείτε μόνο Μέθοδος SQL η οποία παρέχεται
σε Knex, θα πρέπει να καλέστε το ερώτημα για να ταξινομήσετε
της βρύσης στην αλυσίδα ερώτημα.
Και αυτό μπορεί να γίνει επίκληση είτε με μια λειτουργία,
έτσι ώστε να μπορούμε να πούμε, η λειτουργία αυτό το όριο 10 ή μπορείτε να καλέσετε
καθορίζοντας το οποίο μέθοδο που θα θέλατε να καλέσετε
στην παρουσία Knex και, στη συνέχεια, η οποία αξία.
Έτσι θα πάμε να κάνουμε περιορίζουν 20 και στη συνέχεια ορίστε.
Στην πραγματικότητα δεν Πρέπει εντοπισμού σφαλμάτων εδώ
επειδή μπορούμε απλά ορίσετε σημεία διακοπής
και αυτό το κάνει πιο εύκολο.
Εντάξει.
Οπότε, ας ορίσετε ένα breakpoint εδώ και να προσπαθήσουμε να το φορτώσετε.
Λάθος γραμμή.
Ακριβώς εδώ.
[Παύση]
OK. Γι 'αυτό σταμάτησε και πάλι.
Μέχρι τώρα, τα μαθήματα είναι το αντικείμενο με μήκος 20
και μπορούμε να δούμε όλες τις διαφορετικές μοντέλα που είναι παρατραβηγμένο
από τη βάση δεδομένων εδώ έτσι έχω ένα μοντέλο αντικειμένου
η οποία έχει, στο εσωτερικό του Χαρακτηριστικά ακινήτου
στο αντικείμενο είναι όλα τα πράγματα ότι είναι βρέθηκε στη βάση δεδομένων.
Τυχόν γεγονότα που έχουν καταχωρηθεί
ώστε να μπορείτε να εγγραφείτε διαφορετικά γεγονότα,
για παράδειγμα όταν η μοντέλο που διαγράφονται
ή όταν είναι να είναι παρατραβηγμένο,
μπορείτε να ορίσετε διαφορετικές ιδιότητες ή να τροποποιήσετε τα πράγματα.
Υπάρχουν πολλά διαφορετικά άγκιστρα και όλα αυτά είναι τεκμηριωμένα
στις Bookshelf.js τεκμηρίωση που σας επιτρέπουν
να κάνει το είδος του τίποτα ότι θέλετε πραγματικά να κάνετε
με τα μοντέλα σας και συλλογές.
Μπορείτε να - από όπου και αν σήμαινε να είναι πραγματικά προσαρμόσιμη
και πολύ εύκολο για μπορείτε να τα προσαρμόσει
στις ανάγκες της σας εφαρμογή.
Αλλά ακριβώς αναζητούν μέσα από εδώ,
Μπορώ να δω ποια είναι η διαφορετική μαθήματα είναι διαθέσιμα.
Και σε αυτή την περίπτωση, στην πραγματικότητα, δεν φέρω
με οποιαδήποτε άλλα στοιχεία, εκτός από μόνο οι ίδιοι μαθήματα.
Αλλά με παρόμοιο τρόπο με Ρήτορας το ORM μπορείτε να ορίσετε
τις σχέσεις, έτσι ώστε η πορεία ανήκει σε πολλούς εκπαιδευτή.
Έτσι, αν πάω μπροστά και να σταματήσει την εφαρμογή,
άλμα σε αυτό φέρω κλήση, να καθορίσετε διαφορετικές επιλογές
ότι θα θέλατε να περάσει μαζί με αυτό.
Και ένας από αυτούς είναι η ικανότητα να φορτώσει σχετικός κώδικας
καθορίζοντας withRelated εκπαιδευτές στη συνέχεια μαθήματα.
Οπότε ας πάμε πίσω και φρέσκα αυτό εδώ και να σταματήσει ξανά.
Έτσι, σήμερα, τα μαθήματα αντιρρήσεις, ίδιο αριθμό μοντέλων,
αλλά τώρα κάθε μοντέλο έχει ένα hash σχέσεις
η οποία έχει τους εκπαιδευτές ότι είναι σχετικές με.
Έτσι, αυτό το μάθημα, για παράδειγμα
το οποίο είναι φυσικά 082 έχει δύο που σχετίζονται με τα μοντέλα εκπαιδευτή.
Και μπορείτε ήδη να δείτε πώς πολύ πιο εύκολο αυτό είναι να ταξινομήσετε
από την εργασία σας οπτικά με ό, τι όταν έχουμε να κάνουμε με πράγματα
ότι το είδος αλλάξετε τον κωδικό και στη συνέχεια προσπαθήστε ξανά σε PHP.
Το γεγονός ότι μπορείτε απλά σταματήσει η εκτέλεση της εξ ολοκλήρου
και να αξιολογήσει τι είναι εδώ και η - στην κονσόλα, η -
σμίκρυνση, τα μαθήματα είναι, ξέρετε,
τι η τοπική εμβέλεια μεταβλητές είναι διαθέσιμες
και αυτό είναι σήμερα η παγκόσμια αντικείμενο, επειδή, όπως το είδες,
εκτός και αν καλέσετε με ένα συγκεκριμένο πλαίσιο, δεν πρόκειται
να έχει κάτι σχετικό εδώ.
Και τότε, το - επιτρέψτε μου να δείχνουν μερικά ακόμη παραδείγματα
εκτελεστικών υποσχέσεις.
Έτσι, αντί να γίνει αυτό withRelated εκπαιδευτές εδώ είμαι
πρόκειται να πάει μπροστά και να προχωρήσουμε αυτό να φέρω και στη συνέχεια τα μαθήματα,
Πάω να επιστρέψει εκπαιδευτές courses.load.
Και τότε - τότε θα καλέσει στη συνέχεια.
[Παύση]
Έτσι, στη συνέχεια σε αυτό το σημείο, ο μαθήματα πρέπει να φορτωθεί
με τους εκπαιδευτές, η οποία είναι ασύγχρονη δράση.
Αλλά επειδή είμαστε να την επιστρέψει από μια υπόσχεση, η επόμενη τιμή
γιατί τότε είναι ό, τι αυτό ασύγχρονη κλήση επιστρέφει
η οποία σε αυτήν την περίπτωση το φορτίο είναι μια μέθοδος στην Βιβλιοθήκη
ότι στην πραγματικότητα επιστρέφει η ίδια η συλλογή.
Έτσι είναι η φόρτωση εκπαιδευτές εκεί
και στη συνέχεια μπορείτε να καθορίσετε - αν είναι απλά ένα ακίνητο,
μπορείτε να καθορίσετε αυτό ως σειρά, διαφορετικά,
μπορείτε να κάνετε εκπαιδευτές και απαιτήσεων
ως μέθοδος - συγγνώμη, ως μια σειρά.
Και στη συνέχεια, αν θέλετε να πάρετε πραγματικά φανταχτερό και να περιορίσει οποιαδήποτε
από αυτά δοσμένα φέρνει, θα να την ορίσετε ως hash
με τους διδάσκοντες και στη συνέχεια ό, τι Θέλετε να περιορίσουν το ερώτημα σχετικά.
Έτσι, θα ήθελα να φορτώσει όλα εκπαιδευτές για τα μαθήματα όπου -
έτσι QB για το ερώτημα οικοδόμος όπου το καθεστώς είναι ενεργή.
Και μπορείτε να πάρετε πραγματικά φανταχτερό με οποιαδήποτε
των σχετικών ερωτημάτων θα θέλατε να οικοδομήσουμε.
Όμως, μόνο για τώρα, θα πάμε να επιμείνουμε σε μόλις εκπαιδευτές
και γυρίζουμε αυτή την τιμή
έτσι ώστε στη συνέχεια η επόμενη στη συνέχεια θα πρέπει να έχουν όλα τα μαθήματα που φορτώνονται
σωστά.
Και αν υπήρχε ένα σφάλμα σε οποιοδήποτε στάδιο της εν λόγω αλυσίδας,
θα άλμα προς τα κάτω για τα αλιεύματα.
Ας πάμε μπροστά και να τρέξει αυτό.
Έτσι, κάθε φορά - σε αντίθεση με PHP, ένα μειονέκτημα είναι η
"Επειδή ο κόμβος" είναι μια πολύ τρέξιμο διαδικασία, που πραγματικά χρειάζεστε
να σταματήσει τη διαδικασία κόμβο όπως μπορείτε να ενημερώσετε τον κωδικό σας,
επειδή η έκδοση που είναι τρέχει στο χρόνο εκτέλεσης είναι,
η έκδοση του κώδικα που ήταν φορτωμένο
όταν δεν έχει ξεκινήσει τι έχετε είδος
ενημερωμένων τον κωδικό σας με από τότε.
OK. Θα ορίσετε ένα breakpoint εδώ, εδώ και ανανέωσης.
[Παύση]
Αχ, εγώ πραγματικά δεν το έκανε ανανεώσετε είτε αυτής της σελίδας
έτσι ήταν στην παλιά διαδικασία.
Έτσι, μπορείτε να ανανεώσετε τόσο αυτό και ο επιθεωρητής κόμβο.
Έτσι, τώρα βλέπουμε τα μαθήματα.
Αν παίρνουμε μόνο δείγμα ενός από αυτά τα μοντέλα,
μπορούμε να δούμε ότι οι σχέσεις αντικειμένου είναι κενός, αλλά τώρα -
και ο λόγος που χρειάζεστε να ορίσετε σημεία διακοπής είναι, επίσης,
Ανέφερα ότι μπορείτε να άλμα στο ίχνος στοίβας
και να δούμε ξέρεις, όπου πρόκειται στην εφαρμογή.
Έτσι τώρα μπορώ να δω τι είναι συμβαίνει στη μέθοδο του φορτίου,
το οποίο έχω οριστεί σχετικά με τις συλλογές.
Το είδος του "Πρόθυμος φορτίων σχέσεις της σε μια ήδη ".
Και μπορείτε να το βήμα μέσω και να δούμε γραμμή προς γραμμή
όπου αυτά τα πράγματα είναι πηγαίνει η οποία είναι μεγάλη.
Αν έχετε κάτι ότι έχει σπάσει το κωδικό σας,
να ρίχνει κάποιο λάθος και είστε όπως, θέλω πραγματικά
για να δούμε πού πηγαίνει.
Αλλά μόλις τρέχετε σε κάτι ασύγχρονη, η -
πηγαίνει στην επόμενη tick από το βρόχο εκδήλωση
και θα χάσετε σας - θα χάσετε τη θέση σας
στον επιθεωρητή κόμβο.
Έτσι, θα πρέπει να πω, "OK, μόλις χάσω αυτό,
πρέπει να σταματήσει τώρα σε αυτή τη γραμμή και πάλι. "
«Γιατί αν συνέχιζα το χτύπημα προς τα κάτω, κάτω από τη στοίβα,
θα πρέπει τελικά μόνο πάει μακριά αν δεν είχα θέσει αυτό
γραμμή 22 μπλε γραμμή διάλειμμα.
Έτσι τώρα, αν κοιτάξω σε μαθήματα εδώ,
θα έπρεπε σε σχέση με εκπαιδευτές
και στη συνέχεια έχουν την εκπαιδευτές τους αποδίδουν.
Έτσι, μπορείτε να δείτε ότι επέστρεψα μια υπόσχεση από την πρώτη υπόσχεση
και στη συνέχεια μπορείτε συνεχώς το κάνουμε αυτό κάτω από τη γραμμή.
Έτσι, η διαφορετική υπόσχεση, υπόσχονται βιβλιοθήκες,
Θα χρησιμοποιηθεί ένα ονομάζεται Bluebird το οποίο είναι πραγματικά χρήσιμο.
Προσθέτει μια πολύ ωραία αυτό για την αλλαγή ασύγχρονη -
αλλαγή κλήση πίσω βάση κώδικα σε πράγματα
ότι λειτουργεί καλά με υποσχέσεις.
Αλλά - συγγνώμη [δεν ακούγεται] τι Ήμουν έτοιμος να το πω εκεί.
Ας ρίξουμε μια ματιά αν και στο -
οπότε ας πούμε ότι υπήρχε μια πρόβλημα όταν κουβαλούν κάτι.
Γι 'αυτό και έχει κι άλλη διαδρομή να βρει ονομάζεται ID πορεία.
Ας κάνουμε μάθημα 2.
Μπορώ να πάρω - JSON πορεία.
Και σ ​​'αυτό [δεν ακούγεται].
[Παύση]
Μυρίζω κάτι λάθος εδώ.
Όχι στο 3000, ήμουν σε η καρτέλα επιθεωρητής Chrome.
OK. Οπότε ας πάμε να Φυσικά - JSON μάθημα 1.
Και αυτό επιστρέφει ακριβώς στο JSON μορφή, η πορεία φορτωμένο
με κάποια εκπαιδευτές.
Αλλά το παράδειγμα που ήθελα για να δώσει εδώ είναι ότι,
Κάνω JSON ID πορεία.
Και στα φέρω παραμέτρους, Είμαι διευκρινίζοντας απαιτούν αλήθεια,
η οποία είναι μια επιλογή που είναι τεκμηριώνεται στην Βιβλιοθήκη
όταν λέει ότι, «Αν, Θα προσπαθήσουμε να βρούμε αυτό το μάθημα
και δεν είναι εκεί, στη συνέχεια να ρίξει ένα σφάλμα. "
Και ότι θα πρέπει να εμπίπτουν στο πεδίο εφαρμογής τα αλιεύματα μπλοκάρει εδώ κάτω.
Ας πάμε μπροστά και άλμα πίσω στον επιθεωρητή κόμβο και προσπαθήστε
και να σπάσει αυτό και να δούμε τι έχουμε.
Οπότε ας ορίσουμε ένα διάλειμμα εδώ στο γήπεδο JSON.
Εντάξει.
Θα πάω στο μάθημα και JSON Θα ήθελα απλώς να τεθεί σε ορισμένα -
[Παύση]
Μπορεί να είναι λίγο δύσκολο Μερικές φορές, όταν προσπαθείτε
να διαχειριστεί τα οποία το ένα έχει ανανεωθεί
και τα οποία δεν έχουν - ας δούμε.
Γι 'αυτό σας καλεί σφάλματος άδειο απάντηση.
[Παύση]
Ας ρίξει ένα πρόγραμμα εντοπισμού σφαλμάτων εδώ.
Λόγω του τρόπου με τον κόμβο πράγματι βελτιστοποιεί
για το χρόνο εκτέλεσης JavaScript να είναι τόσο γρήγορα στο διακομιστή,
Μερικές φορές το πρόγραμμα εντοπισμού σφαλμάτων κόμβου έχει κάποια λάθη, όταν προσπαθείτε να
και να ορίσετε σημεία διακοπής δυναμικά και που πραγματικά χρειάζεστε
να χρησιμοποιήσετε ένα πρόγραμμα εντοπισμού σφαλμάτων και Δεν το line-by-line.
Ας δούμε αν αυτό μας παίρνει ό, τι θέλουμε.
Γι 'αυτό που, app.get Φυσικά json id,
και έχω δημιουργήσει debugger μου εκεί
στη δήλωση αλιευμάτων στο κάτω μέρος.
Φέρω απαιτούν αλήθεια, θα έπρεπε - Εντάξει, εκεί πάμε, έσπασε.
Έτσι, τώρα μπορώ να δω ότι σταμάτησε
σε αυτό το τελικό μπλοκ των αλιευμάτων επειδή η withRelated -
ή επειδή το απαιτεί αλήθεια προσδιορίζονται και δεν υπάρχει φυσικά
με την ταυτότητα αυτού του μεγάλου αριθμό μέσω ενός εξαίρεση
η οποία είναι τώρα Emessage.
Και κάθε σφάλμα σε JavaScript έχει μια ιδιότητα στοίβα
που έρχεται μαζί με αυτό.
Έτσι, είναι συχνά χρήσιμο να, για παράδειγμα,
κονσόλα log out e.stack.
Και μπορώ πραγματικά να δείτε όταν χτύπησα ένα σφάλμα.
Έτσι παίρνω λάθος άδειο απάντηση, αυτό είναι το μήνυμα
που εστάλη μέσω της βιβλιοθήκης.
Αλλά τώρα, μπορώ να ρίξετε μια ματιά στο, σε πρόσκληση στοίβα και να δούμε
ότι στην Βιβλιοθήκη διαλέκτους SQL μοντέλο 83,
αυτό το κενό ανταπόκριση ρίχτηκε σφάλμα.
Και αυτό είναι που αναφέρθηκε, είναι dot ανώνυμα
γιατί είναι μια ανώνυμη λειτουργία.
Αν αυτό ήταν μια λειτουργία όνομα θα έχετε καλύτερες ιδέες
στο οποίο λειτουργούν πραγματικά μέσα, χωρίς να χρειάζεται να πάει
στον κώδικα model.js.
Αν είναι γραφτό να γίνει αρκετά, αρκετά ευανάγνωστο,
έτσι μπορώ να δω ότι σε απευθείας σύνδεση.
Τι δεν λένε μένα ήταν γραμμή 83.
Έτσι, αν και options.require η απάντηση δεν υπάρχει,
ρίχνει τώρα μια νέα άδειο λάθος απάντηση.
Έτσι, μπορείτε να δείτε αρκετά απλή πώς λειτουργεί.
Και στο εσωτερικό Βιβλιοθήκη,
είστε εκεί μόνο μια ολόκληρη μάτσο χρήση των υποσχέσεων.
Έτσι, μπορείτε να καθορίσετε Promise.method
με την Bluebird βιβλιοθήκη η οποία διατηρεί το σωστό πλαίσιο
από αυτό, ενώ επιστρέφουν μια υπόσχεση.
Και έτσι έχω - είμαι δεσμευτική η αξία αυτής παρόμοια
σε ό, τι είχα αναφέρει νωρίτερα, αλλά χρησιμοποιώντας τις υποσχέσεις
και τότε μπορώ να - είναι νέο.
Μπορεί να είναι ασύγχρονη ή αν δεν θέλω.
Και τότε κάνω κάποια άλλα πράγματα που μπορεί να
ή δεν μπορεί να είναι ασύγχρονη και τότε τα είδη των άλματα προς τα κάτω αυτό.
Έτσι Promise.all είναι ένας βοηθός που πολλά δημοφιλή βιβλιοθήκες έχουν
όπου μπορείτε να έχετε μια σειρά από δυνητικά μπορεί να
ή να μην είναι υποσχέσεις.
Και όταν όλα αυτά είναι ολοκληρωθεί, μπορείτε να επιστρέψετε ότι
και στη συνέχεια να πηδά στην επόμενη γραμμή
και μπορείτε να δείτε πώς πραγματικά ισοπεδώνει την πυραμίδα
ότι μπορείτε να πάρετε, η επανάκλησης κόλαση, όπως είναι γνωστό
αν κάνεις τα πάντα με επανακλήσεις ανά γραμμή.
Υπάρχουν τρόποι να πάρουν γύρω ότι οι υποσχέσεις, αλλά είναι ένα
από τους καλύτερους τρόπους, κατά τη γνώμη μου,
να κρατήσει πραγματικά το κωδικό σας καθαρό και εύκολο να το διαβάσετε.
Έτσι ώστε να είναι σε μικρή απόσταση εισαγωγή JavaScript
και να ράφι και Knex γενικότερα.
Και, αν υπάρχουν οποιεσδήποτε ερωτήσεις, Ξέρω ότι είναι ένα τόνο υλικού
να είδος προσπαθήσουμε και κάλυψης ιδιαίτερα μετά τις γλώσσες,
αντίθεση με τα περισσότερα που είστε εξοικειωμένοι με έτσι θα ήθελα απλώς
να γίνει έτσι ώστε τουλάχιστον αν έχετε προβλήματα
με τον κωδικό σας, μπορεί είδος άλμα -
αυτό είναι που μου αρέσει να κάνω, είναι είδος πηδήξουν στη βιβλιοθήκες
ότι είμαι με τη χρήση και να δούμε πώς τα πράγματα είναι δομημένες.
Υπάρχει ένα που είχα αναφερθεί νωρίτερα ονομάζεται Backbone.js
και στην πραγματικότητα είναι [Δεν ακούγεται] στην πλευρά του client
να βοηθήσει να δώσει την άποψη μοντέλο δομή του ελεγκτή
με τον κωδικό σας.
Αλλά έχει πραγματικά σχολιασμένη πηγή τεκμηρίωσης
το οποίο σας επιτρέπει να δείτε το είδος του.
Είναι πολύ καλά τεκμηριωμένη, τι συμβαίνει,
πώς είναι αυξάνοντας η λειτουργικότητα Ajax
ή η λειτουργικότητα εκδήλωση ή μοντέλων και συλλογών ταξινόμησης
εξηγούμε τι είναι συμβαίνει κατά τη διαδικασία.
Και αν μπορείτε να καταλάβετε τα βασικά της JavaScript
όπως και η πρωτότυπη κληρονομιά και πόσο χρησιμοποιούνται λειτουργίες
καθώς και οι δύο αντικείμενα και τις αξίες και τάξεις και τα πάντα.
Κάνει πολύ πιο εύκολο να καταλάβουμε τι συμβαίνει
σε δυνητικά στο βιβλιοθήκες που χρησιμοποιείτε
και τον κώδικα εντοπισμού σφαλμάτων και να είναι σε θέση δεν πρέπει να χτυπάς το κεφάλι σου
ενάντια στον τοίχο, επειδή δεν μπορείτε να καταλάβετε πώς η
διαφορετικά κομμάτια εργάζονται, έτσι.