
Merhabalar, NodeJS derslerimize devam edelim. Bu dersimizde NodeJS ile localde çalışan bi server yapacak ve gerekli router yani yönlendiricileri ayarlayacağız. Henüz NodeJS kurmadıysanız Linux için buraya, Windows için buraya, MacOS için buraya tıklayabilirsiniz. Evet artık NodeJS kurduğunuzu varsayarak devam ediyorum. Dersimize başlayabiliriz.
Ilk olarak bi tane NodeJS projesi oluşturuyoruz. Bunun için de istediğimiz bi yerde bi klasör oluşturup içerisine yine istediğimiz bi isimde javascript dosyası oluşturalım. Örneğin ben index.js adında bi dosya oluşturdum. Bu javascript dosyası kodlarımızı yazacağımız dosya olacak. Şimdi terminali (Windows için cmd) açıp oluşturduğumuz klasör içine giriyoruz. Bunun için ya klasörü açıp Linux’ta sağ tıklayıp Terminali aç diyerek ve Windows’ta yine klasörü açıp üstteki adres barına cmd yazarak bulunduğumuz klasörde terminal açabiliriz. Veyahut terminali açıp Linux ve MacOS için örneğin cd /home/Masaüstü/proje, Windows için ise cd /c:/users/kullanici/desktop/proje komutuyla klasöre girebiliriz.Ardından içinde bulunduğumuz klasör yani projeyi NodeJS projesine çevirmemiz gerek. Bunun için ise terminalden
npm init
komutunu giriyoruz. Npm (NodeJS Package Manager), adından da anlaşılacağı üzere NodeJS projelerini ve projemiz için gerekli olan bağımlılıkları yönetmemizi sağlayan bi yöneticidir. Komutu girdikten sonra proje adı, proje çalıştırma dosyası gibi bilgileri doldurup projemizi hazır hale getiriyoruz. Veya npm’nin otomatik olarak bilgileri tanıması için npm init yerine
npm init --yes
komutunu girebiliriz. Evet NodeJS projemizi oluşturduktan sonra server oluşturmaya geçelim.
Server oluşturmak için öncelikle gerekli olan paketi yani ExpressJS’i projemize ekleyelim. Bunun için terminalden
npm install express
yazmamız yeterli. Npm, ExpressJS ve onun için gerekli olan tüm bağımlılıkları yükleyecek ve proje dosyalarımız içerisine node_modules adında bi klasör oluşturacaktır. node_modules klasöründen kısaca bahsetmek gerekirse; NodeJS projemiz için gerekli olan tüm paketler bu klasör içinde toplanır. Siz yeni bi paket yüklediğinizde eğer istediğiniz paket NodeJS kurarken geldiyse, kurulum dosyaları arasından bu klasör içine kopyalanır. Eğer NodeJS kurulumu sırasında ön tanımlı paketlerden farklı bi paket yüklerseniz, paket node_modules klasörü içine indirilerek projeye dahil edilir. Evet bu kadar teknik detaydan sonra kaldığımız yerden devam edelim. Şimdi artık ExpressJS kullanarak server oluşturalım.
Bunun için öncelikle ExpressJS modülünü projemizde çağıralım. Bildiğiniz üzere NodeJS’de projeye modül dahil etmek için require fonksiyonunu kullanıyoruz. Aynı şekilde ExpressJS modülünü dahil etmek için de
const express = require('express');
kod satırını kullanacağız. Fakat ExpressJS modülü class yapısında olduğu için oluşturduğumuz express değişkenini doğrudan kullanamıyoruz. ExpressJS’i tam bi şekilde kullanabilmek için modül içerisinde bulunan class’tan yeni bir nesne türetmemiz gerek. Bunun için de
const app = express();
kod satırını kullanacağız. Bu sayede ExpressJS modülünü sorunsuz bi şekilde kullanabiliriz.
Evet ExpressJS modülünü de sorunsuz bi şekilde ekledikten sonra artık server oluşturmaya yarayan kodları yazmaya başlayabiliriz. Localde çalışan bi server olduğu için bize boş bi tane port gerekiyor. Çünkü serverimiz belirttiğimiz portu dinleyecek ve gelen istekleri cevaplayarak geri cevap gönderecektir. ExpressJS’in kendi dökümantasyonunda 3000 portunu kullandığı için bizde bunu kullanalım fakat 3000 portunu kullanmak zorunda değiliz, siz isterseniz 5000, 2500 gibi farklı portları da kullanabilirsiniz. Şimdi öncelikle gelen istekleri karşılaşmamız yani router (yönlendirici) oluşturmamız gerekiyor. Bunun içinde
app.get('/', (req, res) => {
res.send('Hello World !');
res.end();
});
kod satırını kullanacağız.
Yazmış olduğumuz bu kodda / sunucumuzun ana sayfasını temsil ediyor. Yani localhost:3000 adresine tekabül ediyor. req değişkeni sunucuya gelen istekleri ve res değişkeni de sunucudan geri dönen cevaplara karşılık geliyor. Yani sunucuya giden istekler req değişkeni, sunucudan geri dönen istekler ise res değişkeni içerisinde saklanıyor. res.send() fonksiyonu sunucudan gelen cevaplar içine fonksiyona gönderdiğimiz parametreyi ekler ve dönen cevabın o şekilde derlenmesini sağlar. Yani biz aslında sunucuya istek göndermiyor; sunucudan gelen cevabın arasına eklemeler yapıp, o şekilde derlenip çıktı vermesini sağlıyoruz. res.end() fonksiyonu ise yapacağımız eklemelerin ve dolayısıyla cevabın tamamlandığını belirtiyor. Bunu yapmamızın sebebine gelirsek; örneğin Google Chrome tarayıcısı ile bi web sitesine girdiğimizi farzedelim. Sitenin bulunduğu sunucu kendisine gelen istek yani komutları yorumlar (veya derler) ve sonrasında bi tane request açarak elde ettiği sonuçları tarayıcıya gönderir. Request açık olduğu sürece tarayıcı, sunucuyu dinlemeye devam eder ve request tamamlandığında tarayıcı, sonucuyla bağlantıyı koparır ve çıktı üretir. Işte bizde res.end() fonksiyonu ile requestin tamamlandığını tarayıcıya bildiriyor ve çıktı vermesi için uyarıyoruz. Eğer requestin tamamlandığını tarayıcıya bildirmezsek sunucudan herhangi bi cevap gelmese bile tarayıcı dinlemeye devam eder ve request tamamlanıp uyarılmadığı için de hiçbir zaman çıktı üretemez. Dolayısıyla sayfa sürekli yükleniyor olarak kalır.Routeri oluşturduk fakat hâlâ sunucuyu aktifleştirmedik, yani bu şekilde derleme yapar ve localhost:3000 adresine giderseniz hata alacaksınız. Sunucuyu başlatmak için ise;
app.listen(3000, () => {
console.log('Ilk NodeJS uygulaması 3000 portunda çalışıyor');
});
kod satırını kullanmamız gerek. listen() fonksiyonu belirtilen portu (3000) dinlemeye başlar. Fonksiyon içinde bulunan console.log(‘Ilk NodeJS uygulaması 3000 portunda çalışıyor’); kısmı tamamen isteğe bağlıdır, bu kodu kullanmak şart değildir ve isteğe göre de boş bırakılabilir. Ben sunucunun çalıştığını görebilmek amacıyla kullandım.
Şimdi sırada sunucuyu çalıştırmak var. Bunun için terminalden
node index.js
komutunu giriyoruz. Bu komut sayesinde projemizi çalıştırıyoruz. Evet artık sunucumuz sorunsuz bir şekilde çalışıyor olacaktır. localhost:3000 adresine gittiğimizde ekranda Hello World ! yazdığını göreceksiniz. Fakat şöyle bir sorun var; localhost:3000 içinde kalmak şartıyla hangi adrese giderseniz gidin karşınıza Hello World ! yazısı çıkacaktır. Çünkü biz sadece / ile başlayan adresleri kontrol ettik ve yönlendirdik. Örneğin localhost:3000/kategoriler adresi için de ayrıca bi yönlendirme yapmak istersek;
app.get('/kategoriler', (req, res) => {
res.send('<h1>Kategoriler Sayfasına Hoşgeldiniz</h1>');
res.end();
});
kodunu ekleyerek kategoriler sayfasi içinde ayrıca bi router oluşturmamız gerekiyor. res.send() fonksiyonu içerisine illa ki metin yazmak zorunda değiliz, HTML kodu da ekleyebilirsiniz. Fakat bu routeri sunucuyu başlatmadan öncesine eklememiz gerekiyor. Çünkü sunucu başlatıldıktan sonraki routerler geçersiz olur ve çalışmaz. Router sayısını istediğiniz kadar arttırabilirsiniz; 100 tane sayfanız varsa 100 tane router yazabilirsiniz.
Evet NodeJS ile ExpressJS kullanarak server oluşturma işlemimiz tamamlandı ve artık sunucumuz başarıyla çalışıyor. Fakat bu şekilde oluşturulan sunucular statik özellikte olmakta, yani örneğin iletişim sayfasında bi form varsa kullanıcının forma girdiği değerleri ne yazık ki alamayız, çünkü biz sabit değerli sayfalar oluşturduk ve sunucuya giden request yani istekleri kontrol etmedik. Başka bir dersimizde dinamik sayfalar oluşturmayı da anlatacağız elbette, bizi takipte kalın 🙂 Son olarak yazdığımız tüm kodları alta bırakıyorum, tam şekilde oradan alabilirsiniz.
const express = require('express');
const app = express();
app.get('/kategoriler', (req, res) => {
res.send('<h1>Kategoriler Sayfasına Hoşgeldiniz</h1>');
res.end();
});
app.get('/', (req, res) => {
res.send('Hello World !');
res.end();
});
app.listen(3000, () => {
console.log('Ilk NodeJS uygulaması 3000 portunda çalışıyor');
});
Tüm ExpressJS derslerimiz için buraya, Tüm NodeJS derslerimiz için buraya tıklayabilirsiniz. Herkese hayırlı günler.