Birleştirme
- Node.js kursu
- Orta seviye
- Ders 69/116
- 6 dk
Tüm parçaları birleştirerek çalışan bir API yazarsın.
Birleştirme
Son ders birleştirme: tüm parçaları (veri modeli, Express, rotalar, middleware) tek bir çalışan API'de topluyoruz. Ayrıca bir error middleware ekleyeceğiz.
Express'te error middleware dört argümanlı tanımlanır: (err, req, res, next). Bu imza, Express'e bunun bir hata işleyici olduğunu söyler. Rotalardan fırlatılan veya next(err) ile geçirilen hatalar buraya düşer. res.status(500).json({ error: err.message }) ile istemciye hata iletisi döndürülür. 500 “Sunucu hatası” demektir. Bu ders, API'yi üretim hazır hale getiren son parçadır; çünkü hatalar kontrollü biçimde ele alınır.
Error middleware imzası
Express, bir middleware'in error middleware olduğunu argüman sayısından anlar. Normal middleware 3 argümanlıdır (req, res, next); error middleware 4 argümanlıdır (err, req, res, next).
Eğer error middleware 3 argümanlı yazarsan Express onu normal middleware sanar ve hatalar oraya düşmez. Bu yüzden err parametresi başta olmak üzere dört argüman yazmak zorunludur. Hata oluştuğunda Express bu middleware'i çağırır ve err ile hata nesnesini geçirir. err.message hata iletisini verir. res.status(500) ile sunucu hatası kodunu ayarlayıp .json() ile yanıtı gönderirsin. Böylece uygulama beklenmedik hatalarda çökmez.
Uygulama Error middleware ekle
Bir error middleware tanımla. Dört argümanlı (err, req, res, next) bir fonksiyon olsun. res.status(500).json({ error: err.message }) ile hata yanıtını gönder. Middleware rotalardan SONRA olsun. Self-request hazır.
Başlangıç kodu
const books = [];
books.push({ id: 1, title: "Node.js" });
const express = require("express");
const app = express();
app.use(express.json());
app.use((req, res, next) => {
console.log(req.method, req.url);
next();
});
app.get("/books", (req, res) => {
res.json(books);
});
// Error middleware (4 argümanlı: err, req, res, next) — 500 ile JSON döndür
// buraya yaz
// 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
app.use((err, req, res, next) => {
res.status(500).json({ error: err.message });
});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 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
err |
Hata nesnesi |
res.status(500) |
Sunucu hatası kodu |
err.message |
Hata iletisi |
4 argüman |
Error middleware işareti |
2 Express error middleware kaç argüman alır?
(err, req, res, next)- 4 Doğru cevap
- 3
- 2
- 5
Açıklama: Error middleware 4 argümanlıdır; bu imza onu işaretler.
3 status kodunu ayarla
res.____(500).json({ error: err.message });
res.status(500).json({ error: err.message });
Açıklama: res.status(500) sunucu hatası kodunu ayarlar.