Node.JS

NodeJS Kullanıcıdan Girdi Alma

Herkese merhabalar, NodeJS derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde terminal üzerinden veri almayı anlatacağım. Hadi başlayalım !

NodeJS ile herhangi bir şey yapmak için öncelikle bir tane NodeJS projesi oluşturmamız gerekiyor. Bunun içinde proje oluşturmak istediğimiz dizine terminal ile (Windows için CMD) geçerek

npm init --yes

komutunu girerek projemizin oluşturulmasını bekleyelim.<br>Projenin kurulmasının ardından proje ana dizininde index.js adında bir tane Javascript dosyası oluşturup açalım.

Terminalden girdi almak için readline modülünü kullanacağız ve readline modülü NodeJS kurulumu ile birlikte gelen modüllerden olduğu için ekstradan paket kurmamıza gerek yok, doğrudan kullanabileceğiz. Fakat yinede kullanmak istediğimiz dosya içerisinde bu modülü çağırmamız gerekiyor. Bunun için index.js dosyasının en başına

const readline = require('readline');

kod satırını ekleyelim. Bu sayede readline paketini kullanabilir hale getiriyoruz. Sonrasında terminal ile girdi alabilmek için readline modülü interfacesini etkinleştirmemiz gerekiyor. Bunun için

const rl = readline.createInterface(process.stdin, process.stdout);

kod satırını yazıyoruz. Bundan sonra kodlara rl değişkeni üzerinden gideceğiz. Bu değişken dışarıdan girdi almayı sağlayacak.

Dışarıdan veri almak için rl değişkeni altında birçok yöntem mevcut. Bunlardan birisi question fonksiyonunu kullanmak. Bu fonksiyon string tipte olmak üzere terminalde yazacak ifadeyi ve sonrasında gerçekleştirilecek işlemleri yapabilmek için bir tane callback fonksiyonu olmak üzere 2 tane parametre istiyor. Birinci parametrede göndereceğimiz değer terminal ekranına yazılacak ve kullanıcının girdiği girdi ile ikinci parametre olan callback fonksiyonu doldurulacaktır. Callback fonksiyonu ise girilen girdiyi yakalamak için bir tane parametre içeriyor.

Girdiyi alıp işlemleri tamamladıktan sonra Node.JS’in daha fazla girdi beklememesi için readline modülünü sonlandırmamız gerekiyor. Çünkü readline modülü veri girişi oldukça çalışacaktır, yani bi yapmak istediğimizi yapsak bile beklemeye devam edecek ve kod orada takılacaktır. Çünkü Javascript yukarıdan aşağı işlenen ve bekleyen bir dil olduğundan bir kod bitmeden diğerine geçiş yapmaz. Kod burada bitti bekleme devam et demek içinde readline modülü altında oluşturduğumu interfaceyi sonlandırmak gerekecektir. Bunuda rl değişkeni altındaki close() fonksiyonu ile yapmaktayız ve bu fonksiyon herhangi bir parametre istememekte.

Örneğin kullanıcının doğum yılını soralım ve girdiği değere göre yaşını hesaplayıp terminal ekranına basalım. Bu örneğin kodu şu şekilde olacaktır;

rl.question('Doğum yılınızı giriniz: ', function(yil) {
    const yas = new Date().getFullYear() - parseInt(yil);
    console.log('Yaşınız: ' + yas);
    rl.close();
});

readline modülü ile dışarıdan girdi almak için birden fazla yolumuz var dedik ve ilkini anlattık, şimdi geldi ikinci yönteme.

Burada yine readline altından interfaceyi başlatmak gerekiyor fakat bu sefer question() fonksiyonu yerine prompt özelliğini kullanacağız. Bunun için öncelikle interface altından setPrompt() fonksiyonunu kullanarak terminale basmak istediğimiz veriyi yazıp sonrasında prompt() fonksiyonunu kullanarak veriyi ekrana yazıyoruz. Son olarak rl interfacesi için line adında bir tane event listener yani olay dinleyicisi oluşturup gelen veriyi bu event listener ile yakalıyoruz. Bu event listener tipik Javascript listenerleri gibi çalışıyor, yani değişken.on(‘event_adı’, function(değişken2){ yapılacak işlemler }); syntaxını kullanıyor. Bu syntax yapısına göre az önce yaptığımız yaş hesaplaması için yazacağımız kodlar şöyle olacaktır;

rl.setPrompt('Doğum yılınızı giriniz: ');
rl.prompt();
rl.on('line', function(yil) {
    const yas = new Date().getFullYear() - parseInt(yil);
    console.log('Yaşınız: ' + yas);
    rl.close();
});

Evet NodeJS ile terminal ile dışarıdan veri alması bu kadardı, tamam çok kullanım alanı yok gibi görünüyor fakat elbet birilerinin işine yarayacaktır. Yazdığımız kodları daha toplu olması için aşağıya tekrardan yazıyorum;

const readline = require('readline');
const rl = readline.createInterface(process.stdin, process.stdout);
// question metodu ile yaş hesaplama
rl.question('Doğum yılınızı giriniz: ', function(yil) {
    const yas = new Date().getFullYear() - parseInt(yil);
    console.log('Yaşınız: ' + yas);
    rl.close();
});

// event listener ile yaş hesaplama
rl.setPrompt('Doğum yılınızı giriniz: ');
rl.prompt();
rl.on('line', function(yil) {
    const yas = new Date().getFullYear() - parseInt(yil);
    console.log('Yaşınız: ' + yas);
    rl.close();
});

Bu yazımızın da sonuna geldik, tüm NodeJS yazılarımıza buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.

Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 2 Ortalama: 5]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu