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