Bu eğitimde öğreneceksiniz
- Node.js'de Filestream
- Node.js'deki borular
- Node.js'deki etkinlikler
- Yayan Olaylar
Node.js'de Filestream
Düğüm, veri aktarım mekanizması olarak akışlardan kapsamlı bir şekilde yararlanır.
Örneğin, console.log işlevini kullanarak konsola herhangi bir çıktı verdiğinizde, aslında verileri konsola göndermek için bir akış kullanırsınız.
Node.js ayrıca, uygun şekilde okunup yazılabilmeleri için dosyalardan veri akışı yapma yeteneğine de sahiptir. Şimdi dosyaları okumak ve yazmak için akışları nasıl kullanabileceğimize dair bir örneğe bakacağız. Bu örnek için aşağıda belirtilen adımları izlememiz gerekiyor
Adım 1) Aşağıdaki verileri içeren data.txt adlı bir dosya oluşturun. Bu dosyanın yerel makinemizin D sürücüsünde depolandığını varsayalım.
Node.js ile ilgili eğitim
Giriş
Etkinlikler
Jeneratörler
Veri Bağlantısı
Yasemin Kullanımı
Adım 2) Dosyadan veri okumak için akışlardan yararlanacak ilgili kodu yazın.
var fs = require("fs");var stream;stream = fs.createReadStream("D://data.txt");stream.on("data", function(data) {var chunk = data.toString();console.log(chunk);});
Kod Açıklaması: -
- Öncelikle, akışları oluşturmak için gereken tüm işlevleri içeren 'fs' modüllerini eklememiz gerekir.
- Daha sonra, createReadStream yöntemini kullanarak okunabilir bir akış oluşturuyoruz. Girdi olarak data.txt dosyamızın konumunu veriyoruz.
- Steam.on işlevi bir olay işleyicidir ve içinde ilk parametreyi 'veri' olarak belirledik. Bu, dosyadan akışa veri geldiğinde, bir geri arama işlevi yürüttüğü anlamına gelir. Bizim durumumuzda, 2 temel adımı gerçekleştirecek bir geri arama işlevi tanımlıyoruz. Birincisi, dosyadan okunan veriyi dizge olarak dönüştürmektir. İkincisi, dönüştürülen dizeyi konsola bir çıktı olarak göndermek olacaktır.
- Veri akışından okunan her veri yığınını alıp bir dizeye dönüştürüyoruz.
- Son olarak, dönüştürülen her dizgenin çıktısını konsola gönderiyoruz.
Çıktı:
- Kod düzgün bir şekilde çalıştırılırsa, konsolda yukarıdaki çıktıyı göreceksiniz. Bu çıktı data.txt dosyasındakiyle aynı olacaktır.
Bir dosyaya yazmak
Aynı şekilde, bir okuma akışı oluşturduğumuz gibi, bir dosyaya veri yazmak için bir yazma akışı da oluşturabiliriz. Önce data.txt adında içeriği olmayan boş bir dosya oluşturalım. Bu dosyanın bilgisayarımızın D sürücüsüne yerleştirildiğini varsayalım.
Aşağıdaki kod, dosyaya nasıl veri yazabileceğimizi göstermektedir.
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")
Kod Açıklaması: -
- CreateWriteStream yöntemini kullanarak yazılabilir bir akım oluşturuyoruz. Girdi olarak data.txt dosyamızın konumunu veriyoruz.
- Daha sonra, farklı metin satırlarını metin dosyamıza yazmak için stream.write yöntemini kullandık. Akış, bu verilerin data.txt dosyasına yazılmasıyla ilgilenir.
Data.txt dosyasını açarsanız, artık dosyada aşağıdaki verileri göreceksiniz
Node.js ile ilgili eğitim
Giriş
Etkinlikler
Jeneratörler
Veri Bağlantısı
Yasemin Kullanımı
Node.js'deki borular
Düğüm uygulamalarında akışlar, iki bağımsız değişken alan pipe () yöntemi kullanılarak birbirine bağlanabilir:
- Veriler için hedef olarak hareket eden Gerekli bir yazılabilir akış ve
- Seçenekleri aktarmak için kullanılan isteğe bağlı bir nesne.
Verileri bir dosyadan diğerine aktarmak istiyorsanız, boru kullanmanın tipik bir örneği.
Öyleyse, boruları kullanarak verileri bir dosyadan diğerine nasıl aktarabileceğimizin bir örneğini görelim.
Adım 1) Aşağıdaki verilere sahip olan datainput.txt adlı bir dosya oluşturun. Bu dosyanın yerel makinemizin D sürücüsünde depolandığını varsayalım.
Node.js ile ilgili eğitim
Giriş
Etkinlikler
Jeneratörler
Veri Bağlantısı
Yasemin Kullanımı
Adım 2) dataOutput.txt adlı boş bir boş dosya oluşturun ve bunu yerel makinenizin D sürücüsüne yerleştirin.
Adım 3) datainput.txt dosyasından dataOutput.txt dosyasına veri transferini gerçekleştirmek için aşağıdaki kodu yazın.
var fs = require("fs");var readStream = fs.createReadStream("D://datainput.txt");var writeStream = fs.createWriteStream("D://dataOutput.txt");readStream.pipe(writeStream);
Kod Açıklaması: -
- Önce datainput.txt dosyamıza yeni dosyaya aktarılması gereken tüm verilerimizi içeren bir "okuma akışı" oluşturuyoruz.
- Daha sonra boş dosyamız olan ve datainput.txt dosyasından veri aktarımının hedefi olan dataOutput.txt dosyamıza bir "yazma akışı" oluşturmamız gerekir.
- Daha sonra verileri okuma akışından yazma akışına aktarmak için boru komutunu kullanırız. Boru komutu, okuma akışına gelen tüm verileri alacak ve bunları yazma akışına gönderecektir.
Şimdi dataOutput.txt dosyasını açarsanız, datainput.txt dosyasında bulunan tüm verileri görürsünüz.
Node.js'deki etkinlikler
Olaylar, Node.js'deki temel kavramlardan biridir ve bazen Node.js, Olay güdümlü çerçeve olarak adlandırılır.
Temel olarak olay, olan bir şeydir. Örneğin, bir veritabanına bağlantı kurulursa, veritabanı bağlantı olayı tetiklenir. Olay güdümlü programlama, belirli olaylar tetiklendiğinde tetiklenecek işlevler oluşturmaktır.
Node.js'de bir olay tanımlamanın temel bir örneğine bakalım.
'Data_received' adında bir olay oluşturacağız. Bu olay tetiklendiğinde, konsola "veri alındı" metni gönderilecektir.
var events = require('events');var eventEmitter = new events.EventEmitter();eventEmitter.on('data_received', function() {console.log('data received succesfully.');});eventEmitter.emit('data_received');
Kod Açıklaması: -
- 'Olaylar' modülünü dahil etmek için required işlevini kullanın. Bu modül ile, Node.js'de olaylar yaratabileceksiniz.
- Yeni bir olay yayıcı oluşturun. Bu, bizim durumumuzda "data_received" olan olayı 3. adımda tanımlanan bir geri çağırma fonksiyonuna bağlamak için kullanılır.
- "Data_received" olayının tetiklenmesi durumunda konsola "data_received" metnini vermemiz gerektiğini söyleyen olay odaklı bir işlev tanımlarız.
- Son olarak, eventEmiter.emit işlevini kullanan olayımızın manuel tetikleyicisine sahibiz. Bu, data_received olayını tetikleyecektir.
Program çalıştırıldığında, "veri alındı" metni aşağıda gösterildiği gibi konsola gönderilecektir.
Yayan Olaylar
Olayları tanımlarken, çağrılabilecek olaylar için farklı yöntemler vardır. Bu konu, her birine ayrıntılı olarak bakmaya odaklanmaktadır.
- Tek seferlik olay işleyicileri
Bazen bir olaya yalnızca ilk meydana geldiğinde tepki vermek ilginizi çekebilir. Bu durumlarda once () yöntemini kullanabilirsiniz.
Olay işleyicileri için once yöntemini nasıl kullanabileceğimize bir bakalım.
Kod Açıklaması: -
- Burada 'data_received' olayı için geri çağırma işlevinin yalnızca bir kez çalıştırılması gerektiğini söylemek için 'bir kez' yöntemini kullanıyoruz.
- Burada 'data_received' olayını manuel olarak tetikliyoruz.
- 'Data_received' olayı tekrar tetiklendiğinde, bu sefer hiçbir şey olmayacak. Bunun nedeni, olayın yalnızca bir kez tetiklenebileceğini söylediğimiz ilk adımdır.
Kod düzgün bir şekilde yürütülürse, günlükteki çıktı 'başarıyla veriyle alındı' olacaktır. Bu mesaj konsolda yalnızca bir kez görünecektir.
- Etkinlik Dinleyicilerini İnceleme
Yaşam süresinin herhangi bir noktasında, bir olay yayıcı kendisine bağlı sıfır veya daha fazla dinleyiciye sahip olabilir. Her olay türünün dinleyicileri çeşitli şekillerde incelenebilir.
Yalnızca eklenen dinleyicilerin sayısını belirlemekle ilgileniyorsanız, EventEmitter.listenerCount () yönteminden başkasına bakmayın.
( Not: Dinleyiciler önemlidir çünkü ana program dinleyicilerin bir olaya anında eklenip eklenmediğini bilmelidir, aksi takdirde ek dinleyiciler çağrılacağı için program arızalanacaktır.)
Kod Açıklaması: -
- Olayla ilgili yöntemleri kullanmak için gerekli olan bir eventEmitter türü tanımlıyoruz.
- Ardından, olay işleyicilerimizi tanımlamak için kullanılacak emitter adlı bir nesne tanımlıyoruz.
- Temelde hiçbir şey yapmayan 2 olay işleyicisi oluşturuyoruz. Bu, sadece listenerCount yönteminin nasıl çalıştığını göstermek için örneğimiz için basit tutulmuştur.
- Şimdi data_received olayımızda listenerCount yöntemini çağırdığınızda, konsol günlüğünde bu olaya ekli olay dinleyicisi sayısını gönderecektir.
Kod düzgün bir şekilde yürütülürse, konsol günlüğünde 2 değeri gösterilecektir.
- NewListener Etkinliği
Yeni bir olay işleyicisi her kaydedildiğinde, olay yayıcı bir newListener olayı yayar. Bu olay, yeni olay işleyicilerini tespit etmek için kullanılır. Kaynakları ayırmanız veya her yeni olay işleyicisi için bazı eylemler gerçekleştirmeniz gerektiğinde, genellikle newListener olayını kullanırsınız.
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() {});
Kod Açıklaması: -
- 'NewListener' olayı için yeni bir olay işleyicisi yaratıyoruz. Bu nedenle, yeni bir olay işleyicisi kaydedildiğinde, konsolda "için dinleyici eklendi" metni + olay adı görüntülenecektir.
- Burada konsola "Eklenen dinleyici" metnini + kaydedilen her olay için olay adını yazıyoruz.
- 'Data_received' olayımız için 2 olay işleyicisi tanımlıyoruz.
Yukarıdaki kod doğru bir şekilde yürütülürse, konsolda aşağıdaki metin gösterilecektir. Yalnızca 'newListener' olay işleyicisinin iki kez tetiklendiğini gösterir.
Data_received olaylar için dinleyici eklendi
Data_received olaylar için dinleyici eklendi
Özet
- Akışlar, Giriş-Çıkış cihazlarından veri okumak ve yazmak için Node.js'de kullanılır. Node.js, dosyalara okunabilir ve yazılabilir akışlar oluşturmak için 'fs' kitaplığını kullanır. Bu akışlar, dosyalardan veri okumak ve yazmak için kullanılabilir.
- Borular, birden fazla akışı birbirine bağlamak için kullanılabilir. En yaygın örneklerden biri, verilerin bir dosyadan diğerine aktarılması için okuma ve yazma akışını bir araya getirmektir.
- Node.js genellikle olay güdümlü bir çerçeve olarak da etiketlenir ve olayları Node.js'de tanımlamak çok kolaydır. Bu olaylara cevap veren fonksiyonlar tanımlanabilir.
- Olaylar ayrıca önemli olaylara yanıt verme yöntemlerini de ortaya çıkarır. Örneğin, bir olay tetiklendiğinde bir geri çağırma işlevinin yalnızca bir kez çalıştırıldığından emin olmak için kullanılabilen once () olay işleyicisini gördük.