הגענו לחלק האחרון, החלק שבו נחבר את כל מה שעשינו עד עכשיו, זה החלק שאנחנו ממש מקימים את השרת עצמו.
נתחיל בלראות את הקובץ app.js ואחרי זה נדבר קצת על מה הדברים בו אומרים ועושים.
const path = require("path"); const express = require("express"); const mongoose = require('mongoose'); const loginRoutes = require("./routes/login"); const app = express(); mongoose.connect("mongodb://localhost:27017/mydb", { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => { console.log('connected'); }).catch(() => { console.log('not connected'); }); app.use(express.urlencoded({ extended: true })); app.use(express.json()); app.use("/images", express.static(path.join("server/images"))); app.use((req, res, next) => { res.setHeader( "Access-Control-Allow-Origin", "*" ); res.setHeader( "Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization" ) res.setHeader( "Access-Control-Allow-Methods", "GET, POST, PATCH, PUT, DELETE, OPTIONS" ) next(); }); app.use("/api/login", loginRoutes); module.exports = app;
אני שמח להכיר לכם את השרת עצמו, אחרי הספריות, המודלים, הראוטים והפונקציות הגענו לדובדבן, זה הקובץ שמיצר את השרת והוא נקודת ההתחלה של כל בקשה לשרת.
נעבור בקצרה על הקוד ונראה מה החלקים החשובים שצריך להכיר.
שורה 1:
זה מודל שמאפשר לנו אנטרקציה עם ספריות וקבצים בצד השרת. אם אנחנו לא צריכים לגשת לספריות/קבצים בצד שרת, אז אין לנו צורך במודל הזה.
שורה 2:
זה מודל האקספרס שלנו, אני חושב שזה די ברור למה אנחנו צריכים אותו, הוא לב השרת שלנו.
שורה 3:
מודל שעוזר לנו לתקשר עם mongodb, לא חייבים להשתמש בו, אבל שימוש בו הופך את בעבודה להרבה יותר פשוטה. כמובן שאם הבסיס נתונים שלנו הוא mySql או msSql וכו' אז ממש שאין בו צורך.
שורה 5:
בשורה זו אנחנו מושכים את הראוט שיצרנו אל השרת שלנו כדי שבהמשך נוכל להשתמש בו.
במידה שיצרנו עוד קבצים עם ראוטים שונים, נייצר בדף למעלה עוד משתנה עבור כל ראוט.
שורה 9 – 14:
זה החיבור שלנו לבסיס הנתונים, שימו לב שבמידה שאין בסיס נתונים בשם שכתוב לו בכתובת שכתבנו שלו אז באופן אוטומטי הוא יצור בסיס נתונים בשם הכתוב, במקרה הזה mydb.
אם יש צורך בשם משתמש וסיסמה, זה המקום לשרשר אותם בשביל החיבור.
במידה שיש חיבור אנחנו מחזירים לוג בשרת שהחיבור תקין ובמידה שהחיבור לא צלח אנחנו מחזירים הודעה מתאימה גם לזה.
שורה 16:
express.urlencoded – מבצע חילוץ של הנתונים שמגיעים בכל בקשה מצד הגולש/ המשתמש כך שבפונקציות שלנו נקבל את המידע במבנה מתאים לעבודה.
שורה 17:
express.json – כמו בשורה 16 גם הוא סוג של מחלץ מידע רק שהפעם למידע במבנה JSON.
שורה 18:
זו השורה שבשבילה קראנו ל-PATH, אנחנו מסמנים את מיקום הספריה שצריך לפנות כאשר מדובר בניתוב images.
שורה 20 – 34:
אלו שורות ההרשאות, כאשר מגיע בקשה מצד הלקוח, אנחנו בודקים את ההרשאות של הבקשה שלו ואם הן מתאימות להרשאות בצד השרת, אז הבקשה ממשיכה, במידה שלא אז היא נכשלת והשרת מחזיר ללקוח שגיאה.
נגיד שבשורה 31 נמחק את GET, כל בקשה שתגיע למשיכת מידע לא תעבור ל-API ותכשל כבר בהגעה לשרת. זו דרך טובה לשמור ולמנוע פעולות מסויימות ממשתמשים.
שורה 36:
שיוך של הראוט ל-URL שצריך להפעיל אותו, כך שהבקשה שמגיעה תנותב לכיוון הנכון.
שורה 37:
הוספה של כל מה שכתבנו למעלה לשרת, כל השורות למעלה הם סוג של קונפיגורציה לשרת.