מחרוזות שאילתה
חלק מהיחידה יסודות Express במסלול ה-Node.js של Coddy. שיעור 5 מתוך 23.
דף רשימה זקוק לעיתים קרובות לאפשרויות, כמו אילו מתכונים להציג, ויצירת נתיב חדש לכל אפשרות תהיה מוגזמת.
app.get('/books', (req, res) => {
const { author } = req.query;
res.send(author ? 'Books by ' + author : 'All books');
});מחרוזת השאילתה היא החלק בכתובת ה-URL שמופיע אחרי ?, ו-Express מציבה אותה בתוך req.query, שהוא אובייקט. const { author } = req.query הוא קיצור של const author = req.query.author. הבקשה GET /books?author=Austen מחזירה req.query.author === 'Austen'. בלי ? הערך הוא undefined. כמה אפשרויות מחברים באמצעות &: /books?author=Austen&year=1813.
פרמטר של נתיב הוא חלק מהנתיב ומציין פריט אחד. אפשרות שאילתה מסננת או ממיינת רשימה, ואפשר להשמיט אותה.
אתגר
קלמבקרים רוצים לראות רק מתכונים טבעוניים, או רק ארוחות ערב, בלי ליצור דף חדש לכל תגית.
- ב־
server.js, שנו את הנתיב/recipes. קראו את האפשרותtagממחרוזת השאילתה. לכל מתכון ב־data.jsיש רשימתtags, כמו['vegan', 'soup']. - כאשר מציינים תגית, שלחו רק את הכותרות של המתכונים שהרשימה
tagsשלהם כוללת אותה, כותרת אחת בכל שורה, כפי שהנתיב עושה כעת. - כאשר לא מציינים תגית, שלחו את כל הכותרות, כמו קודם.
- כאשר לאף מתכון אין את התגית, שלחו תגובה ריקה עם סטטוס 200.
נסו זאת: לחצו על Run ושלחו את /recipes?tag=vegan. אתם אמורים לראות שתי שורות: Tomato Soup ו־Lentil Curry. שלחו את /recipes?tag=dinner: Lentil Curry ו־Fish & Chips. שלחו את /recipes?tag=dessert: תגובה ריקה, משום שלאף מתכון אין את התגית הזאת. שלחו את /recipes: את כל ארבע הכותרות.
נסו בעצמכם
import express from 'express';
import { recipes } from './data.js';
const app = express();
app.get('/', (req, res) => {
res.send('Welcome to Recipe Box');
});
// type('text') שולחת טקסט פשוט, כך שכל כותרת מופיעה בשורה נפרדת.
app.get('/recipes', (req, res) => {
res.type('text').send(recipes.map((recipe) => recipe.title).join('\n'));
});
app.get('/recipes/:id', (req, res) => {
const recipe = recipes.find((r) => r.id === Number(req.params.id));
if (!recipe) {
res.status(404).send('No such recipe');
return;
}
res.send(recipe.title);
});
app.get('/about', (req, res) => {
res.send('Recipe Box collects family recipes.');
});
app.listen(3000, () => {
console.log('Recipe Box is running on port 3000');
});
כל השיעורים ביחידה יסודות Express
תרגלו בעצמכם: Express אונליין