Bu ders için video bulunmamaktadır.

Bu derse başlamak veya ilerlemenizi kaydetmek için lütfen giriş yapın veya kayıt olun.

Ders İçeriği

Node.js Nedir?

Node.js, JavaScript'i tarayıcı dışında çalıştırmanızı sağlayan güçlü bir çalışma zamanı ortamıdır. Google'ın V8 JavaScript motoru üzerine inşa edilmiş olan Node.js, sunucu tarafı uygulamalar geliştirmek için kullanılır ve modern web geliştirmenin vazgeçilmez araçlarından biridir.

Geleneksel olarak JavaScript sadece web tarayıcılarında çalışabiliyordu. Node.js'in ortaya çıkışıyla birlikte, JavaScript artık sunucu tarafında da kullanılabilir hale geldi. Bu, geliştiricilerin hem ön yüz (frontend) hem de arka yüz (backend) geliştirme için aynı programlama dilini kullanabilmesi anlamına gelir.

Node.js'in Temel Özellikleri

Asenkron ve Olay Güdümlü: Node.js, asenkron programlama modeli kullanır. Bu, bir işlem tamamlanmasını beklemeden diğer işlemlerin devam edebilmesi anlamına gelir. Örneğin, bir dosya okuma işlemi sırasında program donmaz, diğer görevleri yerine getirmeye devam eder.

Tek İş Parçacıklı (Single-Threaded): Node.js tek bir ana iş parçacığı kullanır, ancak arka planda I/O işlemleri için iş parçacığı havuzu kullanır. Bu yaklaşım, bellek kullanımını optimize eder ve yüksek performans sağlar.

Hızlı ve Verimli: Google V8 motoru sayesinde JavaScript kodu makine koduna derlenir ve çok hızlı çalışır. Ayrıca, olay döngüsü (event loop) mekanizması sayesinde binlerce eşzamanlı bağlantıyı verimli bir şekilde yönetebilir.

Node.js Neden Kullanılır?

Node.js'in popüler olmasının birçok nedeni vardır. İlk olarak, JavaScript bilgisi olan geliştiriciler için öğrenme eğrisi çok düşüktür. Aynı dili hem frontend hem backend için kullanabilmek, geliştirme sürecini hızlandırır ve kod tutarlılığını artırır.

Gerçek zamanlı uygulamalar için Node.js mükemmel bir seçimdir. Sohbet uygulamaları, canlı güncellemeler, oyunlar ve işbirliği araçları gibi uygulamalar Node.js ile kolayca geliştirilebilir. WebSocket desteği ve olay tabanlı mimari, bu tür uygulamalar için ideal bir ortam sağlar.

Mikroservis mimarisi için de Node.js çok uygun bir seçimdir. Hafif ve hızlı olması, küçük ve bağımsız servisler oluşturmak için idealdir. Ayrıca, Docker gibi konteyner teknolojileriyle mükemmel uyum sağlar.

Node.js Kurulumu

Node.js kurulumu oldukça basittir ve birkaç farklı yöntemle yapılabilir. En yaygın yöntem, resmi Node.js web sitesinden indirip kurmaktır.

Resmi Web Sitesinden Kurulum

Node.js'i kurmak için nodejs.org adresine gidin. Ana sayfada iki farklı sürüm göreceksiniz:

LTS (Long Term Support): Uzun dönem destek sürümü, üretim ortamları için önerilir. Daha kararlı ve güvenilirdir.

Current: En son özellikler içeren sürüm, yeni özellikler denemek isteyenler için uygundur.

Başlangıç için LTS sürümünü seçmenizi öneririz. İndirme işlemi tamamlandıktan sonra, kurulum dosyasını çalıştırın ve kurulum sihirbazını takip edin.

Kurulum Doğrulama

Kurulum tamamlandıktan sonra, Node.js'in doğru şekilde kurulduğunu doğrulamak için terminal veya komut istemcisini açın ve aşağıdaki komutları çalıştırın:

node --version
npm --version

Bu komutlar, Node.js ve NPM (Node Package Manager) sürümlerini gösterecektir. Eğer sürüm numaraları görüyorsanız, kurulum başarılı demektir.

İlk Node.js Uygulamanız

Şimdi ilk Node.js uygulamanızı oluşturalım. Bu klasik "Hello World" örneği, Node.js'in temel çalışma prensiplerini anlamanıza yardımcı olacaktır.

Basit Console Uygulaması

İlk olarak, en basit Node.js uygulamasını oluşturalım. Bir metin editörü açın ve aşağıdaki kodu yazın:

// app.js
console.log('Merhaba, Node.js!');
console.log('İlk Node.js uygulamanız çalışıyor!');

// Basit bir hesaplama
const sayi1 = 10;
const sayi2 = 20;
const toplam = sayi1 + sayi2;

console.log(`${sayi1} + ${sayi2} = ${toplam}`);

Bu dosyayı app.js olarak kaydedin. Ardından terminal veya komut istemcisinde dosyanın bulunduğu klasöre gidin ve şu komutu çalıştırın:

node app.js

Çıktı olarak şunları göreceksiniz:

Merhaba, Node.js!
İlk Node.js uygulamanız çalışıyor!
10 + 20 = 30

Basit HTTP Sunucusu

Şimdi daha ilginç bir örnek yapalım - basit bir web sunucusu oluşturalım. Node.js'in yerleşik http modülünü kullanarak bir web sunucusu oluşturabiliriz:

// server.js
const http = require('http');

// Sunucu oluştur
const server = http.createServer((req, res) => {
    // HTTP başlıklarını ayarla
    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
    
    // Yanıt gönder
    res.end(`
        <h1>Merhaba, Node.js Sunucusu!</h1>
        <p>Bu sayfa Node.js ile oluşturulmuştur.</p>
        <p>Şu anki zaman: ${new Date().toLocaleString('tr-TR')}</p>
    `);
});

// Sunucuyu 3000 portunda başlat
const PORT = 3000;
server.listen(PORT, () => {
    console.log(`Sunucu http://localhost:${PORT} adresinde çalışıyor`);
});

Bu dosyayı server.js olarak kaydedin ve şu komutla çalıştırın:

node server.js

Artık tarayıcınızda http://localhost:3000 adresine giderek sunucunuzu görebilirsiniz!

Node.js Çalışma Zamanı Ortamı

Node.js'in nasıl çalıştığını anlamak için, temel bileşenlerini incelememiz gerekir. Node.js'in mimarisi, onu diğer sunucu teknolojilerinden farklı kılan özellikler içerir.

V8 JavaScript Motoru

Node.js'in kalbi Google V8 JavaScript motorudur. V8, JavaScript kodunu doğrudan makine koduna derler (Just-In-Time compilation). Bu, kodun çok hızlı çalışmasını sağlar. V8 aynı zamanda Google Chrome tarayıcısında da kullanılır.

V8'in önemli özellikleri şunlardır:

Hızlı Derleme: JavaScript kodu çalışma zamanında optimize edilmiş makine koduna derlenir.

Bellek Yönetimi: Otomatik çöp toplama (garbage collection) ile bellek yönetimi yapılır.

Sürekli Optimizasyon: Kod çalışırken sürekli olarak optimize edilir ve performans artırılır.

Olay Döngüsü (Event Loop)

Node.js'in en önemli özelliklerinden biri olay döngüsüdür. Bu mekanizma, Node.js'in asenkron ve non-blocking olmasını sağlar. Olay döngüsü şu şekilde çalışır:

Call Stack: Çalıştırılacak fonksiyonların tutulduğu yığın.

Callback Queue: Tamamlanan asenkron işlemlerin callback fonksiyonlarının bekletildiği kuyruk.

Event Loop: Call Stack boş olduğunda, Callback Queue'dan fonksiyonları alıp Call Stack'e yerleştiren mekanizma.

Bu sistem sayesinde Node.js, bir I/O işlemi beklerken diğer işlemleri gerçekleştirebilir. Örneğin, bir dosya okuma işlemi sırasında program donmaz, diğer istekleri işlemeye devam eder.

Libuv Kütüphanesi

Node.js, I/O işlemleri için libuv kütüphanesini kullanır. Libuv, farklı işletim sistemlerinde asenkron I/O işlemlerini yönetir. Bu kütüphane sayesinde Node.js:

Dosya sistemi işlemlerini asenkron olarak gerçekleştirir, ağ bağlantılarını verimli şekilde yönetir, zamanlayıcıları (timer) ve olayları işler.

NPM (Node Package Manager)

NPM, Node.js ile birlikte gelen paket yöneticisidir. JavaScript ekosisteminin en büyük yazılım kütüphanesi deposudur. NPM sayesinde binlerce hazır modül ve kütüphaneyi projelerinizde kullanabilirsiniz.

NPM'in Temel Komutları

NPM'i kullanmaya başlamak için temel komutları öğrenelim:

# Yeni bir proje başlatma
npm init

# Paket kurma
npm install paket-adi

# Global paket kurma
npm install -g paket-adi

# Geliştirme bağımlılığı kurma
npm install --save-dev paket-adi

# Kurulu paketleri listeleme
npm list

# Paket güncelleme
npm update

# Paket kaldırma
npm uninstall paket-adi

package.json Dosyası

package.json dosyası, Node.js projelerinin kalbidir. Bu dosya projenizin meta verilerini, bağımlılıklarını ve scriptlerini içerir:

{
  "name": "ilk-nodejs-projesi",
  "version": "1.0.0",
  "description": "İlk Node.js projemiz",
  "main": "app.js",
  "scripts": {
    "start": "node app.js",
    "dev": "nodemon app.js"
  },
  "keywords": ["nodejs", "javascript", "backend"],
  "author": "Adınız",
  "license": "MIT",
  "dependencies": {
    "express": "^4.18.0"
  },
  "devDependencies": {
    "nodemon": "^2.0.0"
  }
}