Çalıştırılabilir örneklerle Node.js eğitimi
Örnekleri sayfada çalışan ücretsiz bir Node.js eğitimi: dosyalar, modüller, event loop, istek gönderdiğin Express sunucuları, MongoDB ve JWT. Kodu düzenle ve yeniden çalıştır.
Kursa başlaBaşlarken
- Node.js NedirNode.js, JavaScript'i tarayıcının dışında, sunucularda ve terminalde çalıştıran bir runtime'dır. Bir dil ya da framework değildir: V8, bir event loop ve dosyalar, ağ ve süreçler için API'lerden oluşur.
- Node.js vs JavaScriptJavaScript dildir; Node.js onu tarayıcının dışında çalıştıran bir programdır. Sözdizimi aynıdır, ama kodunun etrafındaki global'ler ve yerleşik API'ler farklıdır.
- process.argvprocess.argv, programını başlatan komut satırını tutan bir dizidir: node çalıştırılabilir dosyası, script'in yolu, ardından yazdığın her argüman. Yalnızca kendi argümanlarını almak için process.argv.slice(2) kullan.
- process.envprocess.env, Node.js programının başlatıldığı ortam değişkenlerini tutan bir nesnedir. Her değer ya bir string ya da undefined'dır; bu yüzden sayıları ve boolean'ları kendin çevir ve her değişkene bir varsayılan değer ver.
- Kullanıcı Girdisi AlmaNode.js'te prompt() fonksiyonu yoktur. Terminalde kullanıcıya soru sormak için process.stdin üzerinde bir readline arayüzü oluştur ve question() çağır, ya da readline/promises ile await et.
Dosyalar ve yollar
- fs.readFileNode.js'te bir dosyayı fs.readFile (callback), fs.readFileSync ya da fs/promises içindeki await readFile ile oku. String almak için 'utf8' ver, dosya yoksa ENOENT hatasını yönet.
- fs.writeFileNode.js'te bir dosyaya fs.writeFile, fs.writeFileSync ya da fs/promises içindeki await writeFile ile yaz. Dosya yoksa oluşturulur, varsa üzerine yazılır; sona eklemek için appendFile kullan.
- fs/promisesfs/promises, Node'un fs modülünün promise sürümüdür: readFile, writeFile, readdir, stat, mkdir, rm ve rename await ettiğin promise'ler döndürür ve hatalar try/catch ile yakalanır.
- path Modülüpath modülü dosya yollarını işletim sistemine uygun şekilde oluşturur ve parçalarına ayırır. path.join parçaları birbirine yapıştırır; path.resolve ise onları geçerli klasörden başlayarak mutlak bir yola çevirir.
Asenkron Node
- Event LoopNode.js event loop callback'lerini fazlar halinde çalıştırır (timers, poll, check, close) ve her callback'ten sonra önce process.nextTick kuyruğunu, sonra promise kuyruğunu boşaltır. Kesin sırayı görmek için örnekleri çalıştır.
- EventEmitterNode'un events modülündeki EventEmitter, bir nesnenin emit ile isimli olaylar duyurmasını, diğer kodun da on ya da once ile bunlara tepki vermesini sağlar. Listener'lar senkron çalışır, eklendikleri sırayla.
HTTP ve Express
- HTTP sunucu`http.createServer()`, her istek için `req` ve `res` ile çalışan tek bir fonksiyon alır. Method'u ve URL'yi `req`'ten okursun, sonra `res` üzerinde status, header'lar ve body ayarlayıp `res.end()` çağırırsın.
- Express routingExpress'te bir route bir metot, bir path ve bir handler'dan oluşur: `app.get('/users/:id', handler)`. İlgili route'ları bir `express.Router()` içinde topla ve `app.use('/api', router)` ile bir önek altına bağla.
- Express middlewareExpress middleware, route handler'ından önce çalışan bir `(req, res, next)` fonksiyonudur. İsteği okuyabilir ya da değiştirebilir, bir response ile bitirebilir ya da iletmek için `next()` çağırabilir.
- req.params, query, body`req.params` path'in isimli parçalarını (`/users/:id`), `req.query` query string'i (`?sort=new`), `req.body` ise parse edilmiş istek body'sini tutar; `req.body`, `express.json()` gibi bir body parser ekleyene kadar `undefined` olur.
- Hata yönetimiExpress'te hata handler'ı dört argüman alan, `(err, req, res, next)`, ve route'larından sonra kaydedilen bir middleware'dir. Express 5 ona fırlatılan hataları, `next(err)` çağrılarını ve async handler'lardan gelen reject edilmiş promise'leri gönderir.
- express.static`app.use(express.static(path.join(__dirname, 'public')))`, `public` klasöründeki her dosyayı karşılık gelen URL'de sunar: `public/style.css`, `/style.css` adresine cevap verir. Dosyaları bir önek altında sunmak için bir bağlama path'i ekle.
- Express'te CORSCORS hatası, response sayfanın origin'ine izin vermediği için tarayıcının sayfanın API response'unu okumasını engellediği anlamına gelir. Sunucuda `Access-Control-Allow-Origin` göndererek ve preflight `OPTIONS` isteklerine cevap vererek düzeltirsin, elle ya da `cors` paketiyle.
Veri ve kimlik doğrulama
- MongoDBMongoDB'yi Node.js'ten resmi mongodb driver'ıyla kullan: MongoClient ile bağlan, sonra bir collection'da döküman ekle, bul, güncelle ve sil, hepsi async/await ile.
- JWTJWT, sunucunun login sırasında verdiği ve her istekte kontrol ettiği, üç base64url parçadan oluşan imzalı bir token'dır. Node.js'te onu jose ya da jsonwebtoken paketi ve bir secret key ile imzalar ve doğrularsın.