Menu
CoddyTech

معاملات المسار

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

سيحتوي Recipe Box على وصفات كثيرة، ولن تنتهي أبدًا الحاجة إلى مسار واحد لكل وصفة.

app.get('/weather/:city', (req, res) => {
    res.send('Forecast for ' + req.params.city);
});

جزء المسار الذي يبدأ بنقطتين رأسيتين هو معامل مسار: يطابق أي قيمة، ويضع Express تلك القيمة في req.params. يرسل GET /weather/oslo القيمة Forecast for oslo.

يكون المعامل دائمًا سلسلة نصية. يعطي GET /rooms/12 القيمة '12'، وتكون '12' === 12 خاطئة، لذا حوّله باستخدام Number(...) قبل مقارنته بالأرقام.

عندما لا يكون الشيء المطلوب موجودًا، أجب برمز الحالة 404: يعيّن res.status(404).send('No such city') الحالة، ثم يرسل الرد.

challenge icon

التحدي

سهل

تحصل كل وصفة على صفحة خاصة بها، في مسار يتضمن معرّفها: /recipes/1، و/recipes/2، وهكذا.

  1. في server.js، أضف مسارًا واحدًا لـ /recipes/:id. يبحث عن الوصفة في recipes (من data.js) التي يطابق id فيها المعرّف الموجود في المسار. ويرسل عنوان تلك الوصفة فقط، كنص: يرسل /recipes/2 القيمة Pancakes.
  2. المعرّف الموجود في المسار سلسلة نصية، بينما المعرّفات في data.js أرقام، لذا حوّله قبل المقارنة.
  3. عندما لا توجد وصفة تحمل ذلك المعرّف، عيّن الحالة إلى 404 وأرسل النص No such recipe.

جرّب ذلك: اضغط على «العب» وأرسل /recipes/2. ينبغي أن ترى Pancakes مع الحالة 200. أرسل /recipes/4: Fish & Chips. أرسل /recipes/99: No such recipe مع الحالة 404.

جرّب بنفسك

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('/about', (req, res) => {
    res.send('Recipe Box collects family recipes.');
});

app.listen(3000, () => {
    console.log('Recipe Box is running on port 3000');
});
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

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

تدرّب بنفسك: Playground لـ Express