portaldacalheta.pt
  • Κύριος
  • Άνοδος Του Απομακρυσμένου
  • Κύκλος Ζωής Προϊόντος
  • Διεπαφή Ιστού
  • Εργαλεία Και Σεμινάρια
Διεπαφή Ιστού

Tutorial Meteor: Δημιουργία εφαρμογών Ιστού σε πραγματικό χρόνο με τον Meteor



Μετέωρο είναι ένα πλαίσιο JavaScript πλήρους στοίβας για web και κινητές εφαρμογές . Είναι γύρω από το 2011 και έχει αποκτήσει μια ισχυρή φήμη μεταξύ Προγραμματιστές Meteor για να είναι μια ιδανική, εύχρηστη λύση για ταχεία δημιουργία πρωτοτύπων. Ωστόσο, πρόσφατα οι προγραμματιστές συνειδητοποίησαν ότι το Meteor δεν είναι μόνο για πρωτότυπα: είναι έτοιμο να χρησιμοποιηθεί για εμπορική ανάπτυξη. Με το οπλοστάσιο των πακέτων που παρέχει, το σταθερό θεμέλιο mongoDB / node.js στο οποίο βασίζεται και την ευελιξία κωδικοποίησης που προσφέρει. Το Meteor το καθιστά εύκολο στην κατασκευή ισχυρές, ασφαλείς διαδικτυακές εφαρμογές σε πραγματικό χρόνο , χειρισμός τα πάντα, από την εφαρμογή προγράμματος περιήγησης έως το διακομιστή ή τη βάση δεδομένων.

φροντιστήριο μετεωρίτη



Αυτό το σεμινάριο Meteor θα σας καθοδηγήσει κάνοντας μια βασική εφαρμογή ιστού στο Meteor - έναν απλό κατάλογο που επιτρέπει στους χρήστες να συνδέονται και να διαχειρίζονται μια λίστα βιβλίων.



Γιατί να χρησιμοποιήσετε το Meteor; Η σύντομη απάντηση είναι, 'γιατί ο Μετέωρος είναι διασκεδαστικός'. Κάνει την ανάπτυξη εφαρμογών ιστού απλή. Είναι εύκολο να το μάθετε και σας επιτρέπει να εστιάζετε περισσότερο στη λειτουργικότητα της εφαρμογής σας από τα βασικά στοιχεία του συγχρονισμού δεδομένων και των σελίδων προβολής.



Έχει επίσης πολλές συμπεριφορές ενσωματωμένες. Ο Meteor εκτελεί αυτόματα ζωντανές ενημερώσεις, οπότε οι αλλαγές δεδομένων εμφανίζονται αμέσως στο παράθυρο του προγράμματος περιήγησής σας, και ακόμη και οι αλλαγές κώδικα στην ίδια την εφαρμογή ωθούνται σε όλα τα προγράμματα περιήγησης και τις συσκευές σε πραγματικό χρόνο. Το Meteor έχει ενσωματωμένη αντιστάθμιση καθυστέρησης, είναι εύκολο να αναπτυχθεί και διαθέτει εύχρηστα 'πακέτα' που χειρίζονται κάθε είδους λειτουργικότητα.

Παρόλο που πρόκειται για ένα σχετικά νέο πλαίσιο, πολλές νεοσύστατες επιχειρήσεις δημιουργούν ήδη εφαρμογές Meteor, συμπεριλαμβανομένων σχετικών υπηρεσιών μεγάλης κλίμακας Ανταποκριτικά και Τηλεσκόπιο .



Εγκατάσταση μετεωρίτη και ικριώματα

Η εγκατάσταση του Meteor σε συστήματα * nix είναι ένα μόριο:

curl https://install.meteor.com/ | sh

Παρόλο που δεν υπάρχει ακόμη επίσημη υποστήριξη, η προεπισκόπηση για τα Windows έρχεται πολύ καλά. Οι φήμες είναι ότι η υποστήριξη των Windows θα κυκλοφορήσει με 1.1, αναμένεται τον Απρίλιο ή τον Μάιο του 2015. Όπως μπορείτε να περιμένετε από ένα έξυπνο πλαίσιο όπως το Meteor, η εκκίνηση μιας εφαρμογής απαιτεί την κλήση μιας γραμμής εντολών



πώς να εντοπίσετε διαρροή μνήμης
meteor create book-list

Αυτό θα δημιουργήσει έναν κατάλογο με το όνομα «λίστα βιβλίων» και θα τον συμπληρώσει με κάποιο boilerplate και εξαρτημένο κωδικό. Για να εκτελέσετε την εφαρμογή, εισαγάγετε τον πρόσφατα δημιουργημένο κατάλογο και εκτελέστε:

meteor

Άνοιγμα http://localhost:3000 στο πρόγραμμα περιήγησης ιστού και θα δείτε τα εξής:



καλώς ήλθατε στο μετεωρίτη

Μπορείτε επίσης να δείτε την «έκδοση 0» της εφαρμογής μας στο MeteorPad, έναν ιστότοπο που μοιάζει με το JSFiddle for Meteor: Λίστα βιβλίων: Προεπιλεγμένη εφαρμογή



Ο Meteor αποθηκεύει τις προβολές του σε αρχεία HTML. Εάν ανοίξουμε το 'book-list.html', θα δούμε:

book-list {{> hello}} Click Me

You've pressed the button {{counter}} times.



Ο Meteor χρησιμοποιεί το 'Blaze', μια μηχανή templating, για να δώσει απαντήσεις από αυτά τα αρχεία HTML. Τα διπλά στηρίγματα θα πρέπει να είναι γνωστά σε οποιονδήποτε έχει χρησιμοποιήσει το Handlebars.js (ή άλλους παρόμοιους κινητήρες templating) και εξυπηρετούν μια παρόμοια λειτουργία εδώ. Το Blaze εξετάζει τις εκφράσεις σε κάθε ζεύγος διπλών τιράντες και αντικαθιστά κάθε μία με την τιμή που παράγουν αυτές οι εκφράσεις.

Αυτό το απλό παράδειγμα προγράμματος έχει μόνο δύο διπλές αγκύλες:

  • Το πρώτο, '{{> hello}}', λέει στο Blaze να συμπεριλάβει ένα πρότυπο που ονομάζεται 'hello'. Αυτό το πρότυπο ορίζεται στο κάτω μέρος του αρχείου, στην ενότητα.

  • Το δεύτερο, '{{counter}}', είναι λίγο πιο περίπλοκο. Για να δούμε από πού προέρχεται αυτή η τιμή 'μετρητή' πρέπει να ανοίξουμε το 'book-list.js':

if (Meteor.isClient) { // counter starts at 0 Session.setDefault('counter', 0); Template.hello.helpers({ counter: function () { return Session.get('counter'); } }); Template.hello.events({ 'click button': function () { // increment the counter when button is clicked Session.set('counter', Session.get('counter') + 1); } }); } if (Meteor.isServer) { Meteor.startup(function () { // code to run on server at startup }); }

Μερικά πράγματα απαιτούν εξήγηση εδώ. Πρώτον, το διαχωρισμό σε 'if (Meteor.isClient)' και 'if (Meteor.isServer)'. Θυμηθείτε ότι ο μετεωρίτης είναι ένα πλαίσιο πλήρους στοίβας, οπότε ο κώδικας που γράφετε εκτελείται τόσο στον διακομιστή όσο και στον πελάτη. Αυτές οι προϋποθέσεις μας επιτρέπουν να το περιορίσουμε: το πρώτο μπλοκ εκτελείται μόνο στον πελάτη και το δεύτερο εκτελείται μόνο στον διακομιστή.

Δεύτερον, υπάρχει η κλήση 'Session.setDefault' - αρχίζει η μεταβλητή περιόδου λειτουργίας που ονομάζεται 'μετρητής' στο πρόγραμμα περιήγησης. Οι μεταβλητές περιόδου λειτουργίας λειτουργούν λίγο σαν τα σφαιρικά στο Meteor (για καλό και για άρρωστους). Ωστόσο, αυτή η μεταβλητή περιόδου λειτουργίας δεν εμφανίζεται απευθείας στο '{{counter}}'. Αντίθετα, αυτή η 'αντίθετη' έκφραση είναι 'βοηθός', που ορίζεται στην ενότητα 'Template.hello.helpers'. Αυτός ο βοηθός αρπάζει απλώς την τιμή της μεταβλητής περιόδου λειτουργίας και την επιστρέφει.

Σημειώστε ότι ο βοηθός είναι «αντιδραστικός». Αυτό σημαίνει ότι κάθε φορά που αλλάζει η μεταβλητή περιόδου λειτουργίας, ο Meteor εκτελεί ξανά αυτόματα αυτήν τη βοηθητική λειτουργία που αναφέρεται, και το Blaze ενημερώνει αυτόματα το πρόγραμμα περιήγησης με το νέο περιεχόμενο.

Ο κωδικός πελάτη παρακολουθεί επίσης συμβάντα, μέσω του 'Template.hello.events'. Προσδιορίζουμε το συμβάν ανά τύπο συμβάντος και επιλογέα (σε αυτήν την περίπτωση, 'κουμπί κλικ') και στη συνέχεια λέμε στον Meteor τι πρέπει να κάνει αυτό το συμβάν. Σε αυτήν την περίπτωση, η μεταβλητή περιόδου λειτουργίας αυξάνεται, η οποία εκτελεί εκ νέου τη λειτουργία βοηθού και με τη σειρά της αναπαράγει το περιεχόμενο.

Εμφάνιση στατικών δεδομένων

Όλα αυτά είναι καλά και καλά, αλλά δεν είναι η εφαρμογή Meteor που θέλουμε για αυτό το σεμινάριο.

πώς να υπολογίσω εκεί είμαι

Ας αρχίσουμε να τροποποιούμε αυτήν την εφαρμογή - θα εμφανίσουμε μια στατική, κωδικοποιημένη λίστα βιβλίων. Προς το παρόν, θα αποθηκεύσουμε τη λίστα βιβλίων σε ένα μεταβλητή περιόδου λειτουργίας . Στον κώδικα 'isClient', θα χρησιμοποιήσουμε το 'Template.hello.rendered' για να ορίσουμε τη μεταβλητή περιόδου λειτουργίας μόλις εμφανιστεί το πρότυπο bookList:

Template.hello.rendered = function() { Session.setDefault('books', [ {title: 'To Kill a Mockingbird', author: 'Harper Lee'}, {title: '1984', author: 'George Orwell'}, {title: 'The Lord of the Rings', author: 'J. R. R. Tolkien'}, {title: 'The Catcher in the Rye', author: 'J. D. Salinger'}, {title: 'The Great Gatsby', author: 'F. Scott Fitzgerald'} ]); };

Στη συνέχεια, επιστρέφουμε τη μεταβλητή περιόδου σύνδεσης με έναν νέο βοηθό στο πρότυπο 'γεια':

Template.hello.helpers({ books: function () { return Session.get('books'); } });

Και εμφανίστε το στην οθόνη μέσω μεταβλητής παρεμβολής στο πρότυπο 'γεια':

Here are your books:

{{ books }}

Μπορείτε να δείτε αυτόν τον κώδικα σε δράση στο Meteorpad: Λίστα βιβλίων: Εμφάνιση μεταβλητής περιόδου σύνδεσης

Το πρώτο πράγμα που πρέπει να παρατηρήσετε είναι ότι ο διακομιστής Meteor εντόπισε αυτόματα τις αλλαγές στη βάση κώδικα, ώθησε τον νέο κώδικα στους πελάτες και ώθησε τον πελάτη να φορτώσει ξανά. Ακόμη και μετά την ανάπτυξη μιας εφαρμογής, μπορούμε να αναπτύξουμε αλλαγές και να ενημερώσουμε αυτόματα τους πελάτες μας μέσω push hot code.

αναπτύξτε αυτόματα αλλαγές

Μέχρι στιγμής, αυτό είναι που έχουμε:

λανθασμένη εμφάνιση δεδομένων

Ωχ, προβάλλουμε τα δεδομένα λανθασμένα. Το Blaze παίρνει πόντους για ακρίβεια εδώ (γιατί ναι, είναι μια σειρά αντικειμένων), αλλά θα πρέπει να είμαστε λίγο πιο έξυπνοι εάν θέλουμε να εμφανίσουμε τη λίστα των βιβλίων μας με χρήσιμο τρόπο. Ευτυχώς, το Blaze διευκολύνει την εργασία με πίνακες δεδομένων χρησιμοποιώντας την οδηγία '#each':

Here are your books:

    {{#each books}}
  • {{title}} by {{author}}
  • {{/each}}

Στο Blaze, το '#each' λειτουργεί σαν την οδηγία 'ng-repeat' της Angular - επαναλαμβάνει τη δομή του πίνακα, ρυθμίζοντας το τρέχον πλαίσιο στο τρέχον αντικείμενο του πίνακα και εμφανίζοντας επανειλημμένα το HTML μέσα στο '{{#each …}} ”. Αυτή είναι η λίστα των βιβλίων μας τώρα:

σωστή εμφάνιση δεδομένων

Στο MeteorPad: Εμφάνιση της μεταβλητής περιόδου σύνδεσης σωστά

Κάποιος καθαρίζει

Πριν προχωρήσουμε περισσότερο, ας καθαρίσουμε λίγο τον κωδικό μας.

Το Meteor επιτρέπει τεράστια ελευθερία στον τρόπο οργάνωσης της βάσης κώδικα. Όπως θα δείτε, υπάρχουν μόνο μερικοί σκληροί και γρήγοροι κανόνες: όπου κι αν βάλετε το HTML και το JavaScript, ο Meteor θα το βρει. Αυτή η ευελιξία είναι ωραία, αλλά αυτό σημαίνει ότι είναι πιο καθήκον σας να οργανώσετε τον κώδικά σας με τρόπο που έχει νόημα, οπότε δεν έχετε κολλήσει να διατηρείτε ένα τεράστιο άτακτο χάος.

Κατ 'αρχάς, ας μετονομάσουμε αυτό το πρότυπο 'γεια' σε κάτι σημαντικό, όπως 'BookList', και αντικαταστήστε το boilerplate HTML με αυτό:

book-list {{> bookList}}

Here are some books:

    {{#each books}}
  • {{title}} by {{author}}
  • {{/each}}

Δεύτερον, ας χωρίσουμε τα μέρη «πελάτης» και «διακομιστή» σε ξεχωριστά αρχεία. Στον κατάλογο εφαρμογών μας, θα δημιουργήσουμε έναν υποκατάλογο 'πελάτης' και έναν υποκατάλογο 'διακομιστής' - Ο Meteor θα γνωρίζει αυτόματα ότι θα εκτελεί τα αρχεία '/ client /' στον υπολογιστή-πελάτη και θα εκτελεί τα αρχεία '/ server /' στο υπηρέτης. Είναι καλή σύμβαση να τοποθετείτε τον κώδικα προτύπου σε ένα αρχείο JavaScript που ονομάζεται μετά το πρότυπο, οπότε ας βάλουμε τον κωδικό πελάτη μας στο 'client / bookList.js'. Μπορούμε να βάλουμε τον κενό φάκελο εκκίνησης διακομιστή στο 'server / startup.js'. Τέλος, ας μετακινήσουμε τον κωδικό προτύπου στο 'client / bookList.html'.

Σημειώστε ότι ακόμη και μετά από αυτήν την αλλαγή, ο Meteor θα εξακολουθεί να βρίσκει αυτόματα όλα τα αρχεία HTML και JavaScript. Όσο είναι ένα αρχείο κάπου στο '/ client /', ο Meteor θα ξέρει να το τρέχει στον πελάτη. Όσο είναι ένα αρχείο κάπου στο “/ server /”, ο meteor θα ξέρει να το τρέχει στο διακομιστή. Και πάλι, εναπόκειται στον προγραμματιστή να διατηρήσει τα πράγματα οργανωμένα.

Οπότε τώρα ο κώδικάς μας πρέπει να έχει την εξής μορφή:

book-list.html:

book-list {{> bookList}}

client / bookList.html:

Here are some books:

    {{#each books}}
  • {{title}} by {{author}}
  • {{/each}}

πελάτης / bookList.js:

Template.bookList.rendered = function() { Session.setDefault('books', [ {title: 'To Kill a Mockingbird', author: 'Harper Lee'}, {title: '1984', author: 'George Orwell'}, {title: 'The Lord of the Rings', author: 'J. R. R. Tolkien'}, {title: 'The Catcher in the Rye', author: 'J. D. Salinger'}, {title: 'The Great Gatsby', author: 'F. Scott Fitzgerald'} ]); }; Template.bookList.helpers({ books: function () { return Session.get('books'); } });

διακομιστής / startup.js:

Meteor.startup(function () { // code to run on server at startup }); ~~~ Check it out on MeteorPad: [Initial Code Cleanup](http://meteorpad.com/pad/MwvMcsBAzfbWwEXp3/Book-List:%20Initial%20Code%20Cleanup) Verify that everything's running correctly by checking the browser window and then we're good to move on to the next step. ## Using the Database in Meteor The Meteor server runs on top of a MongoDB database. In this section of our tutorial, we will move the static list of books out of the session variable and into that database. First, delete the Template.bookList.rendered code, so that we're no longer putting stuff into that session variable. Next, we should add that list of books to the database as fixture data when the server initializes. As you'd expect for MongoDB, Meteor stores data in 'collections'. So, we'll create a new collection for our books. To keep things simple we will name it 'books'. It turns out that both the client and the server will want to know about this collection, so we'll put this code in a new subfolder: '/lib/'. Meteor knows automatically that files in '/lib/' run on the client and the server. We'll create a file called 'lib/collections/books.js', and give it just one line of code: ~~~ js Books = new Meteor.Collection('books');

Στο παράθυρο του προγράμματος περιήγησης που δείχνει http: // localhost: 3000 , μεταβείτε στην κονσόλα προγραμματιστή και ελέγξτε την τιμή των 'Βιβλίων'. Θα πρέπει τώρα να είναι μια συλλογή Mongo! Δοκιμάστε να εκτελέσετε το 'Books.find (). Fetch ()' και θα λάβετε έναν κενό πίνακα - κάτι που έχει νόημα, καθώς δεν έχουμε προσθέσει ακόμη βιβλία σε αυτό. Μπορούμε να δοκιμάσουμε να προσθέσουμε στοιχεία σε αυτήν στην κονσόλα:

Books.insert({title: 'To Kill a Mockingbird', author: 'Harper Lee'})

Η προσθήκη πραγμάτων στην κονσόλα είναι μάλλον κουραστική. Αντ 'αυτού, θα ρυθμίσουμε τα πράγματα, έτσι ώστε όταν ξεκινά ο διακομιστής να εισάγουμε αυτόματα δεδομένα βάσης στη βάση δεδομένων. Ας επιστρέψουμε στο 'server / startup.js' και προσθέστε το:

Meteor.startup(function () { if (!Books.findOne()) { Books.insert({title: 'To Kill a Mockingbird', author: 'Harper Lee'}); Books.insert({title: '1984', author: 'George Orwell'}); Books.insert({title: 'The Lord of the Rings', author: 'J. R. R. Tolkien'}); Books.insert({title: 'The Catcher in the Rye', author: 'J. D. Salinger'}); Books.insert({title: 'The Great Gatsby', author: 'F. Scott Fitzgerald'}); } });

Τώρα, όταν ξεκινά ο διακομιστής, εάν δεν υπάρχουν δεδομένα, θα προσθέσουμε τα δεδομένα προσάρτησης. Μπορούμε να το επαληθεύσουμε επιστρέφοντας στο τερματικό μας, σταματώντας τον διακομιστή meteor και εκτελώντας αυτήν την εντολή:

meteor reset

Σημείωση: θα το κάνετε σπανίως χρειάζεστε αυτήν την εντολή, επειδή επαναφέρει - δηλαδή, καθαρίζει - τη βάση δεδομένων που χρησιμοποιεί ο Meteor. Εάν η εφαρμογή Meteor έχει δεδομένα χρήστη στη βάση δεδομένων, δεν πρέπει να εκτελέσετε αυτήν την εντολή. Σε αυτήν την περίπτωση, θα ξεκαθαρίσουμε τα δεδομένα δοκιμής που έχουμε.

Τώρα θα ξεκινήσουμε ξανά τον διακομιστή:

meteor

Κατά την εκκίνηση, ο Meteor θα εκτελέσει τη ρουτίνα εκκίνησης, θα δει ότι η βάση δεδομένων είναι κενή και θα προσθέσει τα δεδομένα προσάρτησης. Σε αυτό το σημείο, αν πάμε στην κονσόλα και πληκτρολογήσουμε 'Books.find (). Fetch ()', λαμβάνουμε τα πέντε βιβλία που είχαμε πριν.

node js javascript πλευρά πελάτη

Το μόνο που μένει για αυτό το βήμα είναι να εμφανιστούν τα βιβλία στην οθόνη. Ευτυχώς, αυτό είναι τόσο απλό όσο η αντικατάσταση του 'return Session.get (' books ');' με τα ακόλουθα στο 'βιβλία' βοηθός:

return Books.find();

Και επιστρέφουμε στην επιχείρηση! Η εφαρμογή εμφανίζει τώρα δεδομένα από ένα δρομέα βάσης δεδομένων, αντί από τη μεταβλητή περιόδου λειτουργίας.

Δείτε το στο MeteorPad: Μετακίνηση στη βάση δεδομένων

ΘΕΜΑΤΑ ΑΣΦΑΛΕΙΑΣ

Θα προλογίσω αυτό λέγοντας: 'μην το κάνετε αυτό'.

Τι πιστεύετε ότι θα συνέβαινε εάν κάποιος ενεργοποίησε αυτήν την εφαρμογή στο πρόγραμμα περιήγησής του, πήγε στην κονσόλα και πληκτρολόγησε το 'Books.remove ({})';

Η απάντηση είναι: θα εξαλείψουν τη συλλογή.

Λοιπόν, αυτό είναι ένα πολύ μεγάλο πρόβλημα ασφάλειας - οι χρήστες μας έχουν πάρα πολύ πρόσβαση στη βάση δεδομένων μας. Κάθε πελάτης μπορεί να έχει πρόσβαση σε ολόκληρη τη βάση δεδομένων. Όχι μόνο αυτό, οποιοσδήποτε πελάτης μπορεί να κάνει καμία αλλαγή σε ολόκληρη τη βάση δεδομένων, συμπεριλαμβανομένης της διαγραφής δεδομένων '.remove ({})'.

Αυτό δεν είναι καλό, ας το διορθώσουμε.

Ο Meteor χρησιμοποιεί τα λεγόμενα «πακέτα» για την προσθήκη λειτουργικότητας. Τι είναι οι ενότητες στο Node.js και οι πολύτιμοι λίθοι στο Ruby, τα πακέτα είναι ένα σύνολο λειτουργικότητας του Meteor. Υπάρχουν πακέτα για κάθε είδους πράγματα. Για να περιηγηθείτε σε ό, τι είναι διαθέσιμο, δείτε το atmosfer.js .

Η προεπιλεγμένη εφαρμογή meteor που δημιουργήσαμε με το 'meteor create' περιλαμβάνει δύο πακέτα που ονομάζονται 'αυτόματη δημοσίευση' και 'μη ασφαλής'. Το πρώτο πακέτο το κάνει έτσι ώστε οι πελάτες να έχουν αυτόματη πρόσβαση σε ολόκληρη τη βάση δεδομένων, και το δεύτερο να επιτρέπει στους χρήστες να εκτελούν οποιεσδήποτε ενέργειες σε αυτήν τη βάση δεδομένων.

Ας τα αφαιρέσουμε. Μπορούμε να το κάνουμε εκτελώντας τα ακόλουθα από τον κατάλογο εφαρμογών:

meteor remove autopublish insecure

Όταν τελειώσετε, θα δείτε τα δεδομένα της λίστας βιβλίων να εξαφανίζονται από την οθόνη (καθώς δεν έχετε πλέον πρόσβαση σε αυτήν) και εάν δοκιμάσετε μια κλήση 'Books.insert', θα εμφανιστεί το σφάλμα: 'Η εισαγωγή απέτυχε : Δεν επιτρέπεται η πρόσβαση ». Στο MeteorPad: Υπέρβαση ασφαλείας

Εάν δεν λαμβάνετε τίποτα άλλο από αυτό το σεμινάριο Meteor, θυμηθείτε αυτό: όταν αναπτύσσετε μια εφαρμογή Meteor, φροντίστε να καταργήσετε την αυτόματη δημοσίευση των πακέτων και να μην είστε ασφαλείς. Ο μετεωρίτης έχει πολλές καλές προφυλάξεις ασφαλείας, αλλά όλες είναι άχρηστες αν αφήσετε εγκατεστημένα αυτά τα δύο πακέτα.

Λοιπόν, γιατί το Meteor συμπεριλαμβάνει αυτόματα αυτά τα πακέτα, εάν αποτελούν τέτοιο κίνδυνο για την ασφάλεια; Ο λόγος είναι ότι, ειδικά για αρχάριους, αυτά τα δύο πακέτα διευκολύνουν την εκκίνηση - μπορείτε εύκολα να κάνετε εντοπισμό σφαλμάτων και τροποποίηση της βάσης δεδομένων από την κονσόλα του προγράμματος περιήγησης. Ωστόσο, είναι καλή πρακτική να απομακρύνετε την αυτόματη δημοσίευση και να μην είστε ασφαλείς το συντομότερο δυνατό.

Δημοσίευση και εγγραφή

Διορθώσαμε λοιπόν αυτό το κενό ασφαλείας, αλλά παρουσιάσαμε δύο προβλήματα. Πρώτον, δεν έχουμε πλέον πρόσβαση στη βάση δεδομένων. Δεύτερον, δεν έχουμε τρόπο αλληλεπίδρασης με τη βάση δεδομένων.

ερώτημα πολυμέσων για όλες τις συσκευές

Ας αντιμετωπίσουμε το πρώτο πρόβλημα εδώ. Ο Meteor παρέχει ασφαλή πρόσβαση σε μια βάση δεδομένων, έχοντας τον διακομιστή να 'δημοσιεύσει' ένα υποσύνολο της βάσης δεδομένων και έχοντας τον πελάτη να 'εγγραφεί' σε αυτήν τη δημοσίευση.

Αρχικά, ας δημιουργήσουμε το '/server/publications.js':

Meteor.publish('books', function() { return Books.find({}); });

Και θα δημιουργήσουμε το '/client/subscriptions.js':

Meteor.subscribe('books');

Δείτε το στο MeteorPad: Δημοσίευση και εγγραφή

Ο διακομιστής 'δημοσιεύει' έναν δρομέα που έχει πρόσβαση σε όλα τα δεδομένα και ο πελάτης 'εγγράφεται' σε αυτό στο άλλο άκρο. Ο πελάτης χρησιμοποιεί αυτήν τη συνδρομή για να συμπληρώσει ένα αντίγραφο της βάσης δεδομένων με όλα τα δεδομένα του δρομέα. Όταν έχουμε πρόσβαση στο 'Books.find (). Fetch ()', βλέπουμε και τα πέντε αντικείμενα και τα βλέπουμε να εμφανίζονται στην οθόνη όπως πριν.

Η διαφορά τώρα είναι ότι είναι πολύ εύκολο να περιορίσετε αυτό που έχουν πρόσβαση οι πελάτες. Δοκιμάστε να αλλάξετε τη δημοσίευση 'εύρεση ()' σε ένα υποσύνολο των δεδομένων:

Meteor.publish('books', function() { return Books.find({}, {limit:3}); });

Τώρα ο πελάτης βλέπει μόνο τρία από τα πέντε βιβλία και δεν υπάρχει τρόπος να φτάσετε στα υπόλοιπα. Όχι μόνο αυτό είναι ένα μεγάλο όφελος για την ασφάλεια (δεν βλέπω τους τραπεζικούς λογαριασμούς όλων των άλλων), αλλά μπορείτε να τα χρησιμοποιήσετε για να διαχωρίσετε δεδομένα και να αποφύγετε την υπερφόρτωση ενός πελάτη.

Προσθήκη νέων βιβλίων

Έχουμε δει πώς να προσφέρουμε στους πελάτες πρόσβαση ανάγνωσης στη βάση δεδομένων με περιορισμένο και ασφαλή τρόπο. Τώρα, ας δούμε το δεύτερο πρόβλημα: πώς επιτρέπουμε στους χρήστες να αλλάξουν τη βάση δεδομένων χωρίς να τους επιτρέψουμε να κάνουν οτιδήποτε θέλουν; Η απαλλαγή από το πακέτο δεν ήταν ασφαλές, ώστε οι πελάτες να μην έχουν καθόλου πρόσβαση - ας προσπαθήσουμε να επιτρέψουμε την προσθήκη βιβλίων ξανά. Στο meteor, το κάνουμε αυτό προσθέτοντας μια «μέθοδο» στον διακομιστή. Ας προσθέσουμε μια μέθοδο, που προσθέτει ένα νέο βιβλίο, στο '/lib/collections/books.js':

Meteor.methods({ addBook: function(bookData) { var bookID = Books.insert(bookData); return bookID; } });

Όπως μπορείτε να δείτε, αυτό παίρνει το 'bookData' - σε αυτήν την περίπτωση, αυτό είναι ένα αντικείμενο με πεδία 'τίτλος' και 'συγγραφέας' - και το προσθέτει στη βάση δεδομένων. Μόλις ο πελάτης σας φορτώσει ξανά, μπορούμε στη συνέχεια να καλέσουμε αυτήν τη μέθοδο από τον πελάτη. Μπορείτε να πάτε στην κονσόλα και να εισαγάγετε κάτι σαν αυτό:

Meteor.call('addBook', {title: 'A Tale of Two Cities', author: 'Charles Dickens'})

Και presto! Λαμβάνετε ένα άλλο βιβλίο στη λίστα βιβλίων. Η χρήση της κονσόλας είναι ανυπόφορα ακατάλληλη, οπότε ας προχωρήσουμε και προσθέστε μια απλή φόρμα στο τέλος του προτύπου 'BookList' που θα μας επιτρέψει να προσθέσουμε νέα βιβλία:

Title:

Author:

Και μπορούμε να το συνδέσουμε με JavaScript χρησιμοποιώντας μια περίπτωση συμβάντος, όπως είχαμε στην αρχική δοκιμαστική εφαρμογή:

Template.bookList.events({ 'submit .add-book': function(event) { event.preventDefault(); // this prevents built-in form submission Meteor.call('addBook', {title: event.target.title.value, author: event.target.author.value}) } });

Μπορείτε να το δείτε σε δράση στο MeteorPad: Μέθοδοι

Όταν είχαμε ανασφαλή και αυτόματη δημοσίευση, οι πελάτες μπορούσαν να έχουν πρόσβαση και να αλλάξουν ολόκληρη τη βάση δεδομένων. Τώρα με ανασφαλή και αυτόματη δημοσίευση, αλλά με δημοσιεύσεις, συνδρομές και μεθόδους, οι πελάτες μπορούν να έχουν πρόσβαση στη βάση δεδομένων και να αλληλεπιδρούν με αυτήν με ελεγχόμενο τρόπο.

Σε μια δευτερεύουσα σημείωση: μπορείτε επίσης να αντιμετωπίσετε ζητήματα ασφαλείας στο Meteor χρησιμοποιώντας 'κανόνες αδειοδότησης και άρνησης'. Μπορείτε να μάθετε περισσότερα για αυτούς και για κάποιους λόγους που προτιμώ την παραπάνω προσέγγιση Discovermeteor.com .

Έλεγχος ταυτότητας χρήστη

Μπορεί να φαίνεται ότι μόλις γυρίσαμε πίσω στο σημείο που ξεκινήσαμε, αλλά υπάρχει μια σημαντική διαφορά: είναι πολύ εύκολο για εμάς να περιορίσουμε τώρα την πρόσβαση στη βάση δεδομένων. Για να δείτε πώς λειτουργεί αυτό, ας προσπαθήσουμε να προσθέσουμε χρήστες σε αυτήν την εφαρμογή. Θα προσθέσουμε ένα σύστημα σύνδεσης στην εφαρμογή μας και, στη συνέχεια, αντί να δουλεύουμε όλοι οι πελάτες με μια λίστα βιβλίων σε ολόκληρο το σύστημα, θα το κάνουμε έτσι ώστε κάθε χρήστης να μπορεί να προσθέσει ή να διαβάσει μόνο τη δική του λίστα βιβλίων.

Μεταβείτε στον κατάλογο εφαρμογών και εγκαταστήστε δύο πακέτα:

meteor add accounts-ui accounts-password

Εκεί. Μόλις προσθέσατε ένα σύστημα σύνδεσης στην εφαρμογή. Τώρα πρέπει απλώς να προσθέσουμε το UI σύνδεσης στο book-list.html. Βάλτε αυτήν την ενιαία γραμμή στο πάνω μέρος του σώματος:

{{> loginButtons}}

Θα πρέπει να δείτε μια προτροπή σύνδεσης στο επάνω μέρος της οθόνης:

προτροπή σύνδεσης

Σημειώστε ότι εάν κάνετε κλικ στο σύνδεσμο σύνδεσης, θα ζητήσει μια διεύθυνση ηλεκτρονικού ταχυδρομείου και έναν κωδικό πρόσβασης. Μπορούμε να το αλλάξουμε σε απλό σύστημα σύνδεσης ονόματος χρήστη / κωδικού πρόσβασης δημιουργώντας το '/client/config.js' με τα ακόλουθα σε αυτό:

Accounts.ui.config({ passwordSignupFields: 'USERNAME_ONLY' });

Σε αυτό το σημείο, μπορείτε να πληκτρολογήσετε 'Meteor.userId ()' στην κονσόλα και θα επιστρέψει 'null'. Μπορείτε να δοκιμάσετε να κάνετε κλικ στον σύνδεσμο για να δημιουργήσετε έναν λογαριασμό. Κλήση 'Meteor.userId ()' θα πρέπει τώρα να επιστρέψει μια συμβολοσειρά ID. Ο διακομιστής έχει πρόσβαση σε αυτό το ίδιο κομμάτι πληροφοριών (όπως 'this.userId'), επομένως είναι ασήμαντο να κάνετε τη μέθοδο 'προσθήκη βιβλίων' να αναγκάσει τον χρήστη να συνδεθεί και να συμπεριλάβει ένα πεδίο userID:

Meteor.methods({ addBook: function(bookData) { if (this.userId) { bookData.userID = this.userId; var bookID = Books.insert(bookData); return bookID; } } });

Το μόνο που μένει τώρα είναι να περιορίσουμε τον πελάτη, δείχνοντας μόνο τα βιβλία που έχει προσθέσει αυτός ο χρήστης. Χρησιμοποιούμε τη δυνατότητα της δημοσίευσης για να περιορίσουμε αυτό που έχει πρόσβαση ο πελάτης:

Meteor.publish('books', function() { return Books.find({userID: this.userId}); });

Τώρα, η έκδοση βρίσκει μόνο βιβλία από αυτόν τον συγκεκριμένο χρήστη. Μπορούμε ακόμη και να αποκτήσουμε πρόσβαση στο UserId από τις εκφράσεις Blaze ως '{{currentUser}}'. και μπορούμε να το χρησιμοποιήσουμε αυτό, με μια οδηγία '{{#if}}' (η οποία κάνει ακριβώς αυτό που νομίζετε ότι κάνει), για την εμφάνιση δεδομένων μόνο όταν ο χρήστης είναι συνδεδεμένος:

{{#if currentUser}}

Here are your books:

    {{#each books}}
  • {{title}} by {{author}}
  • {{/each}}
Title:

Author:
{{else}}

Please log in to see your books

{{/if}}

Δείτε το τελικό αποτέλεσμα στο MeteorPad: Users

Ανάπτυξη

Τώρα μπορούμε να αναπτύξουμε αυτήν την εφαρμογή Meteor στο Διαδίκτυο. Αυτό το κάνουμε μεταβαίνοντας στον κατάλογο εφαρμογών σε ένα τερματικό και εκτελώντας:

πώς να μετρήσετε την απόδοση της επένδυσης
meteor deploy .meteor.com

Βεβαιωθείτε ότι αντικαταστήσατε το '' με ένα πραγματικό, σύντομο όνομα για την παρουσία της εφαρμογής. Η εκτέλεση αυτής της εντολής θα σας ζητήσει να δημιουργήσετε έναν λογαριασμό με το Meteor και, στη συνέχεια, θα θέσει τη νέα σας εφαρμογή στους δοκιμαστικούς διακομιστές του Meteor, ώστε να μπορείτε να το δοκιμάσετε στο Διαδίκτυο.

Για μια γρήγορη επίδειξη, αυτή η λύση meteor.com είναι το μόνο που χρειάζεστε. Η ομάδα Meteor δεν έχει ανακοινώσει ρητά όρια αποθήκευσης ή εύρους ζώνης στους διακομιστές τους. Ο μόνος αξιοσημείωτος περιορισμός είναι ότι εάν η εφαρμογή σας δεν χρησιμοποιείται για μεγάλο χρονικό διάστημα, ο ιστότοπος διαρκεί λίγα δευτερόλεπτα για τον επόμενο χρήστη .

Ωστόσο, το meteor.com δεν προορίζεται για εμπορική χρήση. Αλλά όταν πηγαίνετε στην παραγωγή, υπάρχουν εταιρείες σαν πλατφόρμα ως υπηρεσία Μέτρο και Ψηφιακός Ωκεανός που διευκολύνουν την ανάπτυξη εφαρμογών Meteor. Εάν θέλετε να αναπτύξετε μια εφαρμογή meteor στον δικό σας διακομιστή, το 'meteor up' κάνει επίσης αυτή τη διαδικασία απλή.

Επόμενα βήματα

Συγχαρητήρια! Στην προσπάθειά σας να μάθετε το Meteor, έχετε πλέον δημιουργήσει και αναπτύξει μια πολύ απλή εφαρμογή Ιστού Meteor σε πραγματικό χρόνο. Προφανώς, αυτό είναι μόνο ένα μικρό πρώτο βήμα σε ένα ολόκληρο σύμπαν λειτουργιών και λειτουργιών. Αν σας αρέσει αυτό που έχετε δει μέχρι τώρα, σας συνιστώ ανεπιφύλακτα Η πρώτη σας εφαρμογή Meteor από τον David Turnbull , που καθοδηγεί τους αναγνώστες στη δημιουργία μιας πιο περίπλοκης εφαρμογής, με περισσότερες πληροφορίες σχετικά με τις δυνατότητες των μετεωρίτων. Είναι διαθέσιμο ως βιβλίο Kindle σε μικρή τιμή και ως δωρεάν PDF στον ιστότοπο του Turnbull.

Θα θέλατε επίσης να εξερευνήσετε τα πακέτα που είναι διαθέσιμα για το Meteor. Εννέα φορές στα δέκα, η απάντηση στο 'πώς μπορώ να κάνω στο Meteor;' είναι 'υπάρχει ένα πακέτο για αυτό'. 'Πώς μπορώ να προσθέσω δρομολόγιο στην εφαρμογή μου;' Εσυ χρησιμοποιεις Δρομολογητής σιδήρου . 'Πώς μπορώ να προσφέρω ένα RESTful API;' Εσυ χρησιμοποιεις RESTivus . 'Πώς μπορώ να συμπεριλάβω τη δοκιμή μονάδας;' Εσυ χρησιμοποιεις Ταχύτητα . 'Πώς μπορώ να προσθέσω επικυρώσεις σχήματος;' Εσυ χρησιμοποιεις Συλλογή2 . Μπορείτε εύκολα να χαθείτε Ατμόσφαιρα.js εξετάζοντας όλα τα διαθέσιμα πακέτα.

Γιατί να μην χρησιμοποιήσετε το Meteor;

Όπως μπορείτε να δείτε από αυτό το σεμινάριο, ο Meteor είναι απλός και διασκεδαστικός για να γράψετε εφαρμογές, αλλά θα ήμουν λάθος αν δεν ανέφερα τα μειονεκτήματα.

Ο μετεωρίτης είναι ακόμη σχετικά ανώριμος. Χτύπησε 1,0 τον περασμένο Οκτώβριο, και αυτό οδηγεί σε κάποια προβλήματα. Εάν θέλετε να κάνετε κάτι σκοτεινό, είναι πιθανό κανείς να μην έχει γράψει ένα πακέτο για αυτήν τη λειτουργικότητα ακόμα. Τα πακέτα που υπάρχουν είναι πιο πιθανό να έχουν σφάλματα, απλώς και μόνο επειδή δεν έχουν περάσει αρκετά καιρό για να λύσουν όλα τα προβλήματα.

Η κλιμάκωση μπορεί επίσης να είναι κάπως άγνωστη με τον Meteor. Υπάρχουν πολλοί ιστότοποι Meteor που αυξάνουν τα εύλογα ποσά χρηστών, αλλά λίγες πολύ μεγάλες τοποθεσίες - τίποτα κατά παραγγελία Facebook ή LinkedIn, με δεκάδες ή εκατοντάδες εκατομμύρια χρήστες.

Ωστόσο, για τις περισσότερες εφαρμογές, το Meteor είναι μια τέλεια επιλογή, καθώς είναι μια ευκαιρία να μειώσετε τον χρόνο ανάπτυξης και να συμμετάσχετε στην αρχή του κάτι υπέροχο.

Καλά δομημένη λογική: Ένα μάθημα OOP Golang

Πίσω Μέρος

Καλά δομημένη λογική: Ένα μάθημα OOP Golang
Τι είναι το Bootstrap; Ένα σύντομο εκπαιδευτικό πρόγραμμα εκκίνησης για το τι, γιατί και πώς

Τι είναι το Bootstrap; Ένα σύντομο εκπαιδευτικό πρόγραμμα εκκίνησης για το τι, γιατί και πώς

Διεπαφή Ιστού

Δημοφιλείς Αναρτήσεις
Πώς έφτιαξα έναν πλήρως λειτουργικό μετεωρολογικό σταθμό Arduino
Πώς έφτιαξα έναν πλήρως λειτουργικό μετεωρολογικό σταθμό Arduino
PostCSS: Η νέα ημερομηνία αναπαραγωγής του Sass
PostCSS: Η νέα ημερομηνία αναπαραγωγής του Sass
Cybersecurity: Τι πρέπει να γνωρίζουν κάθε CEO και CFO
Cybersecurity: Τι πρέπει να γνωρίζουν κάθε CEO και CFO
AI Investment Primer: Laying the Groundwork (Μέρος I)
AI Investment Primer: Laying the Groundwork (Μέρος I)
Μετεγκαταστήστε τα δεδομένα παλαιού τύπου χωρίς να τα ανακαλύψετε
Μετεγκαταστήστε τα δεδομένα παλαιού τύπου χωρίς να τα ανακαλύψετε
 
Είναι επικερδείς οι προσπάθειες εταιρικής ευθύνης;
Είναι επικερδείς οι προσπάθειες εταιρικής ευθύνης;
Επιχειρηματικός αναλυτής - Επιχειρηματική ευφυΐα & Analytics
Επιχειρηματικός αναλυτής - Επιχειρηματική ευφυΐα & Analytics
4 Go Κριτικοί Γλωσσών
4 Go Κριτικοί Γλωσσών
Ανακοίνωση σχεδιαστών ApeeScape
Ανακοίνωση σχεδιαστών ApeeScape
Πώς να επιλέξετε το καλύτερο πλαίσιο Front-End
Πώς να επιλέξετε το καλύτερο πλαίσιο Front-End
Δημοφιλείς Αναρτήσεις
  • πώς να φτιάξετε ένα discord chat bot
  • επέκταση αρχείου c++
  • χρησιμοποιώντας το github για να φιλοξενήσει έναν ιστότοπο
  • ανάλυση συναισθήματος του twitter δεδομένων python
  • αγοραστική δύναμη και ισχύς προμηθευτή
Κατηγορίες
  • Άνοδος Του Απομακρυσμένου
  • Κύκλος Ζωής Προϊόντος
  • Διεπαφή Ιστού
  • Εργαλεία Και Σεμινάρια
  • © 2022 | Ολα Τα Δικαιώματα Διατηρούνται

    portaldacalheta.pt