Menu
CoddyTech

Express Router

חלק מהיחידה יסודות Express במסלול ה-Node.js של Coddy. שיעור 19 מתוך 23.

כעת server.js מכיל דפים, נתיבי API ותוכנת ביניים, והוא ממשיך לגדול.

// routes/books.js
const router = express.Router();
router.get('/', (req, res) => res.json(books));
router.get('/:isbn', (req, res) => res.json(findBook(req.params.isbn)));
export default router;

// server.js
app.use('/api/books', booksRouter);

express.Router() יוצר אפליקציה קטנה עם נתיבים משלה, שנשמרת בקובץ משלה. app.use('/api/books', booksRouter) מרכיב אותה: הנתיב / של הנתב מטפל ב-GET /api/books, והנתיב /:isbn שלו מטפל ב-GET /api/books/9780141439518. הקידומת נכתבת פעם אחת, בתוך app.use. שגיאות שנזרקות בתוך נתב עדיין מגיעות למטפל השגיאות של האפליקציה.

בקובץ החדש routes/recipes.js כבר יש נתיב אחד, /tags.

challenge icon

אתגר

קל

server.js ממשיך לגדול. העבר את ה-API של המתכונים לקובץ משלו, routes/recipes.js, שכבר יש בו נתיב שמציג את כל התגיות.

  1. ב-routes/recipes.js, מתחת לנתיב /tags, הוסף את ארבעת נתיבי ה-API מתוך server.js: הרשימה, מתכון אחד לפי מזהה, בקשת POST שמוסיפה מתכון ונתיב שינוי הכמות. בתוך נתב, השמט את החלק /api/recipes מכל נתיב: /api/recipes/:id הופך ל-/:id, והנתיב של הרשימה הופך ל-/.
  2. השאר אותם מתחת ל-/tags. Express מנסה את הנתיבים לפי הסדר, ואם /:id יופיע ראשון, הוא יתפוס את /tags ויחפש מתכון שהמזהה שלו הוא tags.
  3. מחק את ארבעת הנתיבים האלה מתוך server.js.
  4. ב-server.js, ייבא את הנתב מתוך ./routes/recipes.js ועגן אותו ב-/api/recipes באמצעות app.use, במקום שבו היו ארבעת הנתיבים: אחרי express.json() ולפני מטפל השגיאות 404.

נסה זאת: לחץ על Run ושלח בקשה אל /api/recipes/tags. אמור להופיע ["breakfast","dinner","soup","sweet","vegan"]. שלח בקשה אל /api/recipes/2: מתכון הפנקייק, כמו קודם. שלח בקשת POST עם {"title": "Toast"} אל /api/recipes: הסטטוס יהיה 201. לאחר מכן שלח בקשה אל /api/recipes/5/scale?by=2: הסטטוס יהיה 500 ויופיע {"error":"Something went wrong"}, כך ששגיאות שנזרקות בתוך הנתב עדיין מגיעות למטפל השגיאות שלך. כתובות ה-URL לא השתנו; רק המקום שבו הקוד נמצא השתנה.

נסו בעצמכם

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

const router = express.Router();

// כל תגית, פעם אחת, בסדר אלפביתי.
router.get('/tags', (req, res) => {
    const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
    res.json([...tags].sort());
});

// העבירו לכאן את נתיבי /api/recipes מתוך server.js, מתחת ל-/tags.
// בתוך router, הנתיבים הם יחסיים למיקום שבו הוא מותקן.

export default router;
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה יסודות Express

תרגלו בעצמכם: Express אונליין