יסודות

מושגים בסיסיים

לפני שמתחילים לכתוב קוד, חשוב להכיר את המושגים הבסיסיים:


מה זה שרת Web?

שרת Web הוא תוכנה שמחכה לבקשות מלקוחות (דפדפנים, אפליקציות) ומחזירה תשובות.

[לקוח/דפדפן]  ──בקשה──►  [שרת Express]  ──תשובה──►  [לקוח/דפדפן]
     │                        │                         │
     │    GET /users          │                         │
     │ ──────────────────►    │                         │
     │                        │  (מעבד את הבקשה)       │
     │                        │                         │
     │    [{user1}, {user2}]  │                         │
     │ ◄─────────────────────────────────────────────── │

Application Object (app)

ה-Application Object הוא הלב של כל אפליקציית Express.

import express from 'express';
const app = express();  // ← זהו ה-Application Object

מה אפשר לעשות עם app?

פעולה תיאור דוגמה
הגדרת Routes קביעת נתיבים app.get('/path', handler)
הוספת Middleware פונקציות ביניים app.use(middleware)
הגדרות קונפיגורציה app.set('view engine', 'ejs')
הפעלת שרת האזנה לפורט app.listen(3000)

Request Object (req)

אובייקט ה-Request מכיל את כל המידע על הבקשה שהתקבלה מהלקוח.

app.get('/users/:id', (req, res) => {
    console.log(req.method);      // GET
    console.log(req.path);        // /users/123
    console.log(req.params.id);   // 123
    console.log(req.query);       // { sort: 'name' } (מ-URL: ?sort=name)
    console.log(req.body);        // גוף הבקשה (ב-POST)
    console.log(req.headers);     // כותרות HTTP
});

תכונות חשובות של req:

תכונה תיאור דוגמה
req.method סוג הבקשה 'GET', 'POST'
req.path הנתיב '/users/123'
req.params פרמטרים מהנתיב { id: '123' }
req.query Query string { page: '1' }
req.body גוף הבקשה { name: 'John' }
req.headers כותרות HTTP { 'content-type': '...' }
req.cookies עוגיות { session: 'abc' }

Response Object (res)

אובייקט ה-Response משמש לשליחת תשובה ללקוח.

app.get('/', (req, res) => {
    // שליחת טקסט
    res.send('שלום עולם!');

    // או שליחת JSON
    res.json({ message: 'הצלחה!' });

    // או שליחת קובץ HTML
    res.sendFile('/path/to/file.html');

});

מתודות חשובות של res:

מתודה תיאור דוגמה
res.send() שליחת תגובה כללית res.send('Hello')
res.json() שליחת JSON res.json({ ok: true })
res.status() קביעת קוד סטטוס res.status(404)
res.redirect() הפניה לכתובת אחרת res.redirect('/login')
res.render() רנדור תבנית res.render('home')
res.sendFile() שליחת קובץ res.sendFile('/path')
res.download() הורדת קובץ res.download('/file.pdf')

Routing (ניתוב)

Routing הוא הגדרת איך האפליקציה תגיב לבקשות בנתיבים שונים.

מבנה בסיסי:

app.METHOD(PATH, HANDLER);
  • METHOD - סוג בקשת HTTP (get, post, put, delete)
  • PATH - הנתיב בכתובת
  • HANDLER - פונקציה שמטפלת בבקשה

דוגמאות:

// Request GET לדף הבית
app.get('/', (req, res) => {
    res.send('דף הבית');
});

// Request GET עם פרמטר
app.get('/users/:id', (req, res) => {
    res.send(`משתמש מספר ${req.params.id}`);
});

// בקשת POST ליצירת משאב חדש
app.post('/users', (req, res) => {
    res.json({ message: 'משתמש נוצר!' });
});

// בקשת PUT לעדכון
app.put('/users/:id', (req, res) => {
    res.json({ message: 'משתמש עודכן!' });
});

// בקשת DELETE למחיקה
app.delete('/users/:id', (req, res) => {
    res.json({ message: 'משתמש נמחק!' });
});

HTTP Methods

Express תומך בכל מתודות ה-HTTP:

מתודה שימוש דוגמה
GET קבלת מידע קבלת רשימת משתמשים
POST יצירת משאב חדש יצירת משתמש חדש
PUT עדכון מלא החלפת כל פרטי המשתמש
PATCH עדכון חלקי עדכון השם בלבד
DELETE מחיקה מחיקת משתמש
// GET - קבלת כל המשתמשים
app.get('/users', (req, res) => {
    res.json(users);
});

// POST - יצירת משתמש
app.post('/users', (req, res) => {
    const newUser = req.body;
    users.push(newUser);
    res.status(201).json(newUser);
});

// PUT - עדכון מלא
app.put('/users/:id', (req, res) => {
    // החלפת המשתמש במידע החדש
});

// PATCH - עדכון חלקי
app.patch('/users/:id', (req, res) => {
    // עדכון שדות ספציפיים
});

// DELETE - מחיקה
app.delete('/users/:id', (req, res) => {
    // מחיקת המשתמש
});

Middleware

Middleware הן פונקציות שרצות בין קבלת הבקשה לשליחת התשובה.

[בקשה] → [Middleware 1] → [Middleware 2] → [Route Handler] → [תשובה]

צורת Middleware בסיסית:

const myMiddleware = (req, res, next) => {
    // עשה משהו
    console.log('בקשה התקבלה:', req.method, req.path);

    // המשך ל-middleware הבא
    next();
};

// שימוש ב-middleware
app.use(myMiddleware);

סוגי Middleware:

1. Application-level
// רץ על כל הבקשות
app.use((req, res, next) => {
    console.log('Time:', Date.now());
    next();
});
2. Router-level
const router = express.Router();
router.use((req, res, next) => {
    // רק לנתיבים של הראוטר הזה
    next();
});
3. Built-in Middleware
// פרסור JSON
app.use(express.json());

// פרסור URL-encoded
app.use(express.urlencoded({ extended: true }));

// קבצים סטטיים
app.use(express.static('public'));
4. Third-party Middleware
import cors from 'cors';
import morgan from 'morgan';

app.use(cors());          // אפשור CORS
app.use(morgan('dev'));   // לוגים

שרשרת Middleware

Middleware רצים בסדר שבו הם מוגדרים:

import express from 'express';
const app = express();

// Middleware 1 - רץ ראשון
app.use((req, res, next) => {
    console.log('1. Middleware ראשון');
    next();
});

// Middleware 2 - רץ שני
app.use((req, res, next) => {
    console.log('2. Middleware שני');
    next();
});

// Route Handler - רץ אחרון
app.get('/', (req, res) => {
    console.log('3. Route Handler');
    res.send('סיום!');
});

// Output בקונסול:
// 1. Middleware ראשון
// 2. Middleware שני
// 3. Route Handler

סיכום היסודות

מושג תיאור
app האובייקט הראשי של האפליקציה
req מידע על הבקשה
res שליחת תשובה ללקוח
Routing הגדרת נתיבים ופעולות
Middleware פונקציות ביניים לעיבוד
next() מעבר ל-middleware הבא

← חזרה לרקע | המשך לתחביר →

בדקו את עצמכם

נסו לענות לבד לפני שאתם פותחים את התשובה.

  1. מה הם req ו-res?

    1. שני משתנים גלובליים
    2. שני קבצים
    3. שני Middleware
    4. הבקשה שהגיעה מהלקוח, והתשובה שנשלח לו
    הצגת התשובה

    תשובה ד. כל handler מקבל אותם כפרמטרים.

  2. מה זה Middleware?

    1. שרת נוסף
    2. פונקציה שרצה בין הגעת הבקשה לתשובה, ויכולה לעבד אותה או להעביר הלאה עם next()
    3. מסד נתונים
    4. קובץ HTML
    הצגת התשובה

    תשובה ב. לוגים, פענוח JSON ובדיקת התחברות הם Middleware.