CodeBlanks Logo Icon CodeBlanks

Middleware

Logging ve error middleware'ları eklersin.

Middleware

Dördüncü ders middleware: istek ve yanıt arasına yerleşen fonksiyonlar. app.use((req, res, next) => { ... }) ile tanımlanır. Her istekte çalışır; next() çağrılınca bir sonraki middleware'e veya rotaya geçer.

Yaygın bir kullanım loglama: console.log(req.method, req.url) ile her isteğin metodunu ve yolunu yazdırırsın. Örneğin GET /books isteği gelince GET /books yazılır. Middleware, rotalardan ÖNCE tanımlanmalı; aksi halde istek rotaya ulaşır ve middleware atlanır. next() çağrılmazsa istek askıda kalır. Bu yüzden her middleware'de mutlaka next() veya bir yanıt gönderimi olmalıdır.

Logging middleware

Bir logging middleware, her isteği kaydeder. app.use((req, res, next) => { console.log(req.method, req.url); next(); }) ile tanımlarsın. Bu, tüm isteklerde çalışır.

Önce console.log ile metod ve yol yazılır, sonra next() ile akış devam eder. Eğer next()'i unutursan istek hiçbir rotaya ulaşamaz ve istemci yanıt alamaz. Middleware sırası önemlidir: app.use ile eklenen middleware, ancak kendisinden SONRA tanımlanan rotaları etkiler. Bu yüzden logging middleware'ı rotalardan önce yazmalısın. Böylece her istekte önce log, sonra rota çalışır; hem izleme hem de hata ayıklama kolaylaşır.

Uygulama Logging middleware ekle

Bir logging middleware tanımla. app.use((req, res, next) => { ... }) ile console.log(req.method, req.url) yazdır ve next() çağır. Middleware rotalardan ÖNCE olsun. Self-request hazır.

Başlangıç kodu

index.js
const books = [];
books.push({ id: 1, title: "Node.js" });

const express = require("express");
const app = express();
app.use(express.json());

// Logging middleware — method ve url yazdır, sonraki adıma geç
// buraya yaz

app.get("/books", (req, res) => {
  res.json(books);
});

// Self-request (hazır kod)
const server = app.listen(3000, () => {
  const http = require("http");
  http.get("http://localhost:3000/books", (res) => {
    let body = "";
    res.on("data", (c) => body += c);
    res.on("end", () => { console.log(body); server.close(); });
  });
});

Örnek çözüm

index.js
app.use((req, res, next) => {
  console.log(req.method, req.url);
  next();
});

Beklenen çıktı

GET /books
[{"id":1,"title":"Node.js"}]

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Middleware'den sonraki adıma geçmek için ne çağrılır?

index.js
next()
  • res.send()
  • return
  • app.use()
  • next() Doğru cevap

Açıklama: next() akışı bir sonraki middleware'e veya rotaya geçirir.

2 next'i çağır

Soru
console.log(req.method, req.url); ____();
Cevap
console.log(req.method, req.url); next();

Açıklama: next() ile akış sonraki adıma geçer.

3 Parçayı rolüne eşle

Kavram Anlamı
app.use Middleware ekler
req.method HTTP metodu
req.url İstek yolu
next() Sonraki adıma geçer

Orta seviye bölümündeki tüm dersler