חמש סיבות למה גם לכם כדאי להכיר את Nest.js

בפוסט זה אני מספר על הדברים שאהבתי בנסט, על התהליך שעברתי בפיתוח צד שרת ובכלל בזכות הפריימוורק.

מחבר אחיה חביבסקרפינג נעים חברים


איך הכל התחיל?

כשקיבלתי את המשימה לבנות API קטן בNest.js הוותק שלי בחברה היה ותק של שלושה ימים בלבד. המטרה הייתה לבחון אפשרות להשתמש בפריימוורק, כדי לבנות את הצד שרת החדש שלנו שייכתב בnode.js. 

 

שמחתי מאוד על המשימה הזאת. 

Nest.js הייתה טכנולוגיה ברשימת הטכנולוגיות שתכננתי לחקור יום אחד, שמעתי עליה כמה דברים טובים, והיא סקרנה אותי. יותר מהפריימוורק עצמו, עניינה אותי TypeScript, שהייתה גם ברשימה שלי, וידעתי שזו אחלה דרך ללמוד את השפה.

 

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

1. סדר ודעתנות-

נסט מאופיינת בדעתנות, יש לנסט דוקומנטציה נהדרת שנוגעת בהמון אספקטים של פיתוח צד שרת, ונראה שיש לפריימוורק דעה, כיצד יש לפתח כל אספקט במערכת. יש משהו קצת מגביל בדעתנות הזאת, אבל לדעתי היא דווקא די מוצלחת כאשר הצוות מתבסס על ג'וניורים. 

כשהתחלתי לפתח בנסט, הייתי עם שנה ניסיון, בשנה הזאת יצא לי לבנות כמה שרתי node + express ויצא לי לראות איך שרת מתבלגן כשאין קו מסודר. נסט חוסכת במידה מסוימת את הבלאגן בכך שהיא מציעה דרך מסודרת לבנות את השרת. במידה מסוימת פיתוח בנסט מזכיר קצת מסע, מסע של למידה של הדוקומנטציה. מסע שבסופו, גם מפתח ג'וניור יבין דבר או שניים על פיתוח צד שרת.
אני חושב שגם בהיבט של פיתוח בצוות, הדעתנות והסדר שנסט מציעה, מאפשרת לכתוב קוד מסודר ולעבוד יותר טוב בשיתוף פעולה, כשמיישרים קו עם הדרך הנסטית לעשות את הדברים.

 

2. דוקומנטציה וקונספטים חדשים-

בהקשר לסעיף הקודם לנסט יש אחלה דוקמנטציה, וזה דבר חשוב מאוד לפריימוורק ששואף לתת מענה לכל השאלות, ואבסטרקציה לרוב הספריות הפופולריות של node.js.
מה שמגניב בדוקומנטציה של נסט בהיבט שלי כמפתח מתחיל, זה שהדוקומנטציה חשפה אותי לקונספטים בפיתוח צד שרת שלא הכרתי.

כי יש את הדברים שאתה יודע שאתה לא יודע, ויש את הדברים שאתה לא יודע שאתה לא יודע.

נסט עזרה לי לגלות גם את מה שאני לא יודע שאני לא יודע (ומן הסתם יש עוד הרבה ללמוד). נסט עזרה לי ללמוד עוד על security, logging, dependency injection, ORMs, testing, validation ועוד מלא דברים מגניבים. תוך כדי העבודה עם נסט יצא לי להכיר כל מיני ספריות פופולריות בnode.js כמו TypeORM, passport, Mongoose, RxJS, Jest , OpenApi ועוד.

נסט לא רק נותנת אבסטקציה לכל הספריות האלה, אלא גם מספקת בדוקומנטציה הנהדרת שלה את התשובה למה? נותנת הסבר קצר על הספרייה ועל הקונספט, עם קישור לאתר של הספריה, ובכך מספקת גם את המידע ואת הדרך להרחיב במידה ויש צורך.

 

3. גולת הכותרת - TypeScript-


אולי הbenefit הגדול ביותר בעבודה עם Nest.js. נסט לא מחייבת עבודה עם טייפסקריפט תוכלו לכתוב בה עם JS, (לא שניסיתי, כך כתוב בדוקומנטציה). אבל התחושה היא שנסט וטייפסקריפט פשוט הולכות יד ביד. כל מיני פיצ'רים וקונספטים משמעותיים בנסט פשוט מבוססים על TS. כמו Dependecy Injection, DTO, OpenApi ועוד

הרווח הוא שלי, כי הרבה לפני שהתחלתי לעבוד בWith רציתי ללמוד TypeScript, אבל ללמוד את השפה ככה סתם, זה די משעמם בעיניי. מרגיש לי די מיותר לשבת וללמוד את הפיצ'רים של TypeScript בלי לממש ולבנות איזה פרוייקט. נסט בשבילי הייתה אחלה סיבה לעבוד עם TS ולהתמקצע בה. היום אני ממש אוהב TS ואעדיף לכתוב בה גם אפליקציות בפריימוורקים אחרים שיוצא לי לעבוד איתם (בצד לקוח).

 

4. מידול-


מאוד שמחתי לראות שנסט מציעה דרך למדל את הקוד. אחד הקונספטים הבסיסיים של נסט, הוא עבודה בצורה מודולרית, עם שלוש קבצים בסיסיים עיקריים Module, Controller וProvider.
ניסיתי לכתוב כאן בקצרה על כל קובץ, אבל הרגשתי שבלי לראות את הקוד יהיה קשה למי שלא מכיר להבין על מה אני מדבר, אז בנוסף להסבר קצר בהמשך, ערכתי סרטון של 5.5 דקות למי שרוצה שמסביר על שלושת הקבצים הבסיסיים של של המודול בנסט - קישור לסרטון

  • הController אחראי לנהל את הגישה לApi, את כל מה שקשור לRequest ולResponse, בוא בדרך כלל נכניס את כל הקשור לאבטחה, וולידציות ועוד.
  • הProvider יהיה אחראי על הbusiness logic של האפליקציה, על החיבור לדאטה בייס או לApi צד שלישי, לרוב, כמובן שתוכלו לעבוד עם מספר Providers ולתת להם אחריות שונה בתוך אותה מודול כראות עיניכם (כנ"ל קונטרולרים). 
  • הModule, יהיה אחראי כשמו על המידול של היחידה הלוגית בתוך האפליקציה, בו נגדיר את התלויות בין הקבצים, איזה קבצי קונפיג וסרביסים אנחנו מייבאים ליחידה הזאת, ואיזה אנחנו חושפים לייבוא מיחידות אחרות. קובץ זה לוקח חלק משמעותי במערכת הdependency injection של נסט, שעליה ניתן וראוי לכתוב פוסט נפרד.

 

5. אבסטרקציה ואחידות בקוד-

נסט עוטפת המון ספריות ידועות ופופולריות של node.js, ומגישה למפתח אבסטרקציה נסטית. ספריות כמו Express, Axios, Passport, OpenApi, Jest, ORMs ועוד ועוד. נסט עוטפת אותם בApi נסטי, המלווה בדקורטורים (גם קונספט נחמד שהייתי צריך להתרגל אליו, ובסוף התאהבתי בו).

צורת העבודה הזאת, יוצר בסופו של דבר אחידות בקוד, ותורם לסדר שנסט מציעה, בכך, שהקוד נראה דומה בחלקים השונים של האפליקציה.

 

לסיכום-

אני חושב שהעבודה עם נסט, עזרה לי ללמוד הרבה על פיתוח צד שרת ופיתוח בnode.js למדתי קונספטים מעניינים בשנה הזאת, והכרתי המון פיצ'רים מגניבים בTS. אני ממליץ לפחות לנסות את הפריימוורק.

אני חושב שהיום גם אם ארצה או אצטרך לעבוד עם טכנולוגיה אחרת, אביא איתי את העקרונות שלמדתי בעבודה עם Nest.js לפחות כנקודת השוואה.

אגב, כהמשך לפיתוח אצלינו של הצד שרת, החלטנו לעבור לעבודה בארכיטקטורת מיקרו-סרביסים וגם את זה עשינו בעזרת Nest.js (כבר מספר חודשים שהמערכת microservices שלנו בפרודקשיין)
בהמשך מקווה לכתוב גם על זה.

בונוס


כבונוס לפוסט, אשמח לשתף אתכם בסקר שיצא לי לערוך לפני כחצי שנה בקבוצת node.js.il בו שאלתי מפתחי node באיזה פריימוורק של node.js הם מפתחים.
התפתחו שם דיונים מעניינים בעד ונגד פיתוח בNest.js בהשוואה לאקספרס ובכלל, מוזמנים להציץ ​​
קישור לסקר

קוראים יקרים, תודה רבה שהייתם איתי 
אם אהבתם את הפוסט אודה ללייק, תגובה או שיתוף.
ואשמח להערותכם על הפוסט, במידה וטעיתי במשהו או שלדעתכם החסרתי משהו חשוב.

אוהבים את nest או מעדיפים פריימוורק אחר? שתפו אותי בתגובות.