Προγραμματισμός

Ο πλήρης οδηγός για τα πλαίσια Node.js

Το Node.js είναι ένας χρόνος εκτέλεσης JavaScript, χτισμένος στη μηχανή V8 JavaScript του Chrome, κατάλληλος για την εφαρμογή εφαρμογών επιτραπέζιου υπολογιστή και διακομιστή. Το Node.js χρησιμοποιεί ένα μοντέλο I / O χωρίς αποκλεισμούς βάσει συμβάντων που το καθιστά ελαφρύ και αποδοτικό σε σύγκριση με τους διακομιστές με σπείρωμα, όπως Apache, IIS και τον τυπικό διακομιστή Java.

Ενώ εσείς μπορώ εφαρμόστε έναν διακομιστή ιστού ή μια εφαρμογή εξ ολοκλήρου σε απλό κώδικα Node.js, ένα πλαίσιο μπορεί να μειώσει σημαντικά την ποσότητα του κώδικα που πρέπει να γράψετε. Σε αυτόν τον οδηγό, εξετάζουμε το εύρος των πλαισίων που διατίθενται στον προγραμματιστή Node.js.

Ξεκινάμε με μινιμαλιστικά πλαίσια που μοιάζουν με Sinatra όπως το Express, μεταβαίνουμε σε πιο δημοφιλή πλαίσια τύπου Rails όπως το Sails.js, και στη συνέχεια σε πλαίσια πλήρους στοίβας με σκαλωσιές και βιβλιοθήκες επιμονής όπως το Meteor. Τέλος, καλύπτουμε REST API πλαίσια όπως το LoopBack και μερικές «άλλες» βιβλιοθήκες για σκοπούς που δεν εμπίπτουν στις κύριες κατηγορίες μας (όπως ORM, IoT και δημιουργία στατικών ιστότοπων).

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

Σημειώστε ότι υπάρχουν περισσότερα έργα Node.js MVC από όσα έχω αναφέρει εδώ. Σε ορισμένες περιπτώσεις απέκλεισα έργα που δεν είναι πλέον ενεργά. Σε άλλους, κατάργησα τα πλαίσια που ποτέ δεν προσέλκυσαν σημαντικό ενδιαφέρον προγραμματιστή παρά τη συνεχή δραστηριότητα. Ο στόχος μου δεν είναι να σας πω για κάθε πιθανό έργο, αλλά να σας βοηθήσω να εντοπίσετε έργα που μπορεί να αξίζουν τον χρόνο αξιολόγησής σας.

Πλαίσια MVC για Node.js

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

Το Rails είναι ένα πλήρες χαρακτηριστικό, "με γνώμονα" MVC διαδικτυακό πλαίσιο που δημιουργήθηκε το 2004 από τον David Heinemeier Hansson (γνωστό και ως DHH) για να δώσει στον Ruby έναν τρόπο να δημιουργήσει μια παρουσία στο Διαδίκτυο. Το Rails υποθέτει ότι χρησιμοποιείτε μια βάση δεδομένων, τιμολογεί τη συνθήκη για τη διαμόρφωση και κλιμακώνει καλά. Τα Rails-όπως Node.js MVC πλαίσια είναι αυτά που είναι πλήρως εξοπλισμένα.

Το Sinatra είναι ένα γυμνό βασικό, λιγότερο διαδεδομένο πλαίσιο διαδικτύου MVC που δημιουργήθηκε το 2007 από τον Blake Mizerany και διατηρείται επί του παρόντος από τον Konstantin Haase. Η Sinatra υιοθέτησε την αντίθετη προσέγγιση του Rails στο ότι έχει μόνο αυτό που χρειάζεστε για μια εφαρμογή ιστού, βασικά διαδρομές για να τοποθετήσετε την εφαρμογή σας στον Ιστό με DSL (γλώσσα συγκεκριμένου τομέα) πάνω από ένα επίπεδο "rack". Το Rack είναι ένα επίπεδο αφαίρεσης που βασίζεται στο Node.js EventEmitterκαι παρέχει έναν απλό τρόπο αντιμετώπισης της υποστήριξης συμπλέγματος.

Τα πλαίσια Node.js MVC που μοιάζουν με Sinatra είναι αυτά που ξεκινούν απλά και σας επιτρέπουν να προσθέσετε στοιχεία όπως απαιτείται. Πολλά από τα πλαίσια Node.js του Sinatra MVC, στην πραγματικότητα, έχουν σημασία για τη διαμόρφωση, επομένως η γραμμή μεταξύ αυτών και των πλαισίων τύπου Rails δεν είναι πάντα ξεκάθαρη.

Σχετικό βίντεο: Συμβουλές και κόλπα Node.js

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

Πλαίσια MVC που μοιάζουν με Sinatra για το Node.js

Διατροφή

Η διατροφή χρεώνεται ως ένα μικροσκοπικό, αρθρωτό πλαίσιο ιστού Node.js που είναι καλό για τη δημιουργία γρήγορων, επεκτάσιμων εφαρμογών και API. Ένας βασικός διακομιστής διατροφής μοιάζει πολύ με έναν βασικό διακομιστή Express:

// Δημιουργήστε μια εφαρμογή

var server = απαιτείται («δίαιτα»)

var app = διακομιστής ()

app.listen (‘// localhost: 8000’)

// Όταν // localhost: 8000 / ζητηθεί, απαντήστε με το "Hello World!"

app.get (‘/’, συνάρτηση ($) {

$ .end («Γεια σας Κόσμος!»)

  })

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

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

// Καταχωρίστε συναρτήσεις μεσαίου λογισμικού για τη διαδρομή μεταφόρτωσης

app.post (‘/ upload / picture’, μεταφόρτωση, περικοπή, αποθήκευση, ολοκλήρωση)

Το Node.js από προεπιλογή έχει δύο ορίσματα, αίτηση και απάντηση, κατά τη δημιουργία ενός διακομιστή HTTP με χρήση http.createServer (). Η διατροφή συνδυάζει αυτά τα δύο αντικείμενα σε ένα μόνο αντικείμενο που αντιπροσωπεύεται από ένα σύμβολο δολαρίου $. Μπορείτε να δείτε στο app.get () δείγμα παραπάνω ότι το αντικείμενο σήματος είναι το επιχείρημα για τη συνάρτηση που χειρίζεται παίρνω αιτήματα στη διαδρομή ρίζας. Η διατροφή υποστηρίζει επίσης λειτουργικές μονάδες Node.js και μπορεί να τις χρησιμοποιήσει ως ενδιάμεσο λογισμικό, όπως φαίνεται στο app.post () παραπάνω παράδειγμα.

Εξπρές

Το Express είναι ένα ελάχιστο και ευέλικτο πλαίσιο εφαρμογών ιστού Node.js, που παρέχει ένα ισχυρό σύνολο δυνατοτήτων για τη δημιουργία μονών, πολλών σελίδων και υβριδικών εφαρμογών ιστού. Το Express API ασχολείται με την εφαρμογή ιστού, αιτήματα και απαντήσεις HTTP, τη δρομολόγηση και το μεσαίο λογισμικό. Από το Express 4.x, το υποστηριζόμενο ενδιάμεσο λογισμικό για Express βρίσκεται σε έναν αριθμό ξεχωριστών αποθετηρίων, που αναφέρονται στο Connect repo.

Έχουν εμφανιστεί αρκετά πιρούνια και πρόσθετα για Express, όπως Locomotive, Hapi και Koa. Το Koa δημιουργήθηκε από έναν από τους κύριους συνεργάτες της Express.

Παρόλο που το Express είναι παλαιότερο και έχει μεγαλύτερο αποτύπωμα σε σύγκριση με τα ίχνη του, εξακολουθεί να έχει μεγαλύτερη κοινότητα και μεγαλύτερη σταθερότητα από οποιοδήποτε από αυτά. Βλέπω συνεχώς το Express ενσωματωμένο σε άλλα πλαίσια και εργαλεία χωρίς σχόλιο, σαν να ήταν η μόνη πιθανή επιλογή για τη δημιουργία διακομιστή Ιστού στο Node.js.

// δημιουργήστε μια γρήγορη εφαρμογή

const express = απαιτείται («express»)

const app = express ()

app.get (‘/‘, function (req, res) {

res.send («Γεια σου κόσμος!»)

})

app.listen (3000, λειτουργία () {

console.log («Παράδειγμα εφαρμογής ακρόασης στη θύρα 3000!)

})

Ο Φλατύρων

Το Flatiron είναι μέρος της σουίτας εργαλείων Nodejitsu Node. Οι συγγραφείς θεωρούν το Flatiron δύο πράγματα: Πρώτον, μια πρωτοβουλία για τη δημιουργία μιας συλλογής αποσυνδεδεμένων εργαλείων με υψηλό επίπεδο ποιότητας και απόδοσης. Και δεύτερον, ένα πλαίσιο ανάπτυξης εφαρμογών ιστού πλήρους στοίβας που συσκευάζει αυτά τα εργαλεία μαζί για να διευκολύνει την ανάπτυξη εφαρμογών ισόμορφων και βασισμένων σε ροή.

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

Άλλα κομμάτια της σουίτας συμπληρώνουν τη λειτουργικότητα του flatiron. Για παράδειγμα, το Broadway εκθέτει ένα απλό API "plugin", αντικαθιστώντας την αντιστροφή της εγγραφής ελέγχου που χρησιμοποιείται από άλλα πλαίσια Node MVC. Το Union είναι ένας πυρήνας υβριδικού buffered / streaming που είναι συμβατός με το Connect. Το Union είναι το κομμάτι που παρέχει το πρόσθετο http.

// δημιουργήστε μια εφαρμογή flatiron

var flatiron = απαιτείται («flatiron»),

app = flatiron.app;

app.use (flatiron.plugins.http);

app.router.get (‘/‘, function () {

this.res.writeHead (200, {«Τύπος περιεχομένου»: «κείμενο / απλό»});

this.res.end («Γεια σου κόσμος! \ n»);

});

app.start (8080);

Χάπι

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

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

// δημιουργήστε έναν διακομιστή hapi

var Hapi = απαιτείται («hapi»);

διακομιστής var = νέο Hapi.Server (3000);

server.route ([

  {

μέθοδος: «GET»,

διαδρομή: ‘/ api / items’,

χειριστής: λειτουργία (αίτημα, απάντηση) {

απάντηση ("Λήψη αναγνωριστικού στοιχείου") ·

    }

  },

  {

μέθοδος: «GET»,

διαδρομή: ‘/ api / items / {id}’,

χειριστής: λειτουργία (αίτημα, απάντηση) {

απάντηση ("Λήψη αναγνωριστικού στοιχείου:" + request.params.id);

    }

  },

Κόα

Το Koa είναι ένα νεότερο πλαίσιο ιστού που σχεδιάστηκε από την ομάδα πίσω από το Express, αλλά ανεξάρτητα από τον κωδικό Express. Το Koa στοχεύει να είναι ένα μικρότερο, πιο εκφραστικό και πιο ισχυρό θεμέλιο για εφαρμογές Ιστού και API. Η Koa χρησιμοποιεί γεννήτριες ES6 για μεσαίο λογισμικό αντί για επιστροφές κλήσεων Node.js. Το παρακάτω είναι μια εφαρμογή «Γεια, Κόσμος» χρησιμοποιώντας μια γεννήτρια, η οποία κάνει ένα απόδοση μετά για να περάσετε τον έλεγχο στην επόμενη γεννήτρια:

var koa = απαιτείται («koa»);

var app = koa ();

// Χ-χρόνος απόκρισης

app.use (λειτουργία * (επόμενο) {

var start = νέο Ημερομηνία;

απόδοση μετά?

var ms = νέο Ημερομηνία - έναρξη;

this.set («Χ-Χρόνος απόκρισης», ms + «ms»);

});

// απάντηση

app.use (συνάρτηση * () {

this.body = "Γεια σας Κόσμος";

});

app.listen (3000);

Υπάρχει μια διαφορά μεταξύ των γεννητριών μεσαίου λογισμικού όπως χρησιμοποιείται από την Koa και των επιστροφών κλήσεων όπως χρησιμοποιούνται από τις Express και Connect. Η υλοποίηση του Connect απλώς περνά τον έλεγχο μέσω σειράς λειτουργιών έως ότου επιστρέψει κάποιος, ενώ ο Koa αποδίδει "downstream" και έπειτα ο έλεγχος ρέει πίσω "upstream".

Στο παραπάνω παράδειγμα, ο χρόνος απόκρισης x «τυλίγει» τη γεννήτρια απόκρισης, με το απόδοση μετά δήλωση που σηματοδοτεί την κλήση. Η απόδοση είναι πιο ευέλικτη από τις ρητές λειτουργίες, καθώς διευκολύνει την εισαγωγή μιας άλλης γεννήτριας στην ακολουθία, για παράδειγμα ένας καταγραφέας ιστού μεταξύ του χρονοδιακόπτη και της απόκρισης.

Κινητήριος

Το Locomotive είναι ένα διαδικτυακό πλαίσιο για το Node.js που υποστηρίζει μοτίβα MVC, διαδρομές RESTful και ρυθμίσεις σχετικά με τη διαμόρφωση (όπως Rails), ενώ ενσωματώνεται απρόσκοπτα σε οποιαδήποτε μηχανή βάσης δεδομένων και προτύπου. Η ατμομηχανή βασίζεται στο Express και το Connect.

Η ατμομηχανή προσθέτει στο Express μερικοί Δομή τύπου Ruby-on-Rails, την οποία μπορείτε να δείτε στην παρακάτω εικόνα. Οι προβολές ατμομηχανής είναι συχνά ενσωματωμένα αρχεία JavaScript (html.ejs), όπως φαίνεται εδώ, αλλά η Locomotive υποστηρίζει επίσης το Jade και τους άλλους συμβατούς κινητήρες προτύπων για το Express. Η λειτουργικότητα REST ελέγχεται από διαδρομές, όπως συμβαίνει συνήθως στους διακομιστές που βασίζονται σε Express. Μπορείτε να χρησιμοποιήσετε όποια βάση δεδομένων και επίπεδο ORM θέλετε με το Locomotive. Ο οδηγός δείχνει τη χρήση του MongoDB με το Mongoose, καθώς και τη χρήση του Passport για έλεγχο ταυτότητας χρήστη.

Σύνολο.js

Το Total.js είναι ένα πλήρες πλαίσιο διακομιστή για το Node.js, γραμμένο σε καθαρή JavaScript, παρόμοιο με το Laravel της PHP ή το Django της Python. Η πλατφόρμα Total.js είναι μια συλλογή βιβλιοθηκών, πακέτων και ολοκληρωμένων προϊόντων που έχουν κατασκευαστεί με το Total.js.

Το Total.js μοιάζει περισσότερο με το Sinatra από το Rails, καθώς είναι αρθρωτό και επειδή είναι αγνωστικό για IDE, βάσεις δεδομένων και πλαίσια πελάτη. Ένας ελάχιστος διακομιστής ιστού Total.js μπορεί να υλοποιηθεί με τον ακόλουθο κώδικα:

απαιτούν («total.js») ·

F.route (‘/’, συνάρτηση () {

this.plain («total.js είναι πραγματικά καλό!»)

});

F.http («εντοπισμός σφαλμάτων»)

Σχετικό βίντεο: Συμβουλές και κόλπα Node.js

Πλαίσια MVC που μοιάζουν με ράγες για το Node.js

Αστεροειδής αδώνης

Το Adonis είναι ένα πλαίσιο MVC για το Node.js που βασίζεται σε πρακτικές περιπτώσεις χρήσης. Υποστηρίζει την εξάρτηση έγχυσης και διαθέτει ένα άπαχο δοχείο IoC (αντιστροφή ελέγχου) για να σας βοηθήσει να επιλύσετε και να ψεύξετε τις εξαρτήσεις. Το Adonis παρέχει ένα εργαλείο CLI για ικριώματα και δημιουργία έργου με όλες τις απαιτούμενες εξαρτήσεις.

Μεταξύ των χαρακτηριστικών του Adonis είναι η εφαρμογή ORM (Lucid) και η ενεργή σχεδίαση του δίσκου. ένα επίπεδο ελέγχου ταυτότητας σε συνδυασμό με συνεδρίες, JWT, βασικό έλεγχο ταυτότητας και προσωπικά διακριτικά API. και μια εφαρμογή ελεγκτών ως κλάσεις ES2015. Οι γεννήτριες ES2015 εξαλείφουν τις ακατάστατες επιστροφές που είναι κοινές σε παλαιότερα JavaScript. Ο ακόλουθος κώδικας ανακτά όλους τους χρήστες από τη βάση δεδομένων και τους επιστρέφει ως JSON:

const Route = χρήση (‘Route’)

const User = χρήση («Εφαρμογή / Μοντέλο / Χρήστη»)

Route.get (‘/’, function * (αίτημα, απόκριση) {

const users = απόδοση User.all ()

Respons.json (χρήστες)

})

CompoundJS

Ο τύπος πίσω από το CompoundJS είναι Express + δομή + επεκτάσεις. Εδώ η δομή είναι η τυπική διάταξη των καταλόγων και οι επεκτάσεις είναι μονάδες Node.js που προσθέτουν λειτουργικότητα στο πλαίσιο. Ο στόχος είναι να παρέχει μια προφανή και καλά οργανωμένη διεπαφή για ανάπτυξη εφαρμογών συμβατών με Express. Αυτό σημαίνει ότι όλα όσα λειτουργούν με το Express θα λειτουργούν με το CompoundJS.

Μπορείτε να δημιουργήσετε εφαρμογές σκελετού CompoundJS από το CLI:

npm εγκατάσταση σύνθετου -g

σύνθετο init todo-list-app

cd todo-list-app && npm εγκατάσταση

κόμβος.

Ο ιστότοπος ακούει στο // localhost: 3000 / από προεπιλογή. Μπορείτε να προσθέσετε ικριώματα με βάση τα μοντέλα με το η ένωση δημιουργεί ικρίωμα εντολή.

Γκέντι

Το πλαίσιο Geddy εφαρμόζει το MVC για το Node.js με τρόπο εξαιρετικά Rails, ακόμη και μέχρι τη δομή του καταλόγου, τη δυνατότητα ανοίγματος μιας κονσόλας REPL στο πλαίσιο της εφαρμογής και ένα σενάριο γεννήτριας που μπορείτε να χρησιμοποιήσετε για τη δημιουργία εφαρμογών, πόρων ικριώματα ή γυμνά μοντέλα και ελεγκτές. Τα ικριώματα μπορούν προαιρετικά να δημιουργήσουν πρότυπα EJS, Jade, Handlebars, Mustache και Swig.

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

Κράκεν

Το Kraken, ένα έργο ανοιχτού κώδικα PayPal, είναι ένα ασφαλές και επεκτάσιμο επίπεδο που επεκτείνει το Express παρέχοντας δομή και σύμβαση, όπως η Locomotive. Αν και το Kraken είναι ο κύριος πυλώνας του πλαισίου του, οι ακόλουθες ενότητες μπορούν επίσης να χρησιμοποιηθούν ανεξάρτητα: Lusca (ασφάλεια), Kappa (NPM Proxy), Makara (LinkedIn Dust.js i18N) και Adaro (LinkedIn Dust.js Templating).