Kodokon kodokon.com

Express: المسارات والبرمجيات الوسيطة

ثبِّت Express وهيكِل خادمك الأول باستخدام المسارات، ومعاملات الرابط، والبرمجيات الوسيطة.

9 دقيقة · 3 أسئلة

افتح هذا الدرس في Kodokon

أنت تعرف بالفعل كيفية تشغيل خادم باستخدام الوحدة الأصلية http: كل شيء يدوي هناك، من قراءة الرابط إلى تجميع الترويسات. إن Express هو إطار العمل الذي وحّد تطوير الويب في جانب Node: التوجيه، والبرمجيات الوسيطة، وواجهة برمجية موجزة، دون إخفاء أيّ شيء عن البروتوكول. أنشئ مشروعًا وثبِّته.

BASH
mkdir kodokon-api
cd kodokon-api
npm init -y
npm install express

أضِف الخاصية type بالقيمة module إلى ملف package.json الخاص بك: سيستخدم المشروع بأكمله وحدات ES. ثم أنشئ server.js. تكفي بضعة أسطر لخادم عامل: تنشئ التطبيق، وتصرِّح بمسار، وتستمع على منفذ.

JAVASCRIPT
import express from "express";

const app = express();

app.get("/", (req, res) => {
  res.send("Kodokon API online");
});

app.listen(3000, () => {
  console.log("http://localhost:3000");
});
server.js - شغِّله باستخدام node server.js

يربط المسار (route) طريقة HTTP ومسارًا (path) بدالة. تُصرَّح المقاطع الديناميكية بنقطتين رأسيتين: في /users/:id، تتوفر القيمة في req.params.id. أما معاملات الاستعلام (?q=node) فتظهر في req.query. احتفظ بهذا التمييز في ذهنك: المسار يحدد المورد، وسلسلة الاستعلام تصقل الطلب.

JAVASCRIPT
app.get("/users/:id", (req, res) => {
  const { id } = req.params;
  res.json({ id, name: "User " + id });
});

app.get("/search", (req, res) => {
  const { q } = req.query;
  res.json({ query: q ?? "" });
});

إن البرمجية الوسيطة (middleware) دالة تُنفَّذ بين وصول الطلب ومسارك. توقيعها: (req, res, next). يمكنها إثراء req، أو الرد مباشرة، أو تمرير التحكم باستخدام next(). إن Express في جوهره ليس سوى سلسلة من البرمجيات الوسيطة: التسجيل، والمصادقة، وتحليل جسم الطلب. تسجل هذه البرمجية كل طلب مع مدته:

JAVASCRIPT
app.use((req, res, next) => {
  const start = Date.now();
  res.on("finish", () => {
    const ms = Date.now() - start;
    console.log(`${req.method} ${req.url} ${ms}ms`);
  });
  next();
});
صرِّح بها قبل مساراتك لتسجيل كل شيء

اختبار المعرفة

تأكّد من أنك تذكّرت النقاط الأساسية في هذا الدرس.

  1. صُرِّح بمسار عنوانه /users/:id. أين تقرأ قيمة id؟
    • في req.query.id
    • في req.params.id
    • في req.body.id
  2. في برمجية Express الوسيطة، ماذا يفعل استدعاء next()؟
    • يرسل الرد إلى العميل
    • يمرِّر التحكم إلى البرمجية الوسيطة أو المسار التالي
    • يعيد تشغيل الخادم
    • يلغي الطلب الحالي
  3. ما الذي تحتاج إلى إضافته إلى package.json لاستخدام صياغة import في Node.js؟
    • الخاصية type بالقيمة module
    • الخاصية esm بالقيمة true
    • لا شيء، فهذا هو السلوك الافتراضي