Node.js
Middleware
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.
Ö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);
Kendini test et
-
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
- Hata fırlatır
Cevabı göster
İstek askıda kalır — next() çağrılmazsa istek askıda kalır, rota işleyiciye geçilmez.
-
Parçayı rolüne eşle
- app.use
- Ara katmanı kaydeder
- next()
- Sonrakine geçer
- req.method
- İstek yöntemi
- middleware.push
- Ara katmanı diziye ekler
-
app.use satırını tamamla
app.____(middleware[0]);
Cevabı göster
app.use(middleware[0]);
Sıradaki ders: Birleştirme