במאמר הקודם דיברנו על require שהוא הדרך להשתמש במודולים (מודולי ליבה או מודולים אחרים) עם Node.js. במאמר הזה אנו נדבר על מודולים אחרים שיש בליבה של Node.js.
עד עכשיו עבדנו בעיקר מול הקונסולה (לינוקס או, ישמרנו האלוהים, חלונות) – אבל עם כל הכבוד לקונסולה – אנחנו מתכנתי אינטרנט ואנחנו רוצים לראות דברים מגניבים על הדפדפן שלנו! במאמר הראשון בסדרה, ציינתי שבניגוד לשפות צד שרת יותר קונבנציונליות כמו PHP או JAVA, ב-Node.js אין שרת אלא Node.js בעצמה היא השרת. המימוש של שרת הוא די פשוט ונעשה עם מודול http. כך זה נראה:
http = require("http"); //The require
var MyServer = http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/html"});
response.write("Hello World!");
response.end();
});
MyServer.listen(3000);
console.log("Server running at http://localhost:3000/"); //Printing to the console only
באופן עקרוני אין כאן משהו שיפיל אתכם. יש כאן את ה-require שאותו אנו מכירים מקודם. אובייקט ה-http הוא בעצם ה-export שמוחזר לנו ממודול http. הוא כולל מתודה שנקראת createServer. את המתודה אפשר למצוא בדוקומנטציה המחרידה של http דרך אגב.
המתודה הזו מקבלת רק ארגומנט אחד: ה-callback! בו אנו מעבירים שני ארגומנטים – request ו-response. ה-response הוא התגובה וה-request זה פרטים של הבקשה. בדוקומנטציה כתוב ש:
request is an instance of http.IncomingMessage and response is an instance of http.ServerResponse.
אם נציץ בדוקומנציה ב:http.ServerResponse נוכל לראות את שלוש המתודות שהשתמשנו בהן: writeHead, write ו-end. לא צריך להיות גאון גדול בשביל להבין מה הן עושות, אבל באותו מקום בדוקומנטציה יש מתודות מעניינות נוספות. למשל setHeader- אם נשתמש בקוד הזה שהעתקתי בדוקומנטציה:
response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);
נוכל לראות שהתווספה לנו cookie מגניבה!
אם נחפש את http.IncomingMessage בדוקומנטציה, נראה של-request יש גם מתודות ותכונות מעניינות במיוחד. כך למשל אנחנו יכולים להציג בפני המשתמש את גרסת ה-http שלו!
http = require("http"); //The require
var MyServer = http.createServer(function(request, response) {
response.setHeader("Set-Cookie", ["type=ninja", "language=javascript"]);
response.writeHead(200, {"Content-Type": "text/html"});
response.write("Hello World!");
response.write(request.httpVersion);
response.end();
});
MyServer.listen(3000);
console.log("Server running at http://localhost:3000/"); //Printing to the console only
טוב, גם אם לא נעוף על זה, אפשר לקבל דברים אחרים מהמשתמש – כמו למשל את ה-URL שהוא רוצה (חשוב ל-routing!) או למשל את ה-headers שלו.
טוב, אז שרת יצרנו, איך ניגשים אליו? אנו שומרים את הקוד שלעיל כ-myserver.js ואז כותבים בקונסולה nodejs myserver.js. עכשיו אפשר לגשת ל-http://localhost:3000 ולראות את התוצאה. אם יש לכם מחשבים אחרים ברשת, אתם יכולים לנסות ולגשת אל ה-ip של המחשב שמריץ את Node.js ולראות את התוצאות.
אני ממליץ בחום רב לתרגל כאן, פשוט להעתיק את הקוד הזה, להסתכל בדוקומנטציה ולנסות לעשות כל מיני דברים. זה אחד הקודים הפשוטים ביותר של Node.js וממש קל ליישם אותו ולשנות אותו.
במאמר הבא אנו נמשיך לעבוד על הקוד ונבחן מודולים נוספים ומעניינים.
⚠️ תזכורת – המדריכים האלו הם רק טעימה, בספר שלי "ללמוד Node.js בעברית" יש הסברים מלאים ומקיפים על השפה המיועדים ללימוד עצמי. עם תרגילים והסברים. הספר יצא לאור בשיתוף הקריה האקדמית אונו ובתמיכת החברות אלמנטור, ו-Iron source ונערך טכנית על ידי בנג'י גרינבאום (מפתח ליבה של Node.js), גיל פינק ומתכנתים מעולים נוספים.