المسارات المتداخلة
جزء من قسم أساسيات 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).
التحدي
سهل- يعرض
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;