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.
אתגר
קלserver.js ממשיך לגדול. העבר את ה-API של המתכונים לקובץ משלו, routes/recipes.js, שכבר יש בו נתיב שמציג את כל התגיות.
- ב-
routes/recipes.js, מתחת לנתיב/tags, הוסף את ארבעת נתיבי ה-API מתוךserver.js: הרשימה, מתכון אחד לפי מזהה, בקשת POST שמוסיפה מתכון ונתיב שינוי הכמות. בתוך נתב, השמט את החלק/api/recipesמכל נתיב:/api/recipes/:idהופך ל-/:id, והנתיב של הרשימה הופך ל-/. - השאר אותם מתחת ל-
/tags. Express מנסה את הנתיבים לפי הסדר, ואם/:idיופיע ראשון, הוא יתפוס את/tagsויחפש מתכון שהמזהה שלו הואtags. - מחק את ארבעת הנתיבים האלה מתוך
server.js. - ב-
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;
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה יסודות Express
תרגלו בעצמכם: Express אונליין