Κόμβος js Streams Tutorial: Filestream, Pipes

Πίνακας περιεχομένων:

Anonim

Σε αυτό το σεμινάριο, θα μάθετε

  • Ροή αρχείων στο Node.js
  • Σωλήνες στο Node.js
  • Εκδηλώσεις στο Node.js
  • Εκπομπές εκδηλώσεων

Ροή αρχείων στο Node.js

Ο κόμβος κάνει εκτεταμένη χρήση ροών ως μηχανισμού μεταφοράς δεδομένων.

Για παράδειγμα, όταν εξάγετε οτιδήποτε στην κονσόλα χρησιμοποιώντας τη λειτουργία console.log, χρησιμοποιείτε πραγματικά μια ροή για να στείλετε τα δεδομένα στην κονσόλα.

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

Βήμα 1) Δημιουργήστε ένα αρχείο που ονομάζεται data.txt το οποίο έχει τα παρακάτω δεδομένα. Ας υποθέσουμε ότι αυτό το αρχείο είναι αποθηκευμένο στη μονάδα δίσκου του τοπικού υπολογιστή μας.

Εκμάθηση στο Node.js

Εισαγωγή

Εκδηλώσεις

Γεννήτριες

Συνδεσιμότητα δεδομένων

Χρησιμοποιώντας γιασεμί

Βήμα 2) Γράψτε τον σχετικό κώδικα που θα κάνει χρήση ροών για την ανάγνωση δεδομένων από το αρχείο.

var fs = require("fs");var stream;stream = fs.createReadStream("D://data.txt");stream.on("data", function(data) {var chunk = data.toString();console.log(chunk);});

Επεξήγηση κώδικα: -

  1. Πρέπει πρώτα να συμπεριλάβουμε τις ενότητες «fs» που περιέχουν όλες τις λειτουργίες που απαιτούνται για τη δημιουργία ροών.
  2. Στη συνέχεια δημιουργούμε μια αναγνώσιμη ροή χρησιμοποιώντας τη μέθοδο - createReadStream. Ως εισαγωγή, δίνουμε τη θέση του αρχείου data.txt.
  3. Η λειτουργία steam.on είναι ένας χειριστής συμβάντων και σε αυτήν, καθορίζουμε την πρώτη παράμετρο ως «δεδομένα». Αυτό σημαίνει ότι όποτε εισέρχονται δεδομένα στη ροή από το αρχείο, εκτελέστε μια λειτουργία επιστροφής κλήσης. Στην περίπτωσή μας, ορίζουμε μια συνάρτηση επανάκλησης που θα πραγματοποιήσει 2 βασικά βήματα. Το πρώτο είναι να μετατρέψετε τα δεδομένα που διαβάζονται από το αρχείο ως συμβολοσειρά. Το δεύτερο θα ήταν να στείλετε τη μετατροπή συμβολοσειρά ως έξοδο στην κονσόλα.
  4. Παίρνουμε κάθε κομμάτι δεδομένων που διαβάζεται από τη ροή δεδομένων και το μετατρέπουμε σε συμβολοσειρά.
  5. Τέλος, στέλνουμε την έξοδο κάθε κομμάτι που έχει μετατραπεί στην κονσόλα.

Παραγωγή:

  • Εάν ο κώδικας εκτελείται σωστά, θα δείτε την παραπάνω έξοδο στην κονσόλα. Αυτή η έξοδος θα είναι η ίδια με αυτήν στο αρχείο data.txt.

Γράφοντας σε ένα αρχείο

Με τον ίδιο τρόπο, που δημιουργούμε μια ροή ανάγνωσης, μπορούμε επίσης να δημιουργήσουμε μια ροή εγγραφής για την εγγραφή δεδομένων σε ένα αρχείο. Ας δημιουργήσουμε πρώτα ένα κενό αρχείο χωρίς περιεχόμενο που ονομάζεται data.txt. Ας υποθέσουμε ότι αυτό το αρχείο έχει τοποθετηθεί στη μονάδα δίσκου D του υπολογιστή μας.

Ο παρακάτω κώδικας δείχνει πώς μπορούμε να γράψουμε δεδομένα στο αρχείο.

var fs = require("fs");var stream;stream = fs.createWriteStream("D://data.txt");stream.write("Tutorial on Node.js")stream.write("Introduction")stream.write("Events")stream.write("Generators")stream.write("Data Connectivity")stream.write("Using Jasmine")

Επεξήγηση κώδικα: -

  1. Δημιουργούμε μια εγγράψιμη ροή χρησιμοποιώντας τη μέθοδο - createWriteStream. Ως εισαγωγή, δίνουμε τη θέση του αρχείου data.txt.
  2. Στη συνέχεια χρησιμοποιήσαμε το stream.write μια μέθοδο για να γράψουμε τις διαφορετικές γραμμές κειμένου στο αρχείο κειμένου μας. Η ροή θα φροντίσει να γράψει αυτά τα δεδομένα στο αρχείο data.txt.

Εάν ανοίξετε το αρχείο data.txt, θα δείτε τώρα τα ακόλουθα δεδομένα στο αρχείο

Εκμάθηση στο Node.js

Εισαγωγή

Εκδηλώσεις

Γεννήτριες

Συνδεσιμότητα δεδομένων

Χρησιμοποιώντας γιασεμί

Σωλήνες στο Node.js

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

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

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

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

Βήμα 1) Δημιουργήστε ένα αρχείο που ονομάζεται datainput.txt το οποίο έχει τα παρακάτω δεδομένα. Ας υποθέσουμε ότι αυτό το αρχείο είναι αποθηκευμένο στη μονάδα δίσκου του τοπικού υπολογιστή μας.

Εκμάθηση στο Node.js

Εισαγωγή

Εκδηλώσεις

Γεννήτριες

Συνδεσιμότητα δεδομένων

Χρησιμοποιώντας γιασεμί

Βήμα 2) Δημιουργήστε ένα κενό κενό αρχείο που ονομάζεται dataOutput.txt και τοποθετήστε το στη μονάδα D του τοπικού υπολογιστή σας.

Βήμα 3) Γράψτε τον παρακάτω κώδικα για να πραγματοποιήσετε τη μεταφορά δεδομένων από το αρχείο datainput.txt στο αρχείο dataOutput.txt.

var fs = require("fs");var readStream = fs.createReadStream("D://datainput.txt");var writeStream = fs.createWriteStream("D://dataOutput.txt");readStream.pipe(writeStream);

Επεξήγηση κώδικα: -

  1. Αρχικά δημιουργούμε ένα "readstream" στο αρχείο datainput.txt που περιέχει όλα τα δεδομένα μας που πρέπει να μεταφερθούν στο νέο αρχείο.
  2. Στη συνέχεια, πρέπει να δημιουργήσουμε ένα "Wrestream" στο αρχείο dataOutput.txt, το οποίο είναι το άδειο αρχείο μας και είναι ο προορισμός για τη μεταφορά δεδομένων από το αρχείο datainput.txt.
  3. Στη συνέχεια, χρησιμοποιούμε την εντολή pip για να μεταφέρουμε τα δεδομένα από τη ροή ανάγνωσης στη ροή εγγραφής. Η εντολή σωλήνων θα λάβει όλα τα δεδομένα που εισέρχονται στο ρεύμα ανάγνωσης και θα τα ωθήσει στην ροή.

Εάν ανοίξετε τώρα το αρχείο dataOutput.txt, θα δείτε όλα τα δεδομένα που υπήρχαν στο αρχείο datainput.txt.

Εκδηλώσεις στο Node.js

Τα συμβάντα είναι μια από τις βασικές έννοιες στο Node.js και μερικές φορές το Node.js αναφέρεται ως πλαίσιο βάσει συμβάντων.

Βασικά, ένα γεγονός είναι κάτι που συμβαίνει. Για παράδειγμα, εάν δημιουργηθεί σύνδεση σε βάση δεδομένων, ενεργοποιείται το συμβάν σύνδεσης βάσης δεδομένων. Ο προγραμματισμός βάσει συμβάντων είναι η δημιουργία συναρτήσεων που θα ενεργοποιούνται όταν ενεργοποιούνται συγκεκριμένα συμβάντα.

Ας δούμε ένα βασικό παράδειγμα καθορισμού ενός συμβάντος στο Node.js.

Πρόκειται να δημιουργήσουμε μια εκδήλωση που ονομάζεται «data_received». Όταν ενεργοποιηθεί αυτό το συμβάν, το κείμενο "λαμβανόμενα δεδομένα" θα σταλεί στην κονσόλα.

var events = require('events');var eventEmitter = new events.EventEmitter();eventEmitter.on('data_received', function() {console.log('data received succesfully.');});eventEmitter.emit('data_received');

Επεξήγηση κώδικα: -

  1. Χρησιμοποιήστε τη συνάρτηση απαιτείται για να συμπεριλάβετε την ενότητα «συμβάντα» Με αυτήν την ενότητα, θα μπορείτε να δημιουργήσετε εκδηλώσεις στο Node.js.
  2. Δημιουργήστε μια νέα εκπομπή εκδηλώσεων. Αυτό χρησιμοποιείται για τη σύνδεση του συμβάντος, το οποίο στην περίπτωσή μας είναι "data_received" σε μια συνάρτηση επανάκλησης που ορίζεται στο βήμα 3
  3. Ορίζουμε μια συνάρτηση βάσει συμβάντων που λέει ότι εάν σε περίπτωση που ενεργοποιηθεί το συμβάν "data_received" τότε θα πρέπει να εξάγουμε το κείμενο "data_received" στην κονσόλα.
  4. Τέλος, έχουμε μια μη αυτόματη ενεργοποίηση της εκδήλωσής μας χρησιμοποιώντας τη συνάρτηση eventEmiter.emit. Αυτό θα ενεργοποιήσει το συμβάν data_received.

Όταν εκτελείται το πρόγραμμα, το κείμενο "λαμβανόμενα δεδομένα" θα σταλεί στην κονσόλα όπως φαίνεται παρακάτω.

Εκπομπές εκδηλώσεων

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

  1. Χειριστές εκδηλώσεων μία φορά

Μερικές φορές μπορεί να σας ενδιαφέρει να αντιδράσετε σε ένα συμβάν μόνο την πρώτη φορά που συμβαίνει. Σε αυτές τις περιπτώσεις, μπορείτε να χρησιμοποιήσετε τη μέθοδο μία φορά ().

Ας δούμε πώς μπορούμε να χρησιμοποιήσουμε τη μέθοδο μία φορά για τους χειριστές συμβάντων.

Επεξήγηση κώδικα: -

  1. Εδώ χρησιμοποιούμε τη μέθοδο «μία φορά» για να πούμε ότι για το συμβάν «data_received», η συνάρτηση επανάκλησης θα πρέπει να εκτελείται μόνο μία φορά.
  2. Εδώ ενεργοποιούμε μη αυτόματα το συμβάν «data_received».
  3. Όταν το συμβάν «data_received» ενεργοποιηθεί ξανά, αυτή τη φορά, τίποτα δεν θα συμβεί. Αυτό οφείλεται στο πρώτο βήμα όπου είπαμε ότι η εκδήλωση θα μπορούσε να ενεργοποιηθεί μόνο μία φορά.

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

  1. Επιθεώρηση ακροατών συμβάντων

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

Εάν ενδιαφέρεστε να προσδιορίσετε μόνο τον αριθμό των συνημμένων ακροατών, τότε μην ψάχνετε περισσότερο από τη μέθοδο EventEmitter.listenerCount ().

( Σημείωση: Οι ακροατές είναι σημαντικοί επειδή το κύριο πρόγραμμα πρέπει να γνωρίζει εάν οι ακροατές προστίθενται εν πτήσει σε μια εκδήλωση, αλλιώς το πρόγραμμα θα δυσλειτουργεί επειδή θα κληθούν επιπλέον ακροατές.)

Επεξήγηση κώδικα: -

  1. Ορίζουμε έναν τύπο eventEmitter που απαιτείται για τη χρήση μεθόδων που σχετίζονται με το συμβάν.
  2. Στη συνέχεια, ορίζουμε ένα αντικείμενο που ονομάζεται emitter και θα χρησιμοποιηθεί για τον καθορισμό των χειριστών συμβάντων
  3. Δημιουργούμε 2 χειριστές εκδηλώσεων που ουσιαστικά δεν κάνουν τίποτα. Αυτό διατηρείται απλό για το παράδειγμά μας, απλώς για να δείξει πώς λειτουργεί η μέθοδος listenerCount.
  4. Τώρα όταν καλείτε τη μέθοδο listenerCount στο συμβάν δεδομένων_αποκτήθηκε, θα στείλει τον αριθμό των ακροατών συμβάντων που είναι συνδεδεμένοι σε αυτό το συμβάν στο αρχείο καταγραφής της κονσόλας.

Εάν ο κωδικός εκτελείται σωστά, η τιμή 2 θα εμφανίζεται στο αρχείο καταγραφής της κονσόλας.

  1. Το νέοListener Event

Κάθε φορά που εγγράφεται ένας νέος χειριστής συμβάντων, ο εκδότης συμβάντων εκπέμπει ένα νέο συμβάνListener. Αυτό το συμβάν χρησιμοποιείται για τον εντοπισμό νέων χειριστών συμβάντων. Συνήθως χρησιμοποιείτε το συμβάν newListener όταν πρέπει να διαθέσετε πόρους ή να εκτελέσετε κάποια ενέργεια για κάθε νέο χειριστή συμβάντων.

var events = require('events');var eventEmitter = events.EventEmitter;var emitter = new eventEmitter();emitter.on("newListener", function(eventName, listener) {console.log("Added listener for " + eventName + " events");});emitter.on('data_received', function() {});emitter.on('data_received', function() {});

Επεξήγηση κώδικα: -

  1. Δημιουργούμε ένα νέο πρόγραμμα χειρισμού εκδηλώσεων για την εκδήλωση «newListener». Έτσι, κάθε φορά που εγγράφεται ένας νέος χειριστής συμβάντων, το κείμενο "Προσθήκη ακροατή για" + το όνομα συμβάντος θα εμφανίζεται στην κονσόλα.
  2. Εδώ γράφουμε στην κονσόλα το κείμενο "Προστέθηκε ακροατής για" + το όνομα του συμβάντος για κάθε καταχωρημένο συμβάν.
  3. Ορίζουμε 2 χειριστές συμβάντων για την εκδήλωσή μας «data_received».

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

Προστέθηκε ακροατής για συμβάντα_εκλαμβανόμενων δεδομένων

Προστέθηκε ακροατής για συμβάντα_εκλαμβανόμενων δεδομένων

Περίληψη

  • Οι ροές χρησιμοποιούνται στο Node.js για ανάγνωση και εγγραφή δεδομένων από συσκευές εισόδου-εξόδου. Το Node.js χρησιμοποιεί τη βιβλιοθήκη 'fs' για να δημιουργήσει ευανάγνωστες και εγγράψιμες ροές σε αρχεία. Αυτές οι ροές μπορούν να χρησιμοποιηθούν για την ανάγνωση και εγγραφή δεδομένων από αρχεία.
  • Οι σωλήνες μπορούν να χρησιμοποιηθούν για τη σύνδεση πολλαπλών ροών μεταξύ τους. Ένα από τα πιο συνηθισμένα παραδείγματα είναι η σύνδεση της ροής ανάγνωσης και εγγραφής για τη μεταφορά δεδομένων από το ένα αρχείο στο άλλο.
  • Το Node.js επισημαίνεται συχνά ως πλαίσιο βάσει συμβάντων και είναι πολύ εύκολο να ορίσετε συμβάντα στο Node.js. Μπορούν να οριστούν συναρτήσεις που ανταποκρίνονται σε αυτά τα συμβάντα.
  • Οι εκδηλώσεις εκθέτουν επίσης μεθόδους απόκρισης σε βασικά γεγονότα. Για παράδειγμα, έχουμε δει τον χειριστή συμβάντος μία φορά () που μπορεί να χρησιμοποιηθεί για να βεβαιωθούμε ότι η λειτουργία επανάκλησης εκτελείται μόνο μία φορά όταν ενεργοποιείται ένα συμβάν.