Samouczek dotyczący strumieni Node js: Filestream, Pipes

Spisie treści:

Anonim

W tym samouczku dowiesz się

  • Filestream w Node.js.
  • Rury w Node.js.
  • Wydarzenia w Node.js.
  • Emitowanie zdarzeń

Filestream w Node.js.

Węzeł szeroko wykorzystuje strumienie jako mechanizm przesyłania danych.

Na przykład, kiedy wyprowadzasz cokolwiek do konsoli za pomocą funkcji console.log, w rzeczywistości używasz strumienia do wysyłania danych do konsoli.

Node.js ma również możliwość przesyłania strumieniowego danych z plików, aby można je było odpowiednio odczytywać i zapisywać. Przyjrzymy się teraz przykładowi, w jaki sposób możemy używać strumieni do odczytu i zapisu z plików. W tym przykładzie musimy wykonać poniższe kroki

Krok 1) Utwórz plik o nazwie data.txt zawierający poniższe dane. Załóżmy, że ten plik jest przechowywany na dysku D naszego lokalnego komputera.

Samouczek dotyczący Node.js.

Wprowadzenie

Wydarzenia

Generatory

Łączność danych

Korzystanie z Jasmine

Krok 2) Napisz odpowiedni kod, który będzie wykorzystywał strumienie do odczytu danych z pliku.

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

Objaśnienie kodu: -

  1. Najpierw musimy dołączyć moduły „fs”, które zawierają wszystkie funkcje wymagane do tworzenia strumieni.
  2. Następnie tworzymy czytelny strumień za pomocą metody - createReadStream. Jako dane wejściowe podajemy lokalizację naszego pliku data.txt.
  3. Funkcja steam.on jest funkcją obsługi zdarzeń iw niej określamy pierwszy parametr jako „dane”. Oznacza to, że ilekroć w strumieniu pojawiają się dane z pliku, należy wykonać funkcję zwrotną. W naszym przypadku definiujemy funkcję zwrotną, która wykona 2 podstawowe kroki. Pierwszym jest konwersja danych odczytanych z pliku na ciąg. Drugim byłoby wysłanie przekonwertowanego ciągu jako danych wyjściowych do konsoli.
  4. Bierzemy każdy fragment danych, który jest odczytywany ze strumienia danych i konwertujemy go na ciąg.
  5. Na koniec wysyłamy dane wyjściowe każdego przekonwertowanego fragmentu łańcucha do konsoli.

Wynik:

  • Jeśli kod zostanie wykonany poprawnie, zobaczysz powyższe dane wyjściowe w konsoli. Te dane wyjściowe będą takie same, jak w pliku data.txt.

Zapisywanie do pliku

W ten sam sposób, w jaki tworzymy strumień odczytu, możemy również utworzyć strumień zapisu, aby zapisać dane do pliku. Najpierw utwórzmy pusty plik bez zawartości o nazwie data.txt. Załóżmy, że ten plik znajduje się na dysku D naszego komputera.

Poniższy kod pokazuje, jak możemy zapisać dane do pliku.

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")

Objaśnienie kodu: -

  1. Tworzymy zapisywalny strumień za pomocą metody - createWriteStream. Jako dane wejściowe podajemy lokalizację naszego pliku data.txt.
  2. Następnie użyliśmy metody stream.write, aby zapisać różne wiersze tekstu w naszym pliku tekstowym. Strumień zajmie się zapisaniem tych danych do pliku data.txt.

Jeśli otworzysz plik data.txt, zobaczysz teraz następujące dane w pliku

Samouczek dotyczący Node.js.

Wprowadzenie

Wydarzenia

Generatory

Łączność danych

Korzystanie z Jasmine

Rury w Node.js.

W aplikacjach Node strumienie mogą być przesyłane razem potokiem za pomocą metody pipe (), która przyjmuje dwa argumenty:

  • Wymagany strumień z możliwością zapisu, który działa jako miejsce docelowe dla danych i
  • Opcjonalny obiekt używany do przekazywania opcji.

Typowy przykład użycia potoków, jeśli chcesz przesłać dane z jednego pliku do drugiego.

Zobaczmy więc przykład, jak możemy przesyłać dane z jednego pliku do drugiego za pomocą potoków.

Krok 1) Utwórz plik o nazwie datainput.txt zawierający poniższe dane. Załóżmy, że ten plik jest przechowywany na dysku D naszego lokalnego komputera.

Samouczek dotyczący Node.js.

Wprowadzenie

Wydarzenia

Generatory

Łączność danych

Korzystanie z Jasmine

Krok 2) Utwórz pusty, pusty plik o nazwie dataOutput.txt i umieść go na dysku D komputera lokalnego.

Krok 3) Napisz poniższy kod, aby przeprowadzić transfer danych z pliku datainput.txt do pliku dataOutput.txt.

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

Objaśnienie kodu: -

  1. Najpierw tworzymy „strumień odczytu” do naszego pliku datainput.txt, który zawiera wszystkie nasze dane, które muszą zostać przeniesione do nowego pliku.
  2. Następnie musimy utworzyć „writestream” do naszego pliku dataOutput.txt, który jest naszym pustym plikiem i jest miejscem docelowym przesyłania danych z pliku datainput.txt.
  3. Następnie używamy polecenia potok, aby przesłać dane ze strumienia odczytu do strumienia zapisu. Polecenie potoku pobierze wszystkie dane, które napływają do strumienia odczytu i przekaże je do strumienia zapisu.

Jeśli teraz otworzysz plik dataOutput.txt, zobaczysz wszystkie dane, które były obecne w pliku datainput.txt.

Wydarzenia w Node.js.

Zdarzenia są jednym z kluczowych pojęć w Node.js, a czasami Node.js jest określany jako struktura sterowana zdarzeniami.

Zasadniczo zdarzenie to coś, co się wydarza. Na przykład, jeśli zostanie nawiązane połączenie z bazą danych, wyzwalane jest zdarzenie połączenia z bazą danych. Programowanie sterowane zdarzeniami polega na tworzeniu funkcji, które będą wyzwalane po wyzwoleniu określonych zdarzeń.

Spójrzmy na podstawowy przykład definiowania zdarzenia w Node.js.

Utworzymy zdarzenie o nazwie „data_received”. Po wywołaniu tego zdarzenia do konsoli zostanie wysłany tekst „dane odebrane”.

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

Objaśnienie kodu: -

  1. Użyj funkcji require, aby dołączyć moduł „zdarzenia”. Dzięki temu modułowi będziesz mógł tworzyć wydarzenia w Node.js.
  2. Utwórz nowy emiter wydarzeń. Służy to do powiązania zdarzenia, które w naszym przypadku jest „data_received”, z funkcją wywołania zwrotnego zdefiniowaną w kroku 3.
  3. Definiujemy funkcję sterowaną zdarzeniami, która mówi, że w przypadku wyzwolenia zdarzenia „data_received” powinniśmy wyprowadzić tekst „data_received” do konsoli.
  4. Wreszcie mamy ręczne wyzwalanie naszego zdarzenia za pomocą funkcji eventEmiter.emit. Spowoduje to wywołanie zdarzenia data_received.

Po uruchomieniu programu tekst „dane odebrane” zostanie wysłany do konsoli, jak pokazano poniżej.

Emitowanie zdarzeń

Podczas definiowania zdarzeń istnieją różne metody wywoływania zdarzeń. Ten temat skupia się na szczegółowym przyjrzeniu się każdemu z nich.

  1. Programy obsługi zdarzeń jednorazowych

Czasami możesz chcieć zareagować na zdarzenie tylko przy jego pierwszym wystąpieniu. W takich sytuacjach możesz użyć metody Once ().

Zobaczmy, jak możemy wykorzystać metodę Once do obsługi zdarzeń.

Objaśnienie kodu: -

  1. Tutaj używamy metody „Once”, aby powiedzieć, że dla zdarzenia „data_received” funkcja zwrotna powinna być wykonana tylko raz.
  2. Tutaj ręcznie uruchamiamy zdarzenie „data_received”.
  3. Gdy zdarzenie „data_received” zostanie ponownie wywołane, tym razem nic się nie stanie. Wynika to z pierwszego kroku, w którym powiedzieliśmy, że zdarzenie może zostać wywołane tylko raz.

Jeśli kod zostanie wykonany poprawnie, dane wyjściowe w dzienniku będą miały postać „data_received powiodło się”. Ten komunikat pojawi się tylko raz w konsoli.

  1. Inspekcja detektorów zdarzeń

W dowolnym momencie swojego istnienia emiter zdarzeń może mieć dołączonych zero lub więcej detektorów. Odbiorniki każdego typu zdarzenia można sprawdzić na kilka sposobów.

Jeśli interesuje Cię tylko określenie liczby dołączonych detektorów, nie szukaj dalej niż metoda EventEmitter.listenerCount ().

( Uwaga: słuchacze są ważne, ponieważ główny program powinien wiedzieć, czy słuchacze są dodawani w locie do zdarzenia, w przeciwnym razie program będzie działał nieprawidłowo, ponieważ zostaną wywołani dodatkowi słuchacze).

Objaśnienie kodu: -

  1. Definiujemy typ eventEmitter, który jest wymagany do korzystania z metod związanych ze zdarzeniami.
  2. Następnie definiujemy obiekt o nazwie emiter, który zostanie użyty do zdefiniowania naszych programów obsługi zdarzeń.
  3. Tworzymy 2 programy obsługi zdarzeń, które w zasadzie nic nie robią. W naszym przykładzie jest to proste, aby pokazać, jak działa metoda listenerCount.
  4. Teraz, gdy wywołasz metodę listenerCount dla naszego zdarzenia data_received, wyśle ​​ona liczbę detektorów zdarzeń dołączonych do tego zdarzenia w dzienniku konsoli.

Jeśli kod zostanie wykonany poprawnie, w dzienniku konsoli zostanie wyświetlona wartość 2.

  1. Zdarzenie newListener

Za każdym razem, gdy rejestrowana jest nowa procedura obsługi zdarzenia, emiter zdarzenia emituje zdarzenie newListener. To zdarzenie służy do wykrywania nowych programów obsługi zdarzeń. Zwykle używa się zdarzenia newListener, gdy trzeba przydzielić zasoby lub wykonać jakąś akcję dla każdego nowego programu obsługi zdarzeń.

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() {});

Objaśnienie kodu: -

  1. Tworzymy nową procedurę obsługi zdarzenia dla zdarzenia „newListener”. Dlatego za każdym razem, gdy rejestrowany jest nowy program obsługi zdarzeń, w konsoli zostanie wyświetlony tekst „Dodano nasłuchiwanie dla” + nazwa zdarzenia.
  2. Tutaj piszemy do konsoli tekst „Dodano nasłuchiwanie dla” + nazwa zdarzenia dla każdego zarejestrowanego zdarzenia.
  3. Definiujemy 2 programy obsługi zdarzeń dla naszego zdarzenia „data_received”.

Jeśli powyższy kod zostanie wykonany poprawnie, w konsoli zostanie wyświetlony poniższy tekst. Pokazuje tylko, że procedura obsługi zdarzenia „newListener” została wyzwolona dwukrotnie.

Dodano nasłuchiwanie zdarzeń data_received

Dodano nasłuchiwanie zdarzeń data_received

Podsumowanie

  • Strumienie są używane w Node.js do odczytu i zapisu danych z urządzeń wejścia-wyjścia. Node.js wykorzystuje bibliotekę „fs” do tworzenia czytelnych i zapisywalnych strumieni do plików. Te strumienie mogą służyć do odczytywania i zapisywania danych z plików.
  • Rury mogą służyć do łączenia ze sobą wielu strumieni. Jednym z najczęstszych przykładów jest wspólne potokowanie strumienia odczytu i zapisu w celu przesłania danych z jednego pliku do drugiego.
  • Node.js jest często oznaczany jako framework sterowany zdarzeniami i bardzo łatwo jest zdefiniować zdarzenia w Node.js. Można zdefiniować funkcje, które reagują na te zdarzenia.
  • Zdarzenia ujawniają również metody reagowania na kluczowe zdarzenia. Na przykład widzieliśmy procedurę obsługi zdarzenia Once (), której można użyć do upewnienia się, że funkcja wywołania zwrotnego jest wykonywana tylko raz po wyzwoleniu zdarzenia.