יסודות
מושגים בסיסיים
לפני שמתחילים לכתוב קוד, חשוב להכיר את המושגים הבסיסיים:
מה זה שרת 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 הבא |
בדקו את עצמכם
נסו לענות לבד לפני שאתם פותחים את התשובה.
-
מה הם
reqו-res?הצגת התשובה
תשובה ד. כל handler מקבל אותם כפרמטרים.
-
מה זה Middleware?
הצגת התשובה
תשובה ב. לוגים, פענוח JSON ובדיקת התחברות הם Middleware.