Birleştirme
- Node.js kursu
- Orta seviye
- Ders 116/116
- 6 dk
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.
Başlangıç kodu
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);
// simüle req nesnesi tanımla (method, url)
// simüle res nesnesi tanımla (json)
// middleware[0] çağır, next içinde işlendi yazdır
// buraya yazÖrnek çözüm
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);
});Beklenen çıktı
Sunucu hazır
Rotalar: GET /health, GET /users, POST /users
Yüklendi: {"users":["Ayşe","Alex"]}
Ara katman: 1
İstek: GET
İşlendi: GET /users
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 next() çağrısını tamamla
console.log('İstek: ' + req.method); ____();
console.log('İstek: ' + req.method); next();
Açıklama: next() bir sonraki ara katmana veya rotaya geçer.
2 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 Doğru cevap
- Hiçbir zaman
- Sunucu kapanınca
Açıklama: cb, middleware içinde next() çağrılınca çalışır.
3 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
app.get |
Rota kaydeder |
saveUsers |
Veriyi dosyaya yazar |
app.use |
Ara katmanı kaydeder |
middleware[0] |
İlk ara katmanı çağırır |