Node.js – Hello World

Åžu sıra merakım ve tüm ilgim Node.js üzerinde. Sadece Node.js’te deÄŸil Express.js, Angular.js, Backbone.js, Bower, Grunt … Hemen hemen Javascript hakkındaki her ÅŸeyi merak ediyorum araÅŸtırıyorum ve öğrenmeye çalışıyorum. Ağırlıklı olarak Java geliÅŸtiren biri olarak script yazmak beni zorlasada keyifli olduÄŸunu söyleyebilirim.node_js_hello_world

Öncelikle bu kadar Javascript kütüphanesi, ortamı ya da aracı saydıktan sonra şunu belirtmek istiyorum. Bunların hepsi farklı farklı amaçlara farklı farklı ortamlara yönelik. Bu yazıda ise ben Node.js üzerine ağırlık vereceğim. Zaten bu bahsettiğim kütüphanelerin kimisi çalışmak için Node.js ortamına ihtiyaç duymaktadır.

Nedir Node.js?

EÄŸer daha önce bir Web projesi geliÅŸtirdiyseniz mutlaka ucundan kıyısından Javascript yazmışsınızdır. Bu sebepten web projesi geliÅŸtirmiÅŸ birinin Node.js’e bakışı yine Client tarafında çalışacak bir kütüphane ÅŸeklindedir. Fakat bu tamamen yanlış bir yaklaşımdır.

Node.js sunucu tarafında çalışan bir yapıdır. Yani size sunucu tarafında da javascript çalıştırmanıza olanak sağlar.

Java ile karşılaÅŸtıracak olursak şöyle düşünebilirsiniz. ÖrneÄŸin size bir JAR dosyası verildiÄŸinde, bunu sunucunuzda ya da kendi bilgisayarınızda çalıştırmak için JRE’a ihtiyaç duyarsınız. Aynı ÅŸekilde Node.js’te JRE’ye karşılık gelmektedir. Size bir JS dosyası verildiÄŸinde bunu sunucuda çalıştırmak için Node.js kullanırsınız.

Önemli Noktalar

[pullquote1 quotes=”true” align=”left”]Node.js modüller üzerinden çalışan bir sistem[/pullquote1]Tamam Node.js’in ne olduÄŸunu belirttik ama ÅŸunu biliyoruz, normal ÅŸartlarda Javascript kullanarak sisteminiz üzerinde iÅŸlem yapamazsınız, dosya oluÅŸturamaz, soket açamaz ya da veritabanı baÄŸlantısı kuramazsınız. Fakat Node.js kendi saÄŸladığı modüllerle size bunları yapmanızda olanak saÄŸlıyor.

Burada ilk önemli noktamıza deÄŸinmiÅŸ olduk. Node.js modüller üzerinden çalışan bir sistem. Yani Java’da nasıl kütüphane yüklüyorsak Node.js’te de modül yüklüyoruz.

[pullquote1 quotes=”true” align=”right”]Node.js tamamen asenkron çalışıyor[/pullquote1]DiÄŸer bir önemli nokta, node.js tamamen asenkron çalışıyor. Mesela Java’da bazı iÅŸlemler çalıştığınız Thread’i bloklar. ÖrneÄŸin soket baÄŸlantısı açtığınızda ya da dosya okurken çalışan thread bloklanır. Node.js’te herÅŸey asenkron çalıştığından hiç bir ÅŸey bloklanmaz. Bloklanacak türde iÅŸlemler ise arka tarafta çalıştırılır. Buda iÅŸlemlerinizin bitiÅŸleri için callback fonksiyonları eklemeniz demek oluyor.

Kurulum

“Hello, World” uygulamamıza geçmeden önce Node.js kurulumumuzu yapalım. Bunun için tek yapmanız gereken http://nodejs.org/download/ adresinden sisteminize uygun olan kurulum dosyasını indirmek ve kurmak. Bu hem node.js sistemini kuracak hemde sistem yoluna eklemelerde bulunacaktır.

Yüklemenizi yaptıktan sonra konsolu açıp “node” komutunu çalıştırıp, yüklemenizin baÅŸarılı olup olmadığını kontrol edebilirsiniz.

Kurulumu tamamladığımıza göre Hello, World örneklerine geçebiliriz. Burada iki tane hello world örneği yapacağız. Bunlardan biri Konsol üzerinde olacak, diğeri Http üzerinden olacak.

Hello World – Konsol

Öncelikle nodejs-examples isminde bir klasör oluşturup, içerisine HelloConsole.js isminde bir Javascript dosyası oluşturalım.

HelloConsole.js

function sayHelloFunction(name){
console.log("Hello, "  + name + "!");
}
sayHelloFunction("World");

Node.js bize getirdiği modüllerle ek özellikler sağlasada, alışık olduğumuz Javascript özelliklerini de aynen korumaktadır. Şimdi bu dosyayı aşağıdaki komut ile node.js üzerinde çalıştıralım.

  • node HelloConsole.js

EÄŸer kurulumumuz baÅŸarıyla tamamlandıysa bize “Hello, World!” çıktısını üretecektir.

Modül Yaratmak

Tamam bir Javascript dosyasını çalıştırmak için gayet yeterli. Fakat ileride büyük bir proje yapıldığı zaman birden fazla Javascript dosyam olacak. Ayrıca bu dosyalardaki metod ya da sınıflarıma başka dosyalardan da erişmem gerekcek. O zaman benim bir modül tanımlayıp bu fonksiyonlarımı onun içine eklmem en doğrusu olacaktır. Bunun için HelloConsole.js dosyamı aşağıdaki gibi değiştiriyorum.

HelloConsole.js

module.exports = {
sayHello : sayHelloFunction
};

function sayHelloFunction(name){
console.log("Hello, "  + name + "!");
}

Burada modülümde exports kısmında nelerin olacağını belirliyorum. Eğer benim exports içerisinde belirtilmemiş başka fonksiyonlarım olsaydı, onlar dışarıdan çağrılamayacaktı.

HelloConsole.js dosyasının son halini Node.js ile çalıştırdığımızda ekrana hiç birşey yazmayacak. Çünkü biz şu anda sadece bir modül yarattık. Yapmamız gereken başka bir JS dosyası yaratıp bu modülü eklemek ve ilgili fonksiyonu çağırmak. Bunun için aynı dizine Main.js isminde başka bir Javascript dosyası yaratıyoruz.

Main.js


var helloConsole = require("./HelloConsole");
helloConsole.sayHello("World");

Bu dosyayı biraz açıklayacak olursak, require metodu az önce yarattığımız ve HelloConsole.js dosyasında bulunan modülü kullanmamıza yarıyor. Burada Javascript dosyasının adını uzantısı olmadan kullandığımıza dikkat etmelisiniz.

Åžimdi aÅŸağıdaki komut ile Main.js dosyamızı çalıştıralım ve yine “Hello, World!” çıktısını görelim.

  • node Main.js

Hello World – Http

Şimdi ise başka bir örnek daha yapalım. Bu sefer bir Http sunucusu yaratıp, internet tarayıcısı üzerinden Hello, World yazdıralım.

Bunun için öncelikle HelloHttp.js dosyamızı ve modülümüzü oluşturuyoruz.

HelloHttp.js


module.exports = {
startHttpServer : function () {
var http = require("http");

var server = http.createServer(function(request, response){
response.writeHead(200);
response.write("<html><head><title>Hello, World!</title></head><body>Hello, World!");
response.end("</body></html>");
});

server.listen(8080);

console.log("8080 Portundan eriÅŸebilirsiniz.");
}
};

Burada gördüğünüz üzere modül içerisinde başka modüller çağrılabiliyor. Http sunucu için Node.js ile gelen Http modülünü kullanıyoruz. Fakat az önce olduğu gibi bu sadece modül, bu dosyayı çalıştırdığımızda ekrana birşey yazmayacaktır. Bunun için tekrar Main.js dosyamıza dönüyoruz ve modülümüzü o dosya içerisinde çağrıyoruz.

Main.js

var helloHttp = require("./HelloHttp");
helloHttp.startHttpServer();

Yine main dosyamızı çalıştırdığımızda, sunucumuz ayaÄŸa kalkacak ve konsolda “8080 Portundan eriÅŸebilirsiniz.” yazısını göreceÄŸiz. Internet tarayıcısını açığ http://localhost:8080 portundan eriÅŸmeyi denediÄŸimizde sayfamızda “Hello, World” yazdığını göreceÄŸiz.

Son

Son olarak şuna dikkat etmenizi istiyorum. Sunucumuz başlatıldıktan sonra konsola yazı yazabiliyoruz. Yani asenkron çalışmayı gözlemleye biliyoruz. Node.js yazarken asenkron çalıştığını aklımızdan çıkartmamalıyız.

End of Line