Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development
Code

Yeni Başlayanlar için Node.js

by
Difficulty:BeginnerLength:LongLanguages:

Turkish (Türkçe) translation by Yamaç Yılmaz (you can also view the original English article)

Node.js'e başlamayı zorlaştırabilecek olay-yönelimli programlama yeni başlayanlar için zor olabilir. Ama sakın vazgeçmeyin; bu makalede, Node.js'in temellerinden birkaçını gösterecek ve neden bu kadar ünlü olduğunu açıklayacağım.

Giriş

Node.js kullanmaya başlamak için, ilk önce Node.js ile geleneksel sunucu-taraflı kodlama ortamı (örn. PHP, Python, Ruby, vesaire) arasındaki farkları anlamalısınız.

Eşzamansız Programlama

Node.js karmaşık uygulama yaratımlarını kolaylaştırmak için bir modül mimarisi kullanır.

Eşzamansız programlamaya aşinalık çok iyi olacaktır, herşeyden önce Ajax'deki "A" odur (İngilizce sözcükle). Node.js'deki her fonksiyon eşzamansızdır. Bu yüzden, normal şartlarda program işleyişini kilitleyecek herşey, arka planda çalıştırılır.  Node.js ile ilgili unutulmaması gereken en önemli şey budur. Örneğin, dosya sistemi üzerindeki bir dosyayı okuyorsanız, okuma işlemi tamamlandığında çalıştırılacak bir geriçağrı fonskiyonu belirtmek zorundasınız.

Herşeyi Yapıyorsunuz!

Node.js yalnızca bir ortamdır - anlamı herşeyi kendiniz yapmanız gerekiyor. Varsayılan bir HTTP sunucusu yoktur, yada bu bağlamda herhangi bir sunucu.  Yeni kullanıcılar için bu biraz yıldırıcı olabilir, ama karşılığı yüksek performanslı bir web uygulamasıdır. Bir kod istemcilerle olan tüm iletişimi halleder.  Bu da uygulama tarafından kullanılan kaynak sayısını kayda değer şekilde düşürür. Örneğin, işte basit bir Node.js uygulamasının kodu:

Ve işte PHP'deki karşılığı:

Şimdi kıyaslama sayılarına bakalım. Aşağıdaki tablo bu iki basit uygulamanın yanıt sürelerini, milisaniye olarak listeler:

Tekrarlama sayısı Node.js PHP
100 2.00 0.14
10'000 3.00 10.53
1'000'000 15.00 1119.24
10'000'000 143.00 10621.46
1'000'000'000 11118.00 1036272.19

İki uygulamayı da sunucunun uygulamaların derlenmesini geciktirmemesi için komut satırından çalıştırdım. Her testi on kez çalıştırdım ve ortalama sonuçlara ulaştım. PHP az sayıdaki tekrarlamalarda bariz şekilde hızlı, ama bu avantaj  tekrarlama sayısı arttıkça çabucak eriyip gidiyor. Herşey bittiğinde, PHP Node.js'ten 93% daha yavaş!

Node.js hızlıdır, ama onu gerektiği gibi kullanmak için birkaç şeyi öğrenmeniz gerekecek.

Modüller

Node.js karmaşık uygulamaların yaratımını kolaylaştırmak için bir modül mimarisi kullanır. Modüller, C'deki kütüphanelere, ya da Pascal'daki birimlere benzerler. Her modül modülün "konusuyla" ilgili bir dizi fonksiyon içerir. Örneğin, http modülü HTTP'ye özel fonksiyonları içerir. Node.js dosya sistemindeki dosyalara erişim, HTTP ve TCP/UDP sunucuları yaratma ve diğer kullanışlı işlevleri gerçekleştirmenize yardımcı olacak birkaç ana sıradışı modül sunar.

Bir modülü içermek kolaydır; sadece require() fonksiyonunu çağırın, şunun gibi:

Node.js yalnızca bir ortamdır; herşeyi kendiniz yapmalısınız.

require() fonksiyonu belirtilen modüle başvuru döndürür. Bu kodun özelinde, bir http modül başvurusu http değişkeninde saklanır.

Yukarıdaki kodda, bir modül ismini require() fonksiyonuna geçtik. Bu Node'un uygulama dizininizde node_modules'ü, ve o dizinde http modülünü aramasına neden olur. Node node_modules dizinini bulamazda (ya da içinde http modülünü), o zaman global modül önbelleğini tarar. Gerçek bir dosyayı, göreceli ya da kesin yolu geçirerek de belirtebilirsiniz, şunun gibi:

Modüller kod bölümlerini içerir.  Bir modül içindeki kod genellikle özeldir - yani içlerinde tanımlandıkları fonksiyonlar ve değişkenler yalnızca modül içinden erişilebilirdir. Bununla birlikte,modül dışında kullanılması için fonksiyon ve/veya değişkenleri açığa çıkartabilirsiniz. Bunun için, exports nesnesini kullanın ve onun özelliklerini ve yöntemlerini açığa çıkartmak istediğiniz kod bölümleriyle doldurun. Aşağıdaki modülü bir örnek olarak düşünün:

Bu kod yalnızca modül içinde yer alan kod tarafından erişilebilen bir PI değişkeni yaratır; modül dışında erişilebilir değildir. Sonra, exports nesnesi üzerinde iki fonksiyon yaratılır. Bu fonksiyonlar modül dışında erişilebilirdirler çünkü exports nesnesi üzerinde tanımlıdırlar. Sonuç olarak, PI tamamen dış müdahaleye karşı korumalıdır. Bu yüzden, area() ve circumference() yöntemlerinin daima olması gerektiği gibi davranacağından emin olabilirsiniz (r parametresi için bir değer sağlandığı sürece).

Global Kapsam

Node Google'ın V8 JavaScript moturunda çalışan bir JavaScript ortamıdır. Bundan dolayı, istemci-taraflı geliştirme için kullandığımız en iyi pratikleri takip etmeliyiz. Örneğin, herhangi birşeyi global kapsama koymaktan kaçınmalıyız. Ki, yine de, her zaman mümkün değildir. Node'da global kapsam GLOBAL'dir(gözatıcıdaki window'un tersine), ve var sözcüğünü altayarak kolayca global bir değişken fonksiyonu yaratabilirsiniz:

Bir kez daha söylemek gerekirse, globallerden mümkün olduğunca kaçınılmalıdır.  Bu yüzden dikkatli olmalı ve bir değişken tanımında var kullanılmalıdır.

Kurulum

Doğaldır ki, bir uygulama yazıp çalıştırmadan önce Node'u yüklememiz gerekir. Kurulum çok basittir, Windows ya da OS X kullanıyorsanız; nodejs.org websitesi bu işletim sistemlerinin kurucularını sağlar. Linux'ta, herhangi bir paket yöneticisini kullanın. Terminalinizi açın ve şunu yazın:

ya da:

Node.js sid depolarındadır; kaynakları listenize eklemeniz gerekebilir:

Ama eski sistemlerde sid paketlerinin kurulmasının sisteminizi bozabileceği aklınızda olsun. Dikkatli olun, ve Node'un kurulumu bittikten sonra /etc/apt/sources.list.d/sid.list'i kaldırın.

Yeni Modüllerin Kurulması

Node.js'nin Node Package Manager (NPM-Node Paket Yöneticisi) bir paket yöneticisi vardır. Node.js ile birlikte kendiliğinden kurulur, ve yeni modülleri kurmak için NPM'yi kullanırsınız. Bir modülü kurmak için, terminalinizi/komut satırını açın, istenilen dizine gidin, ve aşağıdaki komutu çalıştırın.

Hangi işletim sisteminizin olduğu önemli değildir; yukarıdaki komut module_name'in yerine belirttiğiniz modülü kuracaktır

Hello World Uygulaması

Pek tabii ki, ilk Node.js kodumuz konsola 'Hello World!' metnini yazdıracak. Bunun için hello.js adında bir dosya yaratın, ve aşağıdaki kodu girin:

Şimdi kodu çalıştıralım. Terminalinizi/komut satırını açın, hello.js'yi içeren dizini gezin, ve aşağıdaki komutu derleyin:

Konsolda görüntülenen 'Hello World!'ü görmeniz gerekiyor.

HTTP Sunucu

Haydi daha gelişmiş bir uygulamaya geçelim; merak etmeyin sandığınız kadar karmaşık değil. Aşağıdaki kodla başlayalım. Düşülen notları ve ardından aşağıdaki açıklamayı okuyun.

Bu kod çok basit.  response.write() metodunu kullanarak istemciye daha fazla veri gönderebilirsiniz, ama bunu response.end()'i çağırmadan önce yapmalısınız. Bu kodu http.js olarak kaydedin ve şunu konsolunuza yazın:

Gözatıcınızı açın ve http://localhost:8080 adresini girin. Sayfada "Hello HTTP!" metnini görmelisiniz.

URL Parametrelerinin İşlenmesi

Daha önce bahsettiğim gibi, Node'da herşeyi kendimiz yapmamız gerekiyor, istek argümanlarının ayıklanması da dahil. Bu, yine de, oldukça basit. Aşağıdaki koda bir göz atın:

Bu kod ana bir Node.js modülünü, isteğin URL'sini bir nesneye çevirmek için, url modülünün parse() yöntemini kullanır,  Döndürülen nesnenin URL'nin parametrelerinin alan bir query özelliği vardır. Bu dosyayı get.js olarak kaydedin ve aşağıdaki komutla çalıştırın:

Ardından gözatıcınızla http://localhost:8080/?data=put_some_text_here adresine gidin. Doğaldır ki, data parametresinin değerinin değiştirilmesi kodu bozmayacaktır.

Dosyaları Okuma ve Yazma

Node'da dosyaları yönetmek için, fs modülünü (ana bir modül) kullanıyoruz. Dosyaları okumak ve yazmak için, sırasıyla fs.readFile() ve fs.writeFile() yöntemlerini kullanıyoruz. Aşağıdaki koddan sonra argümanları açıklayacağım:

Node.js'in Node Package Manager (NPM-Node Paket Yöneticisi) adında bir paket yöneticisi vardır. Node.js ile kendiliğinden yüklenir.

Bunu files.js olarak kaydedin.  Bu kodu çalıştırmadan önce, files.js ile aynı dizinde test.txt adlı bir dosya yaratın.

Bu kod fs.readFile() ve fs.writeFile() yöntemlerini gösterir. Sunucu her istek aldığında, kod dosyadan sayıyı okur, arttırır ve yeni sayıyı dosyaya yazar. fs.readFile() yöntemi üç argüman kabul eder: okunacak dosya adı, beklenen karakter kodu, ve geriçağrı fonksiyonu.

Dosyaya yazma, en azından bu durumda, çok daha basittir. Herhangi bir sonucu beklememiz gerekmiyor, gerçek bir uygulamada hata kontrolü yapmamız gerekse de. fs.writeFile() yöntemi dosya adı ve veriyi argüman olarak kabul eder. Ayrıca sırasıyla karakter kodu ve geriçağrı fonksiyonunu belirtmek için üçüncü ve dördüncü argümanları da kabul eder( ikisi de tercihe bağlıdır).

Şimdi, aşağıdaki komutla kodu çalıştıralım:

Gözatıcıda (http://localhost:8080) açın ve birkaç kez yenileyin. Şimdi, iki arttırdığı görüldüğünden kodda hata olduğunu düşünebilirsiniz. Bu bir hata değildir. Bu URL'yi her istediğinizde, iki istek sunucuya gönderilir. İlk istek favicon.ico'yu isteyen gözatıcı tarafından kendiliğinden yapılır, ve tabii ki, ikincisi de URL içindir (http://localhost:8080).

Bu davranış teknik olarak bir hata değilse de, istemediğimiz bir davranıştır. Bunu istek URL'yi kontrol ederek kolayca düzeltebiliriz. İşte yenilenmiş kod:

Artık test edin, beklendiği gibi çalışacaktır.

MySQL Veritabanlarına Erişim

Çoğu sunucu-taraflı teknolojilerin bir veritabanına bağlanmak ve veritabanını sorgulamak için dahili araçları vardır. Node.js ile, bir kütüphane kurmak zorundasınız.  Bu makale için, yapısı değişmeyecek ve kullanımı kolay node-mysql'i seçtim.  Bu modülün tam adı mysql@2.0.0-alpha2 (@'den sonraki herşey sürüm numarası). Konsolunuzu açın, kodlarınızı sakladığınız dizine gidin, ve aşağıdaki komutu çalıştırın:

Bu modülü yükler ve kurar, ve ayrıca geçerli dizinde node_modules dizini yaratır. Şimdi bunu kodumuzda nasıl kullanacağımıza bakalım; aşağıdaki örneğe bakalım:

Bu kütüphaneyle veritabanı sorgulaması kolaydır; basitçe sorgu metni ve geriçağrı fonksiyonunu girin. Gerçek bir uygulamada,hata olup olmadığını kontrol etmeniz (hata olursa error parametresi undefined olmayacaktır) ve sorgunun başarılı yada başarısızlığına bağlı olarak yanıt kodları yollamanız gerek. Content-Type'ı JSON için geçerli MIME tipi olan application/json verdiğimize de dikkat edin. rows parametresi sorgunun sonucunu içerir; ve rows içindeki veriyi JSON.stringify() yöntemini kullanarak kolayca JSON biçimine dönüştürüyoruz.

Bu dosyayı mysql.js olarak kaydedin, ve onu çalıştırın (kurulu MySQL'iniz varsa yani):

Gözatıcınızda http://localhost:8080 adresine gidin, ve JSON-biçimli dosyayı yüklemeye yönlendirilmeniz gerekiyor.

Sonuç

Node.js'deki her fonksiyon eşzamansızdır.

Node.js fazladan iş demektir, ama hızlı ve sağlam bir uygulamanın bedeli olmaya değerdir. Şayet herşeyi en alt düzeyde yapmak istemiyorsanız, her zaman Express gibi, uygulama geliştirmeyi kolaylaştıran bir çatı seçebilirsiniz.

Node.js umut vaad eden bir teknolojidir ve çok yüklü bir uygulama için mükemmel bir seçimdir.  Microsoft, eBay, ve Yahoo gibi firmalarca kanıtlanmıştır.  Şayet websitenizi/uygulamanızı yayınlama konusunda emin değilseniz, her zaman ucuz bir VPS çözümü ya da Microsoft Azure ve Amazon EC2 gibi çeşitli bulut-tabanlı hizmetlerini kullanabilirsiniz. Bu hizmetlerin her ikisi de makul bir fiyata ölçeklenebilir ortamlar sunar.

Herhangi bir sorunuzda, not düşmeyi unutmayın!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.