מדריך Node.js: שימוש ב-Utilities

במאמר הזה אנו מדברים על פונקציות שימושיות ב-Node.js utils ובמיוחד על מתודה שמאפשרת לנו לעשות ירושה בקלות.
Node.js Logo

במאמר הקודם הסברתי על אירועים ב-Node.js ואז אמרתי שאפשר לבצע ירושה באופן פשוט וקל עם utlities. זה גם מה שנלמד היום – איך משתמשים ב-utilities שזה עוד מודול ליבה של Node.js. רשימת כל מודולי הליבה, אגב, נמצאת באתר של Node.js.

באופן עקרוני, מודול Utilities הוא לא מודול "אמיתי" אלא אוסף של כלים שימושיים במיוחד. חלק מהכלים מסייעים לנו להפוך את הקוד ליותר נקי, חלק מהכלים עושים פעולות משמעותיות במיוחד. כל המתודות נמצאות בדוקומנטציה של Node.js Utilities ומומלץ להסתכל עליה.

המתודה הראשונה שאנו רואים היא מתודה שמאוד דומה ל-sprintf, אם אתם מכירים – שזו דרך מאוד שימושית ליצור מחרוזת טקסט עם משתנים. הנה דוגמה:


util = require("util"); //The require

someVar = 'This is my var!'

var result = util.format('This is some test string with variable example: %s', someVar);

console.log(result);
//prints: This is some test string with variable example: This is my var!

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


require('util').debug('message on stderr');

או אפילו עם time stamp!


require('util').log('Timestamped message.');

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


var util = require('util');
var http = require('http');

console.log(util.inspect(http, { showHidden: false, depth: null, colors: true }));

את הדוגמה הזו ואחרות הבאתי כמובן מהדוקומנטציה של util, לא המצאתי פה משהו חדש. כך למשל בדוקומנטציה של מתודת inspect יש הסבר מפורט על כל הגדרה שאפשרת לשנות (מה זה colors או depth למשל). אין טעם לעבור כמו תוכי במדריך הזה על מנת להסביר את מה שהוסבר היטב בדוקומנטציה, אבל כן שווה להתעכב על אחת המתודות החשובות שיש ב-util – מתודה שמאפשרת לנו לבצע ירושה מאובייקט לאובייקט – ממש כמו בכל שפה נורמלית.

ב-JavaScript, כל דבר, למעט מערך, נחשב כאובייקט. בין אם מדובר בפונקציה, מחרוזת טקסט או מספר. כל דבר הוא אובייקט. למרות זאת, אין דרך נורמלית לבצע ירושה. למה אנחנו צריכים לבצע ירושה? קחו למשל את מודול events שעליו דיברנו במאמר הקודם – על מנת שהמודול שאני כותב יוכל לירות אירועים, יהיה לי הרבה יותר קל לרשת ממודול אירועים מאשר להתחיל לעשות require ל-events, להחזיר את זה לאובייקט וממנו לקרוא ל-emit. הרבה יותר קל לעשות משהו כזה:


myModule.prototype.saveTheObject = function (obj) {
    //doing something that related to saving
    this.emit("saved-myModule", obj);
};

כלומר שמתודת ה-emit, או מתודת ה-on שמאזינה לאירועים (אם המודול שלי קשור למודולים אחרים שמשחררים אירועים) תהיה חלק מה-class שלי. איך אני בעצם גורם ל-myModule class לרשת מ-event? כאן נכנסת לפעולה מתודת inherits שמקבלת שני ארגומנטים – את האובייקט שיורש ואת האובייקט שיורשים ממנו. ככה זה נראה בעולם האמיתי:


var util = require("util");
var events = require("events");

function myModule() { //first we create the module object

}

util.inherits(myModule, events.EventEmitter); //The inheritance

myModule.prototype.saveTheObject = function (obj) { //some method that emitting event
    //doing something that related to saving
    this.emit("saved-myModule", obj);
};


/** module ends here **/


var myModule = new myModule(); //creating the instance

myModule.on("saved-myModule", function(data) {
    console.log('Received data: "' + data + '"');
})

myModule.saveTheObject("It works!"); // Received data: "It works!"

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

חשוב לציין שיש לא מעטים שחושבים שירושה ב-JavaScript היא לא נכונה ויעדיפו לעשות instance לאובייקטים ולהשתמש במתודות שלהם באופן ישיר. אבל טוב לדעת שזה אפשרי.

במאמר הבא אנו נדבר על streams ב-Node.js

⚠️ תזכורת – המדריכים האלו הם רק טעימה, בספר שלי "ללמוד Node.js בעברית" יש הסברים מלאים ומקיפים על השפה המיועדים ללימוד עצמי. עם תרגילים והסברים. הספר יצא לאור בשיתוף הקריה האקדמית אונו ובתמיכת החברות אלמנטור, ו-Iron source ונערך טכנית על ידי בנג'י גרינבאום (מפתח ליבה של Node.js), גיל פינק ומתכנתים מעולים נוספים. 

פוסטים נוספים שכדאי לקרוא

פתרונות ומאמרים על פיתוח אינטרנט

עבודה עם GPT למתכנתים

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

תמונה של הבית הלבן עם מחשוב ענן וטקסט: FEDRAMP
פתרונות ומאמרים על פיתוח אינטרנט

FedRAMP & FIPS מבוא למתחילים

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

פתרונות ומאמרים על פיתוח אינטרנט

SSG עם next

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

תמונה מצוירת של רובוט שמנקה HTML
יסודות בתכנות

סניטציה – למה זה חשוב

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

גלילה לראש העמוד