401: Node.js Web programlama eğitimimizin ileri seviyesinde, Node.js öğreniyoruz.
Tüm Eğitimleri Aldın mı? Kendini sınamanın tam zamanı
Node.js Yazılımına Giriş
Node.js, asenkron çalışan, açık kaynaklı, işlem bazlı (event based), ölçeklenebilir bir uygulama geliştirme çatısıdır. Uygulamaların sunucu (server) tarafında kullanılır ve JavaScript tabanlıdır. İlerleyen eğitimlerimizde uygulamalı olarak Node.js'in kullanım alanlarını ve özelliklerini göreceğiz.
Bir sonraki dersimizde Node.js ile çalışmaya başlamak için kurulum işlemlerini yapacağız. İyi eğlenceler!
Bir önceki dersimizde, bir Node.js programını çok basit de olsa komut satırında nano editor ile oluşturup node programı yardımıyla çalıştırdık. Bu, yeni başlayanlar için şüphesiz önemli bir adım; ama elbette yeterli değil. Önemli olan, gerçek bir İnternet sunucusu üzerinde bir Node.js programının nasıl çalışabileceğini öğrenmek. Bu bölümde bu konuyu anlatacağız.
Node.js, daha önce de belirtildiği gibi, sunucu (server) tarafında kullanılan JavaScript'tir. Aşağıdaki şekil Node.js'in genel çalışma prensibini veriyor:
Node.js'in geliştirilmesi ve kullanılması şu temel soru çerçevesinde olmuştur: JavaScript'in istemci (client) tarafında mevcut olan ve kullanılan olaya dayalı icra modeli (event based execution) sunucu tarafında kullanılamaz mı?
Aşağıda bir dosyayı senkron çalışma modunda okuyan bir Node.js kodu vereceğiz. Burada kullandığımız, fs.readFileSync() fonksiyonu, fs.readFile() fonksiyonunun senkronize sürümüdür. Bir dosyayı okuyarak içeriğini göndermektedir.
Aşağıdaki Node.js kodu senkron işlem gerçekleştiriyor. readFileSync() fonksiyonu, tüm dosyayı okuyor ve bellekte depoluyor; daha sonra veriyi yazdırıyor ve konsola bir mesaj gönderiyor. Dosyanın okunması işlemi bitene kadar diğer bütün işlemlere ara verilecektir; çünkü bu bir senkron işlemdir.
Bir geri çağırma fonksiyonu, başka bir fonksiyona geçirilen bir parametre şeklindeki fonksiyondur. Geri çağırma fonksiyonu, ikinci fonksiyonun içinde çağrılır ya da icra edilir. Geri çağırma fonksiyonları, asenkron olarak icra edilirler.
Read - Eval - Print Loop (REPL - Oku - Değerlendir - Yaz Döngüsü), etkileşimli bir bilgisayar programlama ortamıdır. Burada REPL'i, Node.js çerçevesinde inceleyeceğiz. Bir REPL ortamında, kullanıcı bir ya da daha fazla ifade ya da komut girebilir. Bunlar hesaplanır (derleme aşaması atlanır) ve sonuç görüntülenir. Bir REPL ortamında dört temel özellik vardır:
Node.js, yapısal olarak içine yerleştirilmiş bir grup global belirticiye (identifier) sahiptir. Bu nesneler tüm modüllerde kullanılabilir. Bunlardan bazıları gerçekten global nesnelerdir ve herhangi bir yerden erişilebilirler; diğerleri ise modül düzeyinde her modülde mevcutturlar. Aşağıda bunların bir listesi verilmiştir:
Node.js'i herhangi bir argüman kullanmadan başlatırsanız, REPL komut satırını göreceksiniz.
Örnek
gy:bin gy$ node
>
Burada JavaScript kodlarını çalıştırabilirsiniz ancak tarayıcı tarafındaki geliştiriciler, büyük ihtimalle konsola bilgi yazma ya da hata ayıklama (debug) işlemleriyle ilgili olarak console.log komutu ile ilgilenecektir. Aşağıda console nesnesi metotları listelenmiştir:
Buffer'daki veriyle JavaScript stringleri arasında dönüşüm açıkça bazı kodlama metotları gerektirir. Aşağıdaki tabloda, JavaScript string'lerinin buffer'da saklanması için kullanılan çeşitli kodlama sistemleri hakkında bilgi verilmektedir:
JavaScript, unicode ile barışık olmasına rağmen, ikili (binary) veriyi işlemekte çok iyi özellikler göstermez. Oysa TCP akımları (streams) söz konusu olduğunda ya da dosyalardan bilgi okuma ya da dosyalara bilgi yazma yapılacaksa, saf ikili verilerle işlem yapmak zorunludur.
JavaScript, yıllar boyunca dosya sistemine erişim bakımından çok sınırlı olanaklar sağlıyordu. JavaScript büyük çoğunlukla, web tarayıcıyla ilişkili diğer işlemlere konsantre olmuştu. Aslına bakılırsa, dosyalara erişim ve dosya işlemleri, bir web betik dili için (JavaScript gibi) en büyük risk alanını oluşturmaktaydı. Node.js'in gelişimiyle durum biraz farklılaşmıştır.
Node.js, ortak ağ uygulamaları için, temel API'ler (Application Program Interface - Uygulama Programı Arayüzü) sağlar. Bunlar arasında en çok ihtiyaç duyacaklarınız, HTTP ve TCP ile ilgili API'lerdir.
Oysa, gerçek dünya uygulamalarında peş peşe API'ler kullanmak yerine, bazen daha basit metotlar tercih edilir. Connect bu anlamda bir araç kutusudur. İstemler (requests) ve cevaplar (responses) arasındaki arayüzü organize etmekte yeni bir yol sunmaktadır. Orta katman ürünü (Middleware) olarak da anılır.
Node.js içinde de diğer dillerde olduğu gibi başka bir dosya içinde tanımlanmış olan fonksiyonları başka bir dosyadan çağırmak mümkündür. Şimdi basit bir örnekle bunun nasıl gerçekleştirilebileceğini anlatacağız.
node_modules/test yolunu oluşturun. Bunu gerçekleştirmek için node.js'in yüklenmiş olduğu bin dizininin altında önce node_modules dizinini onun altında da test dizinini oluşturun. Bunu, mkdir komutları ile gerçekleştirebileceğinizi biliyorsunuz.
test dizini içine index.js'i aşağıdaki içerikle yerleştiriniz: