Middleware
- Node.js kursu
- Orta seviye
- Ders 115/116
- 6 dk
Logging, error ve validation middleware'ları eklersin.
Ara katman (middleware)
Middleware, her istekten önce çalışan bir fonksiyondur. Örneğin istek yöntemini yazdıran bir ara katman, gelen tüm istekleri günlüğe kaydeder. Express'te app.use(fn) ile kaydedilir; fn üç parametre alır: (req, res, next).
İşlem bitince next() çağrılır; bu, bir sonraki ara katmana veya rotaya geçişi sağlar. next çağrılmazsa istek askıda kalır. Örnek: (req, res, next) => { console.log('İstek: ' + req.method); next(); }. Birden çok ara katmanı bir dizide toplayıp app.use(middleware[0]) ile tek tek kaydedebilirsin. Ara katman sayısını middleware.length ile yazdırırsın.
Ara katman dizisi
Birden çok ara katmanı bir dizide tutmak, sıralarını denetlemeyi kolaylaştırır. const middleware = [] tanımlar, middleware.push(fn) ile eklersin. Sonra app.use(middleware[0]) ile Express'e kaydedersin.
İlk ara katman istek yöntemini yazdırır: middleware.push((req, res, next) => { console.log('İstek: ' + req.method); next(); }). app.use(middleware[0]) ile kaydedersin. console.log('Ara katman: ' + middleware.length) ile kaç tane olduğunu yazdırırsın. Dizi, ara katmanların sırasını ve sayısını tek yerden yönetmeni sağlar. İleride ikinci bir ara katman eklemek istersen middleware.push(...) ile diziye ekler, app.use(middleware[1]) ile kaydedersin.
Uygulama Ara katman ekle
const middleware = [] tanımla. middleware.push((req, res, next) => { console.log('İstek: ' + req.method); next(); }) ekle. app.use(middleware[0]) ile kaydet. console.log('Ara katman: ' + middleware.length) yazdı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()));
// middleware dizisi tanımla
// istek yöntemini yazdıran ara katman ekle
// app.use ile kaydet, sayıyı 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);Beklenen çıktı
Sunucu hazır
Rotalar: GET /health, GET /users, POST /users
Yüklendi: {"users":["Ayşe","Alex"]}
Ara katman: 1
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 next() çağrılmazsa ne olur?
(req, res, next) => { console.log(req.method); }- İstek hemen yanıtlanır
- Sunucu çöker
- İstek askıda kalır Doğru cevap
- Hata fırlatır
Açıklama: next() çağrılmazsa istek askıda kalır, rota işleyiciye geçilmez.
2 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
app.use |
Ara katmanı kaydeder |
next() |
Sonrakine geçer |
req.method |
İstek yöntemi |
middleware.push |
Ara katmanı diziye ekler |
3 app.use satırını tamamla
app.____(middleware[0]);
app.use(middleware[0]);
Açıklama: app.use ara katmanı kaydeder.