معاملات المسار
جزء من قسم أساسيات 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') الحالة، ثم يرسل الرد.
التحدي
سهلتحصل كل وصفة على صفحة خاصة بها، في مسار يتضمن معرّفها: /recipes/1، و/recipes/2، وهكذا.
- في
server.js، أضف مسارًا واحدًا لـ/recipes/:id. يبحث عن الوصفة فيrecipes(منdata.js) التي يطابقidفيها المعرّف الموجود في المسار. ويرسل عنوان تلك الوصفة فقط، كنص: يرسل/recipes/2القيمةPancakes. - المعرّف الموجود في المسار سلسلة نصية، بينما المعرّفات في
data.jsأرقام، لذا حوّله قبل المقارنة. - عندما لا توجد وصفة تحمل ذلك المعرّف، عيّن الحالة إلى 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');
});
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس أساسيات Express
تدرّب بنفسك: Playground لـ Express