Node.js
Özet - Routing
param, query ve Router'ı birleştirerek bir kullanıcı API'si yazarsın.
Özet: Kullanıcı API'si
Bu derste öğrendiklerimizi birleştirerek bir kullanıcı API'si yazacağız: rota parametreleri, query parametreleri ve express.Router birlikte.
API şöyle çalışır: GET /users tüm kullanıcıları listeler, GET /users/:id tek bir kullanıcıyı döndürür, GET /search?q=... isme göre arama yapar. Router, kullanıcı rotalarını /users altında gruplar; arama rotası ise uygulama kökünde kalır. Bu, gerçek bir REST API'nin iskeletidir: kaynak rotaları router ile gruplanır, arama isteğe bağlı parametrelerle query olarak yapılır. res.json ile JSON yanıtı göndeririz.
Parçaları birleştirme
API üç parçadan oluşur. Birincisi router: userRouter.get("/", ...) ve userRouter.get("/:id", ...), app.use("/users", userRouter) ile bağlanır. İkincisi arama: app.get("/search", (req, res) => { ... req.query.q ... }).
:id rotasında users.find ile kimliği eşleşen kullanıcıyı buluruz. Number(req.params.id) ile dize parametreyi sayıya çeviririz, çünkü users dizisinde id sayıdır. /search rotasında req.query.q ile arama dizesini alır ve users.filter ile ismi içeren kullanıcıları buluruz. Her rota res.json ile JSON döndürür. Bu, REST API'lerin standart yapısıdır.
Uygulama Kullanıcı API'sini yaz
const userRouter = express.Router() tanımla. let users = [{ id: 1, name: "Ayşe" }, { id: 2, name: "Mehmet" }] tanımla. userRouter.get("/", (req, res) => res.json(users)) ekle. userRouter.get("/:id", (req, res) => { const user = users.find(function(u) { return u.id === Number(req.params.id); }); res.json(user); }) ekle. app.use("/users", userRouter) ile bağla. app.get("/search", (req, res) => { const found = users.filter(function(u) { return u.name.includes(req.query.q); }); res.json(found); }) ekle. Sunucu /users/1'e istek yapar.
Örnek çözümü göster
const express = require("express");
const app = express();
const userRouter = express.Router();
let users = [{ id: 1, name: "Ayşe" }, { id: 2, name: "Mehmet" }];
userRouter.get("/", (req, res) => res.json(users));
userRouter.get("/:id", (req, res) => {
const user = users.find(function(u) { return u.id === Number(req.params.id); });
res.json(user);
});
app.use("/users", userRouter);
app.get("/search", (req, res) => {
const found = users.filter(function(u) { return u.name.includes(req.query.q); });
res.json(found);
});
const server = app.listen(3000, () => {
const http = require("http");
http.get("http://localhost:3000/users/1", (res) => {
let body = "";
res.on("data", (c) => body += c);
res.on("end", () => { console.log("Yanıt: " + body); server.close(); });
});
});
Kendini test et
-
Tek bir kullanıcıyı hangi rota döndürür?
GET /users/5
- GET /users/:id
- GET /users
- GET /search?q=5
- POST /users
Cevabı göster
GET /users/:id — /users/:id rota parametresi ile tek kullanıcı döner.
-
Parçayı rolüne eşle
- userRouter.get('/:id')
- Tek kullanıcı
- req.params.id
- Rota kimliği
- req.query.q
- Arama dizesi
- app.use('/users', ...)
- Router'ı bağlar
Sıradaki ders: Quiz modeli