Her ne kadar Node ile çok ilginç şeyler yapacak olsak da, koşmadan önce yürümeyi öğrenmek gerekiyor. Bunun için de bu makalemizde, Node ile bir IP ve portu dinleyen ve gelen HTTP taleplere HTML olarak cevap veren bir uygulama yazacağız.

Yalnız bu kategorideki makalelerin örneklerini, diğer kategorilerden farklı olarak "Tıkla gör, çalışır" şeklinde sunamıyorum. Her ne kadar internet üzerinde ücretsiz Node Hosting'e izin veren firmalar olsa da, tüm makalelerdeki tüm uygulamaların sürekli çalışıyor olabilmesi için yüzlerce porttan dinleme yapılması gerekiyor ve maalesef bunun pratik bir yolu yok. Bu yüzden örneklerin ekran çıktılarını vereceğim ancak gerçekte çalışır halini görmek için örneği kendi bilgisayarında çalıştırman gerekecek.


Öncelikle biraz aksiyon görelim. Sonrasında nasıl yapıldığına bakarız. İlk olarak aşağıdaki kodu "program.js" adıyla masaüstüne kaydedelim.







"use strict";

var http = require("http");

http.createServer(processRequest).listen(1234, "127.0.0.1");

function processRequest (request, response) {
    
    response.writeHead(200, {"Content-Type": "text/html"});
    
    response.write("<b>Node.JS'den</b> sevgilerle...");
    
    response.end();
    
}


Ardından terminal (Linux veya Mac OS) veya command prompt (Windows) ile "program.js" dosyasının bulunduğu klasöre kadar gidelim. Sonrasında da terminal veya command prompt üzerinden aşağıdaki komutu çalıştıralım.

node program.js

Şu halde kursörün bir satır aşağı geçmesi ve başka hiçbir şey olmaması gerekiyor (Bu noktada sistemde kurulu bir Firewall varsa, dinleme yapmaya çalıştığımız 1234 numaralı porta izin verilmesi gerekebilir). Şimdi yazdığımız uygulamayı test etmek için bir internet tarayıcı penceresi açalım ve adres çubuğuna http://127.0.0.1:1234/ yazarak Enter'a basalım. Bu noktada aşağıdaki ekran görüntüsü ile karşılaşmış olman gerekiyor.


Fark ettin mi bilmiyorum ama ilk örneğimizde basit bir Web Server yazdık. Program, HTTP üzerinden gelen talepleri dinliyor ve HTML olarak cevap veriyor. Şimdi de bunu nasıl yaptığımıza bakalım.

Not : "Temel JavaScript" kategorisinde anlattığım gibi "use strict" ifadesini her kod bloğunun başında kullanma alışkanlığımıza devam ediyoruz. Alternatif olarak node ile uygulamayı ayağa kaldırırken komut satırından da bu seçeneği verebiliyoruz ancak bu durumda karar, uygulamayı çalıştıran kişinin inisiyatifine kalmış oluyor. Bu yüzden ben, her kod bloğunun başında kullanmayı daha uygun buluyorum.

var http = require("http");

İlk olarak require fonksiyonu ile kullanmak istediğimiz modülü belirterek bir nesne türetiyoruz. Node ile birlikte gelen ve sonradan yüklenebilen pek çok modül var. Bu modüller, belli başlı işlemleri gerçekleştirmek için kullanılıyor. Örneğin HTTP talepleri dinlemek veya dosya sistemine erişmek gibi. Biz burada "http" modülünü kullanacağımızı bildiriyoruz (İnşallah bir sonraki makalemiz modüller hakkında olacak).

http.createServer(processRequest).listen(1234, "127.0.0.1");

Burada, "http" modülünün "createServer" fonksiyonu vasıtasıyla bir HTTP Listener açıyoruz ve 127.0.0.1 IP ve 1234 portundan dinlemeye başlıyoruz. Bu porta herhangi bir talep geldiği taktirde de, "processRequest" fonksiyonumuzun çağırılmasını söylüyoruz.


function processRequest (request, response) {

    response.writeHead(200, {"Content-Type""text/html"});

    response.write("<b>Node.JS'den</b> sevgilerle...");

    response.end();

}


"processRequest" fonksiyonumuz iki adet parametre alıyor. Bunlardan ilki "request" ismi ile talep bilgilerini bize taşıyor. Bu parametre üzerinden, HTTP Header bilgilerinden, POST edilen parametrelere kadar pek çok bilgiyi almamız mümkün. "response" parametresi ise istemciye dönülecek cevabı içeriyor.

Fonksiyonumuzda ilk olarak Response Header bilgisine, cevabın başarılı olduğunu (HTTP 200) ve dönen cevabın HTML formatında olduğunu bildiriyoruz. Ardından dönmek istediğimiz HTML içeriği yazarak cevabı sonlandırıyoruz.

Not : Eğer deneyimli bir yazılımcıysan, sadece bu makaledeki örneğin üzerine giderek ihtiyaçlarını karşılayabileceğini düşünebilirsin. Aslında teknik olarak doğru düşünüyorsun. Ben de ilk başladığımda, HTML tarafından ihtiyaca yönelik Ajax Request'de bulunmayı ve Node tarafında da JSON formatında gönderdiğim verileri Parse ederek işlemeyi ve geri dönmeyi düşünmüştüm. Ancak Node ile bunu yapmanın hem daha etkin, hem de daha kolay yolları var. Bu yüzden aceleci olma.

Böylece ilk örneğimizi tamamlamış olduk. Henüz Node'un teknik yeteneklerini anlamaktan çok uzaktayız ama artık JavaScript'in sadece istemci taraflı bir yazılım geliştirme dili olmadığını biliyoruz. Makalemizi tamamlarken öğrendiklerimizi özetleyelim.
  • Yazdığımız uygulamayı Node ile ayağa kaldırmak için komut satırından "node DosyaIsmi.js" şeklinde bir çağrımda bulunmamız gerekiyor (Production'da böyle yapmak zorunda değiliz ama bu ilerisinin konusu).
  • Node dahili ve sonradan eklenebilecek şekilde pek çok modüle sahiptir (Bu da bir sonraki makalenin konusu).
  • Kullanılan her modül, Node'a (HTTP talepleri dinlemek veya dosya sistemine erişmek gibi) yeni bir yetenek kazandırır.


Yorum Gönder

  1. Harika gidiyor :d

    YanıtlaSil
  2. Merhaba. Program.js içindeki html kodlarını tanımadı ve hata verdi. Bold yapma kodunun altında "missing regular expression" dedi. Sebebi ne olabilir?

    YanıtlaSil
  3. Merhaba. Geç dönüş yaptığım için üzgünüm. Blogger editörü fazladan tırnak işareti eklemiş. Örneği düzelttim, şu anda çalışıyor olması lazım.

    YanıtlaSil
  4. Selamlar örnekleri adım adım yapmaya çalışıyorum. Öncelikle hepsi için teşekkür ederim. Ancak "Error: Cannot find module 'C:\_Services.Node\program.js'" hatası alıyorum ve C:\Users\Administrator\AppData\Roaming\npm klasoru yok. Bu bir kurulum hatasi mi yoksa http modulunu ayrica mi kurmak gerekiyor. Tekrar teşekkürler...

    YanıtlaSil
  5. http modülü Node.JS ile birlikte gelir ve ayrıca kurmaya gerek yoktur. Node.JS kurulumunda bir problem olabilir mi? Sorunu net anlayamadım :(

    YanıtlaSil

 
Top