"Teori bilgelik verir, pratik ise güç." — Seneca
Geçen dersimizde Node.js'in neden icat edildiğini anladık. Bugün artık kolları sıvıyoruz: Node.js'i kuracağız, terminali açacağız ve birkaç satır kodla internete yanıt veren bir sunucu yazdıracağız. Başlayalım.
🎯 Node Sensei'nin İkinci Dersi
"Bir savaşçının kalitesi, sahip olduğu silahla değil, o silahı kullanma kararlılığıyla ölçülür. Terminali aç, yaz, çalıştır."
1. Node.js Kurulumu: Doğru Yöntemi Seç
Node.js kurmanın birden fazla yolu var. Ama her yol eşit değil. Uzun vadeli geliştiriciler için en iyi yöntem, NVM (Node Version Manager) kullanmaktır. Neden?
💡 Neden Direkt Kurulum Değil de NVM?
Gerçek dünyada farklı projelerin farklı Node.js sürümleri gerektirir. Bir proje v18 isterken diğeri v20 ister. NVM ile, tıpkı bir samurayın farklı durumlara farklı kılıç çektiği gibi, tek komutla versiyon değiştirebilirsiniz.
🍎 Mac / Linux Kurulumu (NVM ile — Önerilen)
# 1. NVM'i kur
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 2. Terminali kapat ve yeniden aç (veya şu komutu çalıştır)
source ~/.zshrc # zsh kullananlar için
# source ~/.bashrc # bash kullananlar için
# 3. NVM'in kurulduğunu doğrula
nvm --version
# 4. Node.js'in en güncel LTS sürümünü kur
nvm install --lts
# 5. Kurulumu doğrula
node --version
npm --version
🪟 Windows Kurulumu
# Yöntem 1: Doğrudan İndirme (Başlangıç için yeterli)
# https://nodejs.org adresine gidin
# "LTS" sürümünü indirin ve kurucuyu çalıştırın
# Yöntem 2: nvm-windows (Önerilen)
# https://github.com/coreybutler/nvm-windows/releases
# nvm-setup.exe dosyasını indirip çalıştırın
# Ardından:
nvm install lts
nvm use lts
# Doğrulama (PowerShell veya CMD)
node --version
npm --version
⚠️ Dojo Kuralı #2
Resmi siteden her zaman LTS (Long Term Support) sürümünü tercih edin. "Current" sürümler yeni özellikler sunar, ancak üretim ortamları için LTS daha kararlıdır.
2. npm: Silah Deponuz
Node.js kurulumunun içinde gizli bir güç gelir: npm (Node Package Manager). 2 milyondan fazla paket, tek bir komutla kullanımınıza hazır.
🔥 npm'i Tanıyalım
# npm versiyonunu gör
npm --version
# Kurulu global paketleri listele
npm list -g --depth=0
# Bir paket hakkında bilgi al (kurmadan)
npm info express
# Bir paketi global kur (tüm projelerden erişilebilir)
npm install -g nodemon
nodemon ne işe yarar? Dosyalarınızı kaydettiğinizde sunucuyu otomatik yeniden başlatır. Geliştirme sürecinin vazgeçilmez silahı.
3. İlk Node.js Projesi: Arenayı Hazırla
Artık terminalle konuşma zamanı. Bir proje klasörü oluşturalım ve Node'u çalıştıralım:
# Proje klasörü oluştur ve içine gir
mkdir node-dojo-02
cd node-dojo-02
# npm projesi başlat (-y soruları atlayıp varsayılanları kabul eder)
npm init -y
# Oluşan package.json dosyasına bak
cat package.json
Karşınıza şuna benzer bir çıktı gelecek:
{
"name": "node-dojo-02",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
💡 package.json Nedir?
Bu dosya, projenizin kimlik kartıdır. Hangi bağımlılıkları kullandığını, hangi komutlarla çalıştırıldığını ve versiyonunu içerir. Bir Node projesini klonladığınızda ilk baktığınız yer burasıdır.
4. "Merhaba Dünya" — Ama Sunucu Olarak
Node.js'in farkını hissetmenin en iyi yolu, sadece ekrana yazı bastırmak değil, bir HTTP sunucusu kurmaktır. Tek bir dosyayla, sıfır bağımlılıkla:
server.js dosyasını oluşturun ve şunları yazın:
// server.js
// Node.js'in yerleşik 'http' modülünü içe aktar
// Hiçbir ek paket kurmanıza gerek yok
const http = require('http');
// Sunucunun çalışacağı port ve host
const HOST = 'localhost';
const PORT = 3000;
// HTTP sunucusu oluştur
// Her gelen istek için bu fonksiyon tetiklenir
const server = http.createServer((req, res) => {
// Hangi URL'ye istek geldiğini konsola yaz
console.log(`[${new Date().toLocaleTimeString()}] İstek geldi: ${req.method} ${req.url}`);
// Yanıt başlıklarını ayarla
res.writeHead(200, {
'Content-Type': 'text/html; charset=utf-8'
});
// Farklı URL'lere farklı yanıt ver
if (req.url === '/') {
res.end(`
<h1>🚀 Node Dojo Sunucusu Çalışıyor!</h1>
<p>İlk Node.js sunucunuza hoş geldiniz.</p>
<a href="/hakkinda">Hakkında sayfasına git →</a>
`);
} else if (req.url === '/hakkinda') {
res.end(`
<h1>📖 Hakkında</h1>
<p>Bu sunucu Node.js'in yerleşik http modülüyle yazıldı.</p>
<a href="/">Ana sayfaya dön ←</a>
`);
} else {
// 404 Not Found
res.writeHead(404);
res.end('<h1>404 - Sayfa Bulunamadı</h1>');
}
});
// Sunucuyu başlat ve dinlemeye al
server.listen(PORT, HOST, () => {
console.log(`✅ Sunucu çalışıyor: http://${HOST}:${PORT}`);
console.log('Durdurmak için Ctrl+C');
});
⚡ Çalıştırın!
# Normal çalıştırma
node server.js
# Veya nodemon ile (dosya değişince otomatik yeniler)
nodemon server.js
Terminalde şu çıktıyı görmelisiniz:
✅ Sunucu çalışıyor: http://localhost:3000
Durdurmak için Ctrl+C
Tarayıcınızı açın ve http://localhost:3000 adresine gidin. İnternete yanıt veren ilk sunucunuz hazır. 🎉
🔥 Ne Oldu Az Önce?
require('http'): Node.js'in yerleşik HTTP modülünü aktardıkhttp.createServer(callback): Her gelen isteği yakalayan bir sunucu oluşturdukreq: Gelen istek nesnesi (URL, method, header bilgileri)res: Gönderilecek yanıt nesnesiserver.listen(PORT): Sunucuyu belirtilen porta bağladık ve dinlemeye aldık
5. Asenkron Yapı İş Başında: setTimeout ile Gözlemleyin
İlk derste anlattığımız "şef analojisi"ni hatırlıyor musunuz? Şimdi bunu görelim:
// async-demo.js
console.log('1 - Sunucu isteği aldı');
// 2 saniye süren bir I/O işlemini simüle ediyoruz (veritabanı sorgusu gibi)
setTimeout(() => {
console.log('3 - Veritabanı yanıt verdi (2sn sonra)');
}, 2000);
// Bu satır, setTimeout bitmeden ÖNCE çalışır
console.log('2 - Başka işler yapılıyor...');
# Çalıştırın
node async-demo.js
# Çıktı:
# 1 - Sunucu isteği aldı
# 2 - Başka işler yapılıyor...
# (2 saniye bekler)
# 3 - Veritabanı yanıt verdi (2sn sonra)
💡 Kritik Gözlem: 2 saniye beklenirken program bloklanmadı! "2 - Başka işler" satırı hemen çalıştı. Geleneksel bloklayan mimaride bu 2 saniye boyunca hiçbir istek yanıtlanamazdı. Event Loop sayesinde Node.js beklerken başka işlere devam etti.
6. package.json'a Script Ekleyin
Profesyoneller sunucuyu her seferinde node server.js yazmaz. package.json'a script eklerler:
{
"name": "node-dojo-02",
"version": "1.0.0",
"scripts": {
"start": "node server.js",
"dev": "nodemon server.js"
}
}
# Artık şöyle çalıştırabilirsiniz
npm start # Üretim modu
npm run dev # Geliştirme modu (nodemon)
💡 npm start vs npm run dev
start özel bir script ismidir, npm start diye çağrılır. Diğer özel scriptler için npm run <isim> kullanılır.
🎯 İkinci Dersin Özeti
- ✅ NVM ile Node.js'i doğru kurma yöntemi
- ✅ npm ve package.json nedir, ne işe yarar
- ✅ Node.js'in yerleşik
httpmodülüyle sıfırdan HTTP sunucu kurulumu - ✅
reqveresnesnelerinin temel kullanımı - ✅ Asenkron yapının pratikte nasıl göründüğü
- ✅ package.json'a script ekleme
🏠 Dojo Ödevi
Bir sonraki derse kadar:
- Node.js kurulumunu tamamlayın ve
node --versionçıktısını alın server.js'i çalıştırın ve tarayıcıdalocalhost:3000'i açın/hakkindaURL'sine bir yazar bilgisi ekleyin- Bonus:
/zamanadlı yeni bir route ekleyin, o anki saat ve tarihi gösteren bir HTML yanıtı döndürsün
🥋 Node Sensei'den
"Bir sunucuyu ilk kez çalıştırmak, kılıcını ilk kez çeken savaşçıya benzer: titrek ama kararlı. O tik sesi — sunucunun portu dinlediğini söyleyen o tek satır — bir yolculuğun başlangıcıdır. Bir sonraki dersimizde bu kılıcı bileyeceğiz."
Yorumlar
Henüz yorum yapılmamış. İlk yorumu siz yapın!