Menu
CoddyTech

İç İçe Rotalar

Coddy'nin Node.js Journey'sinin Express Temelleri bölümünün bir parçası. Ders 20 / 23.

Yorumlar bir tarife aittir, bu yüzden URL’leri onun altında yer alır: /api/recipes/2/reviews.

const chapters = express.Router({ mergeParams: true });

chapters.get('/', (req, res) => {
    res.json(chaptersOf(req.params.isbn));
});

app.use('/api/books/:isbn/chapters', chapters);

Bir yönlendiricinin req.params nesnesi yalnızca kendi yollarının parametrelerini tutar. Bağlama yolundaki :isbn uygulamaya aittir, bu nedenle yönlendiricinin içinde undefined olur; yönlendirici mergeParams: true ile oluşturulmadığı sürece.

routes/reviews.js dosyası, reviews nesnesi ve hasRecipe(id) yardımcı işleviyle hazır.

challenge icon

Görev

Kolay

Ziyaretçiler bir tarife yorum bırakabilir. Bir yorum tek bir tarife aittir, bu nedenle URL'si o tarifin altında yer alır: /api/recipes/1/reviews.

  1. routes/reviews.js dosyasında yönlendiricinin, bağlandığı yoldan tarif kimliğini okuyabilmesini sağla. Aksi takdirde yönlendiricinin içinde req.params.id değeri undefined olur (ders metnine bak).
  2. / için bir GET rotası ekle. Bu rota, tarifin yorumlarını JSON listesi olarak döndürür; henüz hiç yorumu yoksa boş bir liste olan [] döndürür. Yorumları reviews nesnesinde, her tarif kimliği için bir liste olacak şekilde sakla; örneğin { "1": [{ "stars": 5, "text": "Lovely" }] }.
  3. / için bir POST rotası ekle. Bu rota gövdeden stars ve text değerlerini okur, yorumu ilgili tarifin listesine ekler ve 201 durum koduyla birlikte yorumu yanıt olarak gönderir: {"stars": 5, "text": "Lovely"}. Yalnızca bu iki alanı sakla ve gönder.
  4. Her iki rotada da hasRecipe(id) değeri false olduğunda 404 durum koduyla birlikte {"error": "No such recipe"} yanıtını gönder.
  5. server.js dosyasında yönlendiriciyi içe aktar ve tarifler yönlendiricisinin yanına, 404 işleyicisinden önce, /api/recipes/:id/reviews yoluna bağla.

Deneyin: “Oyna” düğmesine bas ve /api/recipes/1/reviews isteğini gönder: []. POST'u seç ve {"stars": 5, "text": "Lovely"} değerini /api/recipes/1/reviews adresine gönder: 201 durum kodu ve yorum. GET ile /api/recipes/1/reviews isteğini yeniden gönder: [{"stars":5,"text":"Lovely"}]. /api/recipes/2/reviews isteğini gönder: her tarif kendi yorumlarını tuttuğu için sonuç yine [] olur. /api/recipes/99/reviews isteğini gönder: 404 durum kodu ve {"error":"No such recipe"}.

Kendin dene

import express from 'express';
import { recipes } from '../data.js';

// Tarif id değerine göre yorumlar, örneğin { 1: [{ stars: 5, text: 'Lovely' }] }.
const reviews = {};

const hasRecipe = (id) => recipes.some((recipe) => recipe.id === Number(id));

const router = express.Router();

// GET / bir tarifin yorumlarını listeler. POST / bir yorum ekler.

export default router;

Express Temelleri bölümündeki tüm dersler

Kendi başına pratik yap: Express playground