Özet - Routing
- Node.js kursu
- Orta seviye
- Ders 41/116
- 5 dk
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.
Başlangıç kodu
const express = require("express");
const app = express();
// bir kullanıcı router'ı oluştur, iki kullanıcılı bir dizi tanımla
// router kök rotada tüm kullanıcıları JSON olarak gönder
// router :id rotasında tek kullanıcıyı JSON olarak gönder
// router'ı /users altında bağla
// /search rotasında query ile arama yap
// buraya yaz
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(); });
});
});Örnek çözüm
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(); });
});
});Beklenen çıktı
Yanıt: {"id":1,"name":"Ayşe"}
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Tek bir kullanıcıyı hangi rota döndürür?
GET /users/5- GET /users/:id Doğru cevap
- GET /users
- GET /search?q=5
- POST /users
Açıklama: /users/:id rota parametresi ile tek kullanıcı döner.
2 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
userRouter.get('/:id') |
Tek kullanıcı |
req.params.id |
Rota kimliği |
req.query.q |
Arama dizesi |
app.use('/users', ...) |
Router'ı bağlar |