Είναι περιττό να αναφέρουμε την αυξανόμενη δημοτικότητα του Node.js για ανάπτυξη εφαρμογών. Το eBay εκτελεί μια υπηρεσία παραγωγής Node API από το 2011. Το PayPal ξαναχτίζει ενεργά το front-end του στο Node. Ο ιστότοπος για κινητά της Walmart έχει γίνει η μεγαλύτερη εφαρμογή Node, από άποψη κυκλοφορίας. Το Σαββατοκύριακο των Ευχαριστιών το 2014, Οι διακομιστές Walmart επεξεργάστηκαν 1,5 δισεκατομμύρια αιτήματα , Το 70 τοις εκατό των οποίων παραδόθηκε μέσω κινητού και τροφοδοτήθηκε από το Node.js. Από την πλευρά της ανάπτυξης, ο διαχειριστής πακέτων Node ( πάνω από το επίπεδο της θάλασσας ) συνεχίζει να αναπτύσσεται ραγδαία, ξεπερνώντας πρόσφατα τις 150.000 φιλοξενούμενες ενότητες.
Ενώ Η Ruby έχει ράγες και Πύθων έχει το Django, το κυρίαρχο πλαίσιο ανάπτυξης εφαρμογών για το Node δεν έχει ακόμη δημιουργηθεί. Όμως, υπάρχει ένας ισχυρός υποψήφιος που κερδίζει ατμό: LoopBack , ένα πλαίσιο API ανοιχτού κώδικα που δημιουργήθηκε από την εταιρεία San Mateo, Calif StrongLoop . Το StrongLoop είναι ένας σημαντικός συντελεστής στις τελευταίες Έκδοση κόμβου , για να μην αναφέρουμε τους μακροχρόνιους συντηρητές του Εξπρές , ένα από τα πιο δημοφιλή πλαίσια Node που υπάρχουν.
Ας ρίξουμε μια πιο προσεκτική ματιά στο LoopBack και τις δυνατότητές του μετατρέποντας τα πάντα σε πράξη και δημιουργώντας ένα παράδειγμα εφαρμογής.
Το LoopBack είναι ένα πλαίσιο για δημιουργία API και τη σύνδεσή τους με πηγές δεδομένων backend. Χτισμένο πάνω από το Express, μπορεί να πάρει έναν ορισμό μοντέλου δεδομένων και να δημιουργήσει εύκολα ένα πλήρως λειτουργικό REST API end-to-end που μπορεί να κληθεί από οποιονδήποτε πελάτη.
Το LoopBack έρχεται με έναν ενσωματωμένο πελάτη, Εξερεύνηση API . Θα το χρησιμοποιήσουμε, καθώς διευκολύνει την προβολή των αποτελεσμάτων της εργασίας μας και έτσι το παράδειγμά μας μπορεί να εστιάσει στη δημιουργία του ίδιου του API.
Φυσικά θα χρειαστείτε τον κόμβο εγκατεστημένο στο μηχάνημά σας για να το ακολουθήσετε. Πάρτε το εδώ . Το npm συνοδεύεται από αυτό, ώστε να μπορείτε να εγκαταστήσετε εύκολα τα απαραίτητα πακέτα. Ας αρχίσουμε.
Η εφαρμογή μας θα διαχειρίζεται άτομα που θα ήθελαν να δωρίσουν δώρα ή πράγματα που απλά δεν χρειάζονται πια, σε κάποιον που μπορεί να τα έχει ανάγκη. Έτσι, οι χρήστες θα είναι Δωρητές και Δέκτες. Ένας δωρητής μπορεί να δημιουργήσει ένα νέο δώρο και να δει τη λίστα με τα δώρα. Ένας παραλήπτης μπορεί να δει τη λίστα δώρων από όλους τους χρήστες και μπορεί να διεκδικήσει οποιαδήποτε αξίωση. Φυσικά, θα μπορούσαμε να δημιουργήσουμε τους Δωρητές και τους Δέκτες ως ξεχωριστούς ρόλους στην ίδια οντότητα (Χρήστης), αλλά ας προσπαθήσουμε να τους χωρίσουμε ώστε να δούμε πώς να χτίζουμε σχέσεις στο LoopBack. Το όνομα αυτής της πρωτοποριακής εφαρμογής θα είναι Δώσε σε κάποιον .
Εγκαταστήστε τα εργαλεία γραμμής εντολών StrongLoop μέσω npm:
$ npm install -g strongloop
Στη συνέχεια, εκτελέστε τη γεννήτρια εφαρμογών του LoopBack:
$ slc loopback _-----_ | | .--------------------------. |--(o)--| | Let's create a LoopBack | `---------´ | application! | ( _´U`_ ) '--------------------------' /___A___ | ~ | __'.___.'__ ´ ` |° ´ Y ` ? What's the name of your application? Givesomebody
Ας προσθέσουμε ένα μοντέλο. Το πρώτο μας μοντέλο θα ονομάζεται Δώρο. Το LoopBack θα ζητήσει την πηγή δεδομένων και την κατηγορία βάσης. Εφόσον δεν έχουμε ρυθμίσει ακόμα την πηγή δεδομένων, μπορούμε να βάλουμε db (memory)
. Η βασική κλάση είναι μια κλάση μοντέλου που δημιουργείται αυτόματα και θέλουμε να χρησιμοποιήσουμε PersistedModel
σε αυτήν την περίπτωση, καθώς περιέχει ήδη όλες τις συνήθεις μεθόδους CRUD για εμάς. Στη συνέχεια, το LoopBack ρωτά αν πρέπει να εκθέσει το μοντέλο μέσω REST (ναι) και το όνομα της υπηρεσίας REST. Πατήστε enter εδώ για να χρησιμοποιήσετε την προεπιλογή, η οποία είναι απλά ο πληθυντικός του ονόματος μοντέλου (στην περίπτωσή μας, gifts
).
$ slc loopback:model ? Enter the model name: Gift ? Select the data-source to attach Gift to: (Use arrow keys) ❯ db (memory) ? Select model's base class: (Use arrow keys) Model ❯ PersistedModel ? Expose Gift via the REST API? (Y/n) Yes ? Custom plural form (used to build REST URL):
Τέλος, δίνουμε τα ονόματα των ιδιοτήτων, τους τύπους δεδομένων τους και τις απαιτούμενες / μη απαιτούμενες σημαίες. Το δώρο θα έχει name
και description
ιδιότητες:
Let's add some Gift properties now. Enter an empty property name when done. ? Property name: name invoke loopback:property ? Property type: (Use arrow keys) ❯ string ? Required? (y/N)Yes
Εισαγάγετε ένα κενό όνομα ιδιοκτησίας για να υποδείξετε ότι έχετε ολοκληρώσει τον καθορισμό ιδιοτήτων.
Η γεννήτρια μοντέλων θα δημιουργήσει δύο αρχεία που ορίζουν το μοντέλο στην εφαρμογή common/models
: gift.json
της εφαρμογής και gift.js
. Το αρχείο JSON καθορίζει όλα τα μεταδεδομένα σχετικά με την οντότητα: ιδιότητες, σχέσεις, επικυρώσεις, ρόλους και ονόματα μεθόδων. Το αρχείο JavaScript χρησιμοποιείται για τον καθορισμό πρόσθετης συμπεριφοράς και για τον καθορισμό απομακρυσμένων αγκιστριών που θα κληθούν πριν ή μετά από ορισμένες λειτουργίες (π.χ. δημιουργία, ενημέρωση ή διαγραφή).
Οι άλλες δύο οντότητες μοντέλων θα είναι τα μοντέλα δωρητών και δεκτών μας. Μπορούμε να τα δημιουργήσουμε χρησιμοποιώντας την ίδια διαδικασία, εκτός από αυτήν τη φορά ας βάλουμε User
ως βασική τάξη. Θα μας δώσει μερικές ιδιότητες όπως username
, password
, email
έξω από το κουτί. Μπορούμε να προσθέσουμε απλώς όνομα και χώρα, για παράδειγμα, για να έχουμε μια πλήρη οντότητα. Για τον παραλήπτη θέλουμε να προσθέσουμε και τη διεύθυνση παράδοσης.
Ας ρίξουμε μια ματιά στη δημιουργούμενη δομή του έργου:
Οι τρεις βασικοί κατάλογοι είναι: - /server
- Περιέχει σενάρια εφαρμογής κόμβου και αρχεία διαμόρφωσης. - /client
- Περιέχει .js, .html, .css και όλα τα άλλα στατικά αρχεία. - /common
- Αυτός ο φάκελος είναι κοινός τόσο στον διακομιστή όσο και στον πελάτη. Τα μοντέλα αρχείων πηγαίνουν εδώ.
Ακολουθεί μια λεπτομερής ανάλυση των περιεχομένων κάθε καταλόγου, από το Τεκμηρίωση LoopBack :
Αρχείο ή κατάλογος | Περιγραφή | Πώς να αποκτήσετε πρόσβαση σε κωδικό |
---|---|---|
Κατάλογος εφαρμογών ανώτερου επιπέδου | ||
package.json | Τυπική προδιαγραφή πακέτου npm. Βλέπω package.json | ΟΧΙ |
/ κατάλογος διακομιστή - Αρχεία εφαρμογών κόμβου | ||
server.js | Κύριο αρχείο προγράμματος εφαρμογής. | ΟΧΙ |
config.json | Ρυθμίσεις εφαρμογής. Βλέπω config.json . | app.get('setting-name') |
datasources.json | Αρχείο διαμόρφωσης πηγής δεδομένων. Βλέπω datasources.json .Για παράδειγμα, δείτε Δημιουργία νέας πηγής δεδομένων . | app.datasources['datasource-name'] |
model-config.json | Αρχείο διαμόρφωσης μοντέλου. Βλέπω μοντέλο-config.json .Για περισσότερες πληροφορίες, δείτε Σύνδεση μοντέλων σε πηγές δεδομένων . | ΟΧΙ |
middleware.json | Αρχείο ορισμού Middleware. Για περισσότερες πληροφορίες, δείτε Ορισμός του middleware . | ΟΧΙ |
/boot Ευρετήριο | Προσθέστε σενάρια για εκτέλεση αρχικοποίησης και ρύθμισης. Βλέπω εκκίνηση σεναρίων . | Τα σενάρια εκτελούνται αυτόματα με αλφαβητική σειρά. |
/ κατάλογος πελάτη - αρχεία εφαρμογής πελάτη | ||
README.md | Οι γεννήτριες LoopBack δημιουργούν κενό αρχείο README σε μορφή markdown. | ΟΧΙ |
Αλλα | Προσθέστε τα αρχεία HTML, CSS, πελάτη JavaScript. | |
/ κοινός κατάλογος - κοινόχρηστα αρχεία εφαρμογών | ||
/models Ευρετήριο | Προσαρμοσμένα μοντέλα αρχείων:
| Κόμβος: myModel = app.models.myModelName |
Στο παράδειγμά μας, έχουμε μερικές σημαντικές σχέσεις για να διαμορφώσουμε. Ένας δωρητής μπορεί να δωρίσει πολλά δώρα, κάτι που δίνει τη σχέση Ο δωρητής έχει πολλά δώρα . Ένας δέκτης μπορεί επίσης να λάβει πολλά δώρα, έτσι έχουμε επίσης τη σχέση Ο παραλήπτης έχει πολλά Δώρα . Στην άλλη πλευρά, Το δώρο ανήκει στον Δωρητή , και μπορεί επίσης ανήκουν στο δέκτη εάν ο Παραλήπτης επιλέξει να το αποδεχτεί. Ας το βάλουμε στη γλώσσα του LoopBack.
ανάπτυξη ιστοσελίδων για φορητές συσκευές
$ slc loopback:relation ? Select the model to create the relationship from: Donor ? Relation type: has many ? Choose a model to create a relationship with: Gift ? Enter the property name for the relation: gifts ? Optionally enter a custom foreign key: ? Require a through model? No
Σημειώστε ότι δεν υπάρχει μοντέλο μέσω. κρατάμε απλώς την αναφορά στο Δώρο.
Εάν επαναλάβουμε την παραπάνω διαδικασία για τον Παραλήπτη και προσθέσουμε δύο ανήκει στον σχέσεις με το δώρο, θα ολοκληρώσουμε τον σχεδιασμό του μοντέλου μας από πίσω πλευρά. Το LoopBack ενημερώνει αυτόματα τα αρχεία JSON για τα μοντέλα για να εκφράσει ακριβώς αυτό που κάναμε μόνο μέσω αυτών των απλών διαλόγων:
// common/models/donor.json ... 'relations': { 'gifts': { 'type': 'hasMany', 'model': 'Gift', 'foreignKey': '' } }, ...
Τώρα ας δούμε πώς να επισυνάψετε μια πραγματική πηγή δεδομένων για την αποθήκευση όλων των δεδομένων της εφαρμογής μας. Για τους σκοπούς αυτού του παραδείγματος, θα χρησιμοποιήσουμε MongoDB , αλλά το LoopBack διαθέτει λειτουργικές μονάδες για σύνδεση με Oracle, MySQL, PostgreSQL, Redis και SQL Server.
Αρχικά, εγκαταστήστε το βύσμα:
$ npm install --save loopback-connector-mongodb
Στη συνέχεια, προσθέστε μια πηγή δεδομένων στο έργο σας:
$ slc loopback:datasource ? Enter the data-source name: givesomebody ? Select the connector for givesomebody: MongoDB (supported by StrongLoop)
Το επόμενο βήμα είναι να διαμορφώσετε την πηγή δεδομένων σας στο server/datasources.json
. Χρησιμοποιήστε αυτήν τη διαμόρφωση για έναν τοπικό διακομιστή MongoDB:
... 'givesomebody': { 'name': 'givesomebody', 'connector': 'mongodb', 'host': 'localhost', 'port': 27017, 'database': 'givesomebody', 'username': '', 'password': '' } ...
Τέλος, ανοίξτε server/model-config.json
και αλλάξτε το datasource
για όλες τις οντότητες που θέλουμε να διατηρήσουμε στη βάση δεδομένων σε 'givesomebody'
.
{ ... 'User': { 'dataSource': 'givesomebody' }, 'AccessToken': { 'dataSource': 'givesomebody', 'public': false }, 'ACL': { 'dataSource': 'givesomebody', 'public': false }, 'RoleMapping': { 'dataSource': 'givesomebody', 'public': false }, 'Role': { 'dataSource': 'givesomebody', 'public': false }, 'Gift': { 'dataSource': 'givesomebody', 'public': true }, 'Donor': { 'dataSource': 'givesomebody', 'public': true }, 'Receiver': { 'dataSource': 'givesomebody', 'public': true } }
Ήρθε η ώρα να δούμε τι έχουμε δημιουργήσει μέχρι τώρα! Θα χρησιμοποιήσουμε το καταπληκτικό ενσωματωμένο εργαλείο, Εξερεύνηση API , το οποίο μπορεί να χρησιμοποιηθεί ως πελάτης για την υπηρεσία που μόλις δημιουργήσαμε. Ας δοκιμάσουμε τη δοκιμή API REST κλήσεις.
Σε ξεχωριστό παράθυρο, ξεκινήστε το MongoDB με:
$ mongod
Εκτελέστε την εφαρμογή με:
$ node .
Στο πρόγραμμα περιήγησής σας, μεταβείτε στο http://localhost:3000/explorer/
. Μπορείτε να δείτε τις οντότητες σας με τη λίστα διαθέσιμων λειτουργιών. Δοκιμάστε να προσθέσετε έναν δωρητή με POST /Donors
κλήση.
Εξερεύνηση API είναι πολύ διαισθητικό? επιλέξτε οποιαδήποτε από τις εκτεθειμένες μεθόδους και το αντίστοιχο σχήμα μοντέλου θα εμφανιστεί στην κάτω δεξιά γωνία. Στο data
περιοχή κειμένου, είναι δυνατό να γράψετε ένα προσαρμοσμένο αίτημα HTTP. Μόλις συμπληρωθεί το αίτημα, κάντε κλικ στο κουμπί 'Δοκιμάστε το' και η απάντηση του διακομιστή θα εμφανιστεί παρακάτω.
Όπως αναφέρθηκε παραπάνω, μία από τις οντότητες που είναι προεγκατεστημένες με το LoopBack είναι η κατηγορία χρηστών. Ο χρήστης διαθέτει μεθόδους σύνδεσης και αποσύνδεσης και μπορεί να συνδεθεί με μια οντότητα AccessToken που διατηρεί το διακριτικό του συγκεκριμένου χρήστη. Στην πραγματικότητα, ένα πλήρες σύστημα ελέγχου ταυτότητας χρήστη είναι έτοιμο να βγει από το κουτί. Εάν προσπαθήσουμε να καλέσουμε /Donors/login
διά μέσου Εξερεύνηση API , εδώ είναι η απάντηση που λαμβάνουμε:
{ 'id': '9Kvp4zc0rTrH7IMMeRGwTNc6IqNxpVfv7D17DEcHHsgcAf9Z36A3CnPpZJ1iGrMS', 'ttl': 1209600, 'created': '2015-05-26T01:24:41.561Z', 'userId': '' }
Το id
είναι στην πραγματικότητα η τιμή του AccessToken, δημιουργείται και παραμένει στη βάση δεδομένων αυτόματα. Όπως βλέπετε εδώ, μπορείτε να ορίσετε ένα διακριτικό πρόσβασης και να το χρησιμοποιήσετε για κάθε επόμενο αίτημα.
Μια απομακρυσμένη μέθοδος είναι μια στατική μέθοδος ενός μοντέλου, εκτεθειμένη σε ένα προσαρμοσμένο τελικό σημείο REST. Απομακρυσμένες μέθοδοι μπορούν να χρησιμοποιηθούν για την εκτέλεση λειτουργιών που δεν παρέχονται από το τυπικό μοντέλο REST API του LoopBack.
Εκτός από τις μεθόδους CRUD που βγούμε από το κουτί, μπορούμε να προσθέσουμε όσες προσαρμοσμένες μεθόδους θέλουμε. Όλοι πρέπει να πάνε στο [model].js
αρχείο. Στην περίπτωσή μας, ας προσθέσουμε μια απομακρυσμένη μέθοδο στο μοντέλο δώρου για να ελέγξουμε εάν το δώρο είναι ήδη δεσμευμένο και ένα για να αναφέρει όλα τα δώρα που δεν είναι δεσμευμένα.
Αρχικά, ας προσθέσουμε μια επιπλέον ιδιότητα στο μοντέλο που ονομάζεται reserved
. Απλώς προσθέστε το στις ιδιότητες στο gift.json
:
... 'reserved': { 'type': 'boolean' } ...
Η απομακρυσμένη μέθοδος στο gift.js
πρέπει να μοιάζει με αυτό:
module.exports = function(Gift) { // method which lists all free gifts Gift.listFree = function(cb) { Gift.find({ fields: { reserved: false } }, cb); }; // expose the above method through the REST Gift.remoteMethod('listFree', { returns: { arg: 'gifts', type: 'array' }, http: { path: '/list-free', verb: 'get' } }); // method to return if the gift is free Gift.isFree = function(id, cb) { var response; Gift.find({ fields: { id: id } }, function(err, gift) { if (err) return cb(err); if (gift.reserved) response = 'Sorry, the gift is reserved'; else response = 'Great, this gift can be yours'; }); cb(null, response); }; // expose the method through REST Gift.remoteMethod('isFree', { accepts: { arg: 'id', type: 'number' }, returns: { arg: 'response', type: 'string' }, http: { path: '/free', verb: 'post' } }); };
Έτσι, για να μάθετε εάν υπάρχει ένα συγκεκριμένο δώρο, ο πελάτης μπορεί τώρα να στείλει ένα αίτημα POST στο /api/Gifts/free
, περνώντας στο id
του εν λόγω δώρου.
Μερικές φορές υπάρχει ανάγκη εκτέλεσης κάποιας μεθόδου πριν ή μετά την απομακρυσμένη μέθοδο. Μπορείτε να ορίσετε δύο είδη απομακρυσμένων αγκιστριών:
beforeRemote()
εκτελείται πριν από την απομακρυσμένη μέθοδο.afterRemote()
τρέχει μετά την απομακρυσμένη μέθοδο.Και στις δύο περιπτώσεις, παρέχετε δύο ορίσματα: μια συμβολοσειρά που ταιριάζει με την απομακρυσμένη μέθοδο στην οποία θέλετε να 'συνδέσετε' τη λειτουργία σας και τη λειτουργία επιστροφής κλήσης. Μεγάλο μέρος της δύναμης των απομακρυσμένων αγκιστριών είναι ότι η συμβολοσειρά μπορεί να περιλαμβάνει μπαλαντέρ, επομένως ενεργοποιείται με οποιαδήποτε μέθοδο αντιστοίχισης.
Στην περίπτωσή μας, ας βάλουμε ένα άγκιστρο για την εκτύπωση πληροφοριών στην κονσόλα κάθε φορά που δημιουργείται ένας νέος Δωρητής. Για να το πετύχουμε, ας προσθέσουμε ένα γάντζο 'πριν από τη δημιουργία' στο donor.js
:
module.exports = function(Donor) { Donor.beforeRemote('create', function(context, donor, next) { console.log('Saving new donor with name: ', context.req.body.name); next(); }); };
Το αίτημα καλείται με το δεδομένο context
και το next()
Η επιστροφή κλήσης στο μεσαίο λογισμικό (συζητείται παρακάτω) καλείται μετά την εκτέλεση του αγκίστρου.
Οι εφαρμογές LoopBack έχουν πρόσβαση σε δεδομένα μέσω μοντέλων, επομένως ο έλεγχος της πρόσβασης σε δεδομένα σημαίνει τον καθορισμό περιορισμών στα μοντέλα. δηλαδή, καθορίζοντας ποιος ή τι μπορεί να διαβάσει και να γράψει τα δεδομένα ή να εκτελέσει μεθόδους στα μοντέλα. Τα στοιχεία ελέγχου πρόσβασης LoopBack καθορίζονται από λίστες ελέγχου πρόσβασης ή ACL.
Ας επιτρέψουμε στους μη συνδεδεμένους δωρητές και τους παραλήπτες να βλέπουν δώρα, αλλά μόνο συνδεδεμένους δωρητές για τη δημιουργία και τη διαγραφή τους.
$ slc loopback:acl
Αρχικά, ας αρνηθούμε σε όλους πρόσβαση σε όλα τα τελικά σημεία.
? Select the model to apply the ACL entry to: Gift ? Select the ACL scope: All methods and properties ? Select the access type: All (match all types) ? Select the role: All users ? Select the permission to apply: Explicitly deny access
Στη συνέχεια, επιτρέψτε σε όλους να διαβάσουν από τα μοντέλα δώρων:
$ slc loopback:acl ? Select the model to apply the ACL entry to: Gift ? Select the ACL scope: All methods and properties ? Select the access type: Read ? Select the role: All users ? Select the permission to apply: Explicitly grant access
Στη συνέχεια, θέλουμε να επιτρέψουμε στους πιστοποιημένους χρήστες να δημιουργήσουν δώρα:
$ slc loopback:acl ? Select the model to apply the ACL entry to: Gift ? Select the ACL scope: A single method ? Enter the method name: create ? Select the role: Any authenticated user ? Select the permission to apply: Explicitly grant access
Και τέλος, ας επιτρέψουμε στον κάτοχο του δώρου να κάνει οποιεσδήποτε αλλαγές:
$ slc loopback:acl ? Select the model to apply the ACL entry to: Gift ? Select the ACL scope: All methods and properties ? Select the access type: Write ? Select the role: The user owning the object ? Select the permission to apply: Explicitly grant access
Τώρα όταν εξετάζουμε gift.json
, όλα πρέπει να είναι στη θέση τους:
'acls': [ { 'accessType': '*', 'principalType': 'ROLE', 'principalId': '$everyone', 'permission': 'DENY' }, { 'accessType': 'READ', 'principalType': 'ROLE', 'principalId': '$everyone', 'permission': 'ALLOW' }, { 'accessType': 'EXECUTE', 'principalType': 'ROLE', 'principalId': '$authenticated', 'permission': 'ALLOW', 'property': 'create' } ],
Μια σημαντική σημείωση εδώ: $authenticated
είναι ένας προκαθορισμένος ρόλος που αντιστοιχεί σε όλους τους χρήστες του συστήματος (τόσο Δωρητές όσο και Δέκτες), αλλά θέλουμε μόνο να επιτρέψουμε στους Δωρητές να δημιουργήσουν νέα Δώρα. Επομένως, χρειαζόμαστε έναν προσαρμοσμένο ρόλο. Καθώς ο ρόλος είναι μια ακόμη οντότητα που βγαίνουμε από το κουτί, μπορούμε να αξιοποιήσουμε την κλήση API για να δημιουργήσουμε το $authenticatedDonor
ρόλο στη λειτουργία εκκίνησης και, στη συνέχεια, απλώς τροποποιήστε pricipalId
σε gift.json
.
Θα χρειαστεί να δημιουργήσετε ένα νέο αρχείο, server/boot/script.js
και να προσθέσετε τον ακόλουθο κώδικα:
Role.create({ name: 'authenticatedDonor' }, function(err, role) { if (err) return debug(err); })
Η οντότητα RoleMapping χαρτογραφεί τους ρόλους στους χρήστες. Βεβαιωθείτε ότι το Role και το RoleMapping εκτελούνται και τα δύο μέσω του REST. Στο server/model-config.json
, ελέγξτε ότι 'public'
έχει οριστεί σε true
για την οντότητα του ρόλου. Στη συνέχεια, στο donor.js
, μπορούμε να γράψουμε ένα άγκιστρο «πριν από τη δημιουργία» που θα χαρτογραφήσει το userID
και roleID
στην κλήση RoleMapping POST API.
Το Middleware περιέχει συναρτήσεις που εκτελούνται όταν υποβάλλεται ένα αίτημα στο REST endpoint. Καθώς το LoopBack βασίζεται στο Express, χρησιμοποιεί Express middleware με μία επιπλέον ιδέα, που ονομάζεται 'middleware phase'. Οι φάσεις χρησιμοποιούνται για να καθορίσουν με σαφήνεια τη σειρά με την οποία καλούνται οι συναρτήσεις στο middleware.
Ακολουθεί η λίστα των προκαθορισμένων φάσεων, όπως παρέχεται στα έγγραφα LoopBack:
Κάθε φάση έχει τρεις υποφάσεις. Για παράδειγμα, οι υποφάσεις της αρχικής φάσης είναι:
Ας ρίξουμε μια γρήγορη ματιά στο προεπιλεγμένο middleware.json:
{ 'initial:before': { 'loopback#favicon': {} }, 'initial': { 'compression': {}, 'cors': { 'params': { 'origin': true, 'credentials': true, 'maxAge': 86400 } } }, 'session': { }, 'auth': { }, 'parse': { }, 'routes': { }, 'files': { }, 'final': { 'loopback#urlNotFound': {} }, 'final:after': { 'errorhandler': {} } }
Στην αρχική φάση, καλούμε loopback.favicon()
(loopback#favicon
είναι το αναγνωριστικό middleware για αυτήν την κλήση). Στη συνέχεια, μονάδες npm τρίτων compression
και cors
ονομάζονται (με ή χωρίς παραμέτρους). Στην τελευταία φάση, έχουμε δύο ακόμη κλήσεις. urlNotFound
είναι μια κλήση LoopBack και errorhandler
είναι ενότητα τρίτων. Αυτό το παράδειγμα πρέπει να αποδείξει ότι πολλές ενσωματωμένες κλήσεις μπορούν να χρησιμοποιηθούν όπως και οι εξωτερικές μονάδες npm. Και φυσικά, μπορούμε πάντα να δημιουργήσουμε το δικό μας middleware και να τα καλέσουμε μέσω αυτού του αρχείου JSON.
loopback-boot
Για να ολοκληρώσουμε, ας αναφέρουμε μια ενότητα που εξάγει το boot()
συνάρτηση που αρχικοποιεί την εφαρμογή. Σε server/server.js
θα βρείτε το ακόλουθο κομμάτι κώδικα, το οποίο εκκινεί την εφαρμογή:
boot(app, __dirname, function(err) { if (err) throw err; // start the server if `$ node server.js` if (require.main === module) app.start(); });
Αυτό το σενάριο θα πραγματοποιήσει αναζήτηση στο server/boot
φάκελο και φορτώστε όλα τα σενάρια που βρίσκει εκεί με αλφαβητική σειρά. Έτσι, στο server/boot
, μπορούμε να καθορίσουμε οποιοδήποτε σενάριο που πρέπει να εκτελείται στην αρχή. Ένα παράδειγμα είναι explorer.js
, το οποίο εκτελείται Εξερεύνηση API , ο πελάτης που χρησιμοποιήσαμε για τη δοκιμή του API μας.
Πριν σας αφήσω, θα ήθελα να αναφέρω Τόξο StrongLoop , ένα γραφικό περιβάλλον εργασίας χρήστη που μπορεί να χρησιμοποιηθεί ως εναλλακτική λύση στο slc
εργαλεία γραμμής εντολών. Περιλαμβάνει επίσης εργαλεία για κατασκευή, δημιουργία προφίλ και παρακολούθηση εφαρμογών κόμβου. Για όσους δεν είναι οπαδοί της γραμμής εντολών, σίγουρα αξίζει να το δοκιμάσετε. Ωστόσο, το StrongLoop Arc πρόκειται να καταργηθεί και η λειτουργικότητά του ενσωματώνεται στο Εργαλειοθήκη IBM API Connect Developer .
Σε γενικές γραμμές, το LoopBack μπορεί να σας εξοικονομήσει πολλή χειροκίνητη δουλειά, καθώς παίρνετε πολλά πράγματα από το κουτί. Σας επιτρέπει να επικεντρωθείτε σε προβλήματα που αφορούν συγκεκριμένες εφαρμογές και επιχειρηματική λογική. Εάν η αίτησή σας είναι βασίζεται σε λειτουργίες CRUD και χειραγώγηση προκαθορισμένων οντοτήτων, εάν είστε άρρωστοι να ξαναγράψετε την υποδομή ελέγχου ταυτότητας και εξουσιοδότησης του χρήστη όταν πολλοί προγραμματιστές το έχουν γράψει πριν από εσάς ή εάν θέλετε να αξιοποιήσετε όλα τα πλεονεκτήματα ενός εξαιρετικού πλαισίου ιστού όπως το Express, στη συνέχεια, δημιουργήστε το REST API σας με Το LoopBack μπορεί να κάνει τα όνειρά σας πραγματικότητα. Είναι πανεύκολο!