Menu
CoddyTech

المسارات المتداخلة

جزء من قسم أساسيات Express في رحلة Node.js على Coddy. الدرس 17 من 20.

تنتمي المراجعات إلى وصفة واحدة، لذا تكون عناوين URL الخاصة بها ضمن مسارها: /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);

يحتوي req.params الخاص بالموجّه على معاملات مساراته هو فقط. ينتمي :isbn في مسار الإرفاق إلى التطبيق، لذا تكون قيمته داخل الموجّه undefined، ما لم يُنشأ الموجّه باستخدام mergeParams: true.

الملف routes/reviews.js جاهز، ويحتوي على كائن reviews ومساعد hasRecipe(id).

challenge icon

التحدي

سهل
  • يعرض GET /api/recipes/:id/reviews مراجعات تلك الوصفة، وتكون النتيجة [] في البداية.
  • يضيف POST مع { "stars", "text" } مراجعة واحدة، ويعيدها مع 201.
  • للوصفة غير الموجودة: 404 مع { "error": "No such recipe" }.

أرسل مراجعة للوصفة 1، ثم أرسل GET /api/recipes/1/reviews وGET /api/recipes/99/reviews.

جرّب بنفسك

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

// التقييمات حسب معرّف الوصفة، مثل { 1: [{ stars: 5, text: 'Lovely' }] }.
const reviews = {};

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

const router = express.Router();

// يعرض GET / تقييمات وصفة، ويضيف POST / تقييمًا واحدًا.

export default router;

جميع دروس أساسيات Express