Node.js
Birleştirme
Tüm katmanları birleştirerek çalışan bir API yazarsın.
İstek simülasyonu
Sunucuyu gerçekten başlatmadan bir isteğin akışını simüle edebiliriz. Sahte bir req nesnesi (method, url) ve sahte bir res nesnesi (json) tanımlar, bunları ara katmana geçiririz. Böylece middleware → rota zincirinin çıktısını kesin olarak görebiliriz.
Örnek: const req = {method: 'GET', url: '/users'} ve const res = {json: (d) => console.log('Yanıt: ' + JSON.stringify(d))}. Sonra middleware[0](req, res, () => { console.log('İşlendi: ' + req.method + ' ' + req.url); }) çağrılır. Ara katman önce 'İstek: GET' yazdırır, next() ile geri çağrıyı çalıştırır, geri çağrı 'İşlendi: GET /users' yazdırır. Bu, sunucu başlatmadan istek akışını doğrulamanın kesin ve hızlı yoludur.
Tüm parçalar birleşiyor
Son derste Express rotaları, fs kalıcılığı ve middleware birleşir. İstek geldiğinde önce middleware çalışır (yöntemi yazdırır), sonra rota işleyici veriyi döndürür. Veri dosyaya kaydedilip geri yüklenir; böylece sunucu yeniden başlasa bile kullanıcı listesi kalıcı olur.
Bu proje Express + fs + middleware birikimini sınar: rota kaydı (app.get/app.post), kalıcılık (saveUsers/loadUsers) ve ara katman (app.use). Her dersin başlangıç kodu önceki çözümü içerir; son dersin kodu tüm parçaları birleştirir. Çıktı, istek akışının kesin izidir: 'Sunucu hazır', 'Rotalar: ...', 'Yüklendi: ...', 'Ara katman: 1', 'İstek: GET', 'İşlendi: GET /users'.
Uygulama İstek simülasyonunu çalıştır
const req = {method: 'GET', url: '/users'} tanımla. const res = {json: (d) => console.log('Yanıt: ' + JSON.stringify(d))} tanımla. middleware[0](req, res, () => { console.log('İşlendi: ' + req.method + ' ' + req.url); }) çağır.
Örnek çözümü göster
const express = require('express');
const app = express();
const routes = [];
app.get('/health', (req, res) => res.json({ok: true}));
routes.push({method: 'GET', path: '/health'});
console.log('Sunucu hazır');
app.get('/users', (req, res) => res.json([]));
routes.push({method: 'GET', path: '/users'});
app.post('/users', (req, res) => res.json({created: true}));
routes.push({method: 'POST', path: '/users'});
console.log('Rotalar: ' + routes.map(r => r.method + ' ' + r.path).join(', '));
const fs = require('fs');
const DB_PATH = '/tmp/nodejs-i20.json';
function saveUsers(data) {
fs.writeFileSync(DB_PATH, JSON.stringify(data));
}
function loadUsers() {
return JSON.parse(fs.readFileSync(DB_PATH, 'utf8'));
}
saveUsers({users: ['Ayşe', 'Alex']});
console.log('Yüklendi: ' + JSON.stringify(loadUsers()));
const middleware = [];
middleware.push((req, res, next) => { console.log('İstek: ' + req.method); next(); });
app.use(middleware[0]);
console.log('Ara katman: ' + middleware.length);
const req = {method: 'GET', url: '/users'};
const res = {json: (d) => console.log('Yanıt: ' + JSON.stringify(d))};
middleware[0](req, res, () => {
console.log('İşlendi: ' + req.method + ' ' + req.url);
});
Kendini test et
-
next() çağrısını tamamla
console.log('İstek: ' + req.method); ____();
Cevabı göster
console.log('İstek: ' + req.method); next();
-
middleware[0](req, res, cb) çağrısında cb ne zaman çalışır?
middleware[0](req, res, () => { console.log('İşlendi'); })
- Middleware öncesinde
- Middleware içinde next() çağrılınca
- Hiçbir zaman
- Sunucu kapanınca
Cevabı göster
Middleware içinde next() çağrılınca — cb, middleware içinde next() çağrılınca çalışır.
-
Parçayı rolüne eşle
- app.get
- Rota kaydeder
- saveUsers
- Veriyi dosyaya yazar
- app.use
- Ara katmanı kaydeder
- middleware[0]
- İlk ara katmanı çağırır
Sıradaki ders: Orta seviye bölüm sınavı