תוכן עניינים:

Node.js דף אינטרנט חלק 2: 7 שלבים
Node.js דף אינטרנט חלק 2: 7 שלבים

וִידֵאוֹ: Node.js דף אינטרנט חלק 2: 7 שלבים

וִידֵאוֹ: Node.js דף אינטרנט חלק 2: 7 שלבים
וִידֵאוֹ: 🚀 AMAZON 2.0 - ИНТЕРНЕТ МАГАЗИН с нуля за 6 часов [Next / React / Nest / PostgreSQL / Prisma / TS] 2024, יולי
Anonim
Node.js דף אינטרנט חלק 2
Node.js דף אינטרנט חלק 2

ברוכים הבאים לחלק 2 !!

זהו חלק 2 למדריך היישום שלי לאתר Node.js. חילקתי את ההדרכה לשני חלקים מכיוון שהיא מפרידה בין אלה שזקוקים למבוא קצר לבין אלה שרוצים הדרכה מלאה בדף אינטרנט.

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

שלב 1: מבנה האפליקציה

מבנה האפליקציה
מבנה האפליקציה

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

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

express --hbs nameofmyapp

לאחר מכן המשך לבצע את השלב בחלק 1 להתקנת כל כלי הביניים.

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

בתמונה המצורפת ניתן לראות תיקיות וקבצים שונים, להלן אני מנסה להסביר את כל אלה.

פַּח

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

node_modules

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

פּוּמְבֵּי

זה המקום שאליו יגיעו כל התמונות שלך, CSS וג'אווה סקריפט לאתר שלך. אלה משמשים ישירות את דפי האינטרנט.

מסלולים

אלה מגדירים מסלולים לאתר שלך. כגון דף בית, דף כניסה ואחרים.

צפיות

כפי שאתה יכול לראות התצוגות הן קבצי.hbs או.handlebars, כל אחת מהן תעבוד. זה רק דורש קצת מניפולציה של הקובץ app.js. אלה הם דפי ה- HTML של הכידון שלך שיוצגו בדפדפן. פריסה היא קובץ הפריסה העיקרי שלך ולפעמים הוא נמצא בתיקיית המשנה של הפריסה שלו. קובץ הפריסה הראשי קורא לקבצי הכידון האחרים שלך ומציג אותם, זה יהיה הגיוני יותר כאשר נצלול לתוך הקוד.

app.js

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

package.json

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

שלב 2: פריסת התבנית שלך

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

יישום האינטרנט שלי משתמש בתבנית bootstrap שהיא מעולה ביצירת CSS מדהים. למציאת תבניות בקר באתר זה. כמו שצוין קודם לכן, כל קבצי ה- css, js ו- img הדרושים נמצאים תחת התיקיה הציבורית. קבצים אלה גורמים לאתר להיראות טוב יותר מטקסט רגיל ולאופן השימוש שלו בתמונות באתר.

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

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

קובץ layout.handlebars שנוצר אקספרס

{{title}} {{{body}}}

קסם הכידון האמיתי נמצא בכידון {{title}} וב- {{{body}}}. אז שני אלה פועלים באופן שונה {{title}} הוא משתנה שעובר מהקובץ index.js במסלולים, לאחר שהועבר לתבנית הוא מוצג. התג {{{body}}} לוקח את מה שנקרא בפונקציית העיבוד בקובץ js המסלול שלך. במקרה שלנו index.js מכיל שורה זו:

res.render ('index', {title: 'Express', count: userCount});

זה מכנה את קובץ 'האינדקס' של מה שאתה מפעיל אי פעם, ג'ייד, כידון וכן הלאה, כך במקרה שלנו index.handlebars.

אקספרס שנוצר על ידי index.thlebars

{{כותרת}}

ברוכים הבאים אל {{title}}

קובץ index.handlebars מועבר כמשתנה לתג {{{body}}} ומוצג בדף האינטרנט שלך.

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

שלב 3: טופס יצירת קשר

טופס יצירת קשר
טופס יצירת קשר
טופס יצירת קשר
טופס יצירת קשר
טופס יצירת קשר
טופס יצירת קשר

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

בטופס יצירת קשר זה השתמשו ב- npm middleware שנקרא Node Mailer.

הגדרת Node Mailer

כדי להתקין צומת מיילים, עליך רק להריץ את הקוד שלהלן בקובץ ברמה העליונה שלך, במקרה שלנו, myapp.

sudo npm להתקין nodemailer

לאחר ההתקנה תצטרך להגדיר כמה דברים בקובץ app.js שלך.

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

var nodemailer = require ('nodemailer');

השני הוא הטרנספורטר שלנו, הטרנספורטר משמש לחיבור לשרת הדואר שלך, במקרה שלי gmail.

// טרנספורטר נהג לקבל חשבון gmail

var transporter = nodemailer.createTransport ({service: 'gmail', auth: {type: 'OAuth2', user: '[email protected]', clientId: '139955258255-a3c6ilqu6rtocigde7cbrusicg7j00eh.apps.googleusercontent.com',: 'Q775xefdHA_BGu3ZnY9-6sP-', refreshToken: '1 / 0HfdzyzW3FmnDPqeYkv19_py6zWgMCOqI9DSZ9kQWfc', accessToken: 'ya29. GlvDBGA2Z_coEKjQOnXAnBLbTB0wQmS-sARqNGC3V2UATiywNb34IhFq4d7UQvhTobE6pi83-FB2-OvMWjC-mk-EKPMYmwxFe9AOZ7mY6kurYyQ7e1Mu8m8INxg7'}})

אם אתה משתמש ב- nodemailer עם שרת דואר אחר, אנא חפש כאן תיעוד ועזרה.

כמה דברים ישתנו מאדם לאדם: משתמש, clientId, clientSecret. refreshToken ו- accessToken.

מזהה המשתמש שלך הוא הדוא"ל שבו ברצונך להשתמש. הכנתי דוא"ל חדש שנקרא לאתר שלי.

צריך למצוא את clientId, clientSecret, refreshToken ו- accessToken דרך חשבון Google שלך.

אם אתה צריך עוד עזרה אתה יכול לעקוב אחר הסרטון הזה כאן.

לאחר מילוי כל השדות נוסיף את פרטי ההודעה שלנו.

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

// Express Validatorapp.use (expressValidator ({errorFormatter: function (param, msg, value) {var namespace = param.split ('.'), Root = namespace.shift (), formParam = root; while (namespace.length) {formParam + = '[' + namespace.shift () + ']';} החזר {param: formParam, msg: msg, value: value};}})));

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

// כפתור שליחה מאנשי קשר, צריך ליצור דף בית עם הודעת הצלחה עבור formulapsapp.post שנשלח ('/contact_Form', פונקציה (דרישה, מיל ') {// להוציא מידע מטופס יצירת הקשר, מאת homepage.hbs שם שם = req.body.name; var email = req.body.email; var phone = req.body.phone; var message = req.body.message; var mailOptions = {// יוצר מידע המשמש בעת שליחת הודעה מאת: ' דוא"ל אוטומטי ', אל:' [email protected] ', נושא:' טופס יצירת קשר לאתר: ' + שם, טקסט:' קיבלת הודעה חדשה מטופס יצירת הקשר שלך באתר. / N / n ' +' כאן הם הפרטים: / n / n שם: ' + שם +' / n / n דוא"ל: ' + דוא"ל +' / n / n טלפון: ' + טלפון +' / n / n הודעה: / n ' + message} transporter.sendMail (mailOptions, function (err, res) {if (err) {console.log ('Error');} else {console.log ('Email sent');}}) res.render ('index'); // render דף הבית החדש, בדוק כיצד לעשות זאת עם הודעת הצלחה, כמו דף יציאה})

הֶבזֵק

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

התקן פלאש בדיוק כמו תוכנות ביניים אחרות של npm.

sudo npm התקן connect-flash

var flash = require ('connect-flash'); // היה בעל פונקציונליות פלאש להצגת הודעות על המסך

// חבר Flashapp.use (פלאש ());

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

// גלובל וארס

app.use (function (req, res, next) {res.locals.success_msg = req.flash ('success_msg'); res.locals.error_msg = req.flash ('error_msg'); res.locals.error = req.flash ('טעות'); res.locals.user = req.user || null; הבא ();});

חלקם זקוקים למשתנים הקשורים לפלאש.

הנה לך טופס יצירת קשר.

שלב 4: דף כניסה

דף התחברות
דף התחברות

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

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

npm להתקין דרכון && npm להתקין דרכון-מקומי && npm להתקין bcryptjs

ה- && מאפשר לך להריץ פקודות מרובות בשורה אחת.

התחברות ומשתמשים

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

user.js

var express = require ('express'); var router = express. Router (); דרכון var = לדרוש ('דרכון'); var LocalStrategy = require ('דרכון-מקומי'). אסטרטגיה; var User = require ('../ models/user'); // רשום router.get ('/register', function (req, res) {res.render ('register');}); // רשום משתמש router.post ('/register', function (req, res) {var name = req.body.name; var email = req.body.email; var שם משתמש = req.body.username; var סיסמא = req.body.password; var password2 = req.body.password2; // אימות req.checkBody ('שם', 'שם נדרש'). notEmpty (); req.checkBody ('דוא"ל', 'דוא"ל נדרש').notEmpty (); req.checkBody ('דוא"ל', 'דוא"ל אינו תקף'). isEmail (); req.checkBody ('שם משתמש', 'שם משתמש נדרש'). notEmpty (); req.checkBody (' סיסמה ',' נדרשת סיסמה '). notEmpty (); req.checkBody (' password2 ',' סיסמאות אינן תואמות '). שווה (req.body.password); var error = req.validationErrors (); אם (שגיאות) {res.render ('הרשמה', {טעויות: שגיאות});} אחרת {var newUser = משתמש חדש ({שם: שם, אימייל: דוא"ל, שם משתמש: שם משתמש, סיסמא: סיסמא}); User.createUser (newUser, function (err, user) {if (err) throw err; console.log (user);}); req.flash ('success_msg', 'אתה רשום ועכשיו תוכל להיכנס'); res.redirect (' /התחברות'); } });

פירוק זה חתיכה אחר חלק

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

login.js

var express = require ('express');

var router = express. Router (); var דרכון = לדרוש ('דרכון'); var LocalStrategy = require ('דרכון-מקומי'). אסטרטגיה; var User = require ('../ models/user'); /* קבל רישום משתמשים. */// דף הבית router.get ('/', function (req, res) {res.render ('login');}); passport.use (LocalStrategy חדש (פונקציה (שם משתמש, סיסמה, בוצע) {User.getUserByUsername (שם משתמש, פונקציה (שגיאה, משתמש) {אם (שגיאה) זרוק שגיאה; אם (! משתמש) {החזרה בוצעה (null, false, { message: 'User Unknown'});} User.comparePassword (סיסמה, user.password, function (err, isMatch) {if (err) לזרוק שגיאה; if (isMatch) {return done (null, user);} else { החזרה בוצעה (null, false, {הודעה: 'סיסמה לא חוקית'});}});});})); passport.serializeUser (function (user, done) {done (null, user.id);}); passport.deserializeUser (function (id, done) {User.getUserById (id, function (err, user) {done (err, user);});}); router.post ('/login', passport.authenticate ('local', {successRedirect: '/', failureRedirect: '/login', failureFlash: true}), function (req, res) {res.redirect ('/ לוח מחוונים ');}); router.get ('/logout', function (req, res) {req.logout (); req.flash ('success_msg', 'אתה מתנתק'); res.redirect ('/דף הבית');});

module.exports = נתב;

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

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

זה נעשה על ידי יצירת תיקיה מתחת לתיקיית היישומים הראשית שלך שנקראת מודלים. בתיקייה זו יש צורך גם בקובץ user.js.

דגם/user.js

var mongoose = require ('נמיות');

var bcrypt = require ('bcryptjs'); // User Schema var UserSchema = mongoose. Schema ({שם משתמש: {type: String, index: true}, סיסמה: {type: String}, דוא ל: {type: String}, שם: {type: String}}); var User = module.exports = mongoose.model ('משתמש', UserSchema);

module.exports.createUser = function (newUser, callback) {

bcrypt.genSalt (10, function (err, salt) {bcrypt.hash (newUser.password, salt, function (err, hash) {newUser.password = hash; newUser.save (callback);});}); } module.exports.getUserByUsername = function (שם משתמש, callback) {var query = {שם משתמש: שם משתמש}; User.findOne (שאילתה, התקשרות חוזרת); } module.exports.getUserById = function (id, callback) {User.findById (id, callback); } module.exports.comparePassword = function (candidPassword, hash, callback) {bcrypt.compare (andidPassword, hash, function (err, isMatch) {if (err) throw throw; callback (null, isMatch);}); }

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

שלב 5: מונה תנועה

מונה תנועה
מונה תנועה

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

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

מכיוון שכבר דיברנו על הקמת mongoDB אני לא אעבור על זה שוב.

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

קליפת מונגו

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

לָרוּץ

מונגו

זה יפתח את הקליפה.

הוסף אוסף

במקרה שלי, מסד הנתונים נקרא loginapp, אתה יכול לקרוא לו איך שאתה רוצה.

השתמש ב- nameofyourdb

אנו זקוקים לאוסף שיכיל את כל כתובת ה- ip שלנו של המשתמשים המבקרים באתר שלנו.

db.creatCollection ("ip")

לאחר מכן אנו יוצרים אוסף לספירת הלהיטים הייחודיים לאתר שלנו. זה מאותחל עם מזהה וספירה שמתחילה ב -0.

db.createCollection ("count", {id: "counter counter", count: 0})

עקוב אחר כתובות IP

לשם כך נמשוך את משתמשי ה- Ip כשהם מבקרים בדף הבית שלנו, נגדיל את המספר שלנו ונשמור אותם כדי להשוות אותם מאוחר יותר.

עלינו ליצור כמה דגמים לאחסון סכמות הנמיות שלנו, ולהוסיף קוד לקובץ homepage.js שלנו.

אנו יוצרים count.js ו- ip.js ומאחסנים אותם בתיקיית הדגמים שלנו.

הקובץ ip.js הוא רק סכמה של כתובת ה- ip שלנו

var mongoose = require ('נמיות'); // מטפל בחבילות עבור מונגו

// Count Schema var IpSchema = mongoose. Schema ({ip: {type: String,}, count: {type: Number,}}); var Ip = module.exports = mongoose.model ('Ip', IpSchema);

count.js יקראו לדף הבית שלנו ליזום מעקב אחר להיטים. זה נעשה כך להלן.

//Homepagerouter.get('/ ', function (req, res) {publicIp.v4 (). ואז (ip => {Public_ip = ip; console.log ("ipv4:"+ Public_ip); // =>' 46.5.21.123 '}); publicIp.v6 (). לאחר מכן (ip => {console.log ("ipv6" + ip); Public_ip = ip; // =>' fe80:: 200: f8ff: fe21: 67cf ' });

Count.getCount (אוסף, ipc, Public_ip, function (count) {

}); count = db.collection ('count'). findOne ({id: "counter counter"}, function (err, count) {userCount = count.count; res.render ('דף הבית', {count: userCount}); }); });

זה קורה בכל פעם שמישהו נכנס לדף הבית שלנו, במקרה זה theinternet.onthewifi.com/homepage.

הוא בודק את כתובת ה- IP של המשתמש, ip4 או ip6, ולאחר מכן מאחסן את הערך הזה לאן שהוא שולח אותו ל- count.get.collection שהיא פונקציה המאוחסנת בקובץ count.js שלנו.

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

קובץ count.js הוא כדלקמן.

//count.jsvar mongo = require ('mongodb'); // תומך במסד הנתונים var mongoose = require ('נמיות'); // מטפל חבילות עבור mongo mongoose.connect ('mongodb: // localhost/loginapp'); var db = mongoose.connection; var Ip = require ('../ models/ip'); // Count Schema var CountSchema = mongoose. Schema ({id: {type: String,}, count: {type: Number,}}); var Count = module.exports = mongoose.model ('Count', CountSchema); module.exports.getCount = function (count, ipc, Public_ip, callback) {// count is test, isback function is ipc.findOne ({ip: Public_ip}, function (err, iptest) {if (! iptest) // add IP חדש אם לא במסד הנתונים ועדכון מונה {var new_ip = new IP ({ip: Public_ip, count: 1}); db.collection ('ip'). שמור (new_ip); // הוסף ip חדש ל- database count.update (// עדכון מונה פגיעות {id: "counter counter"}, {$ inc: {count: 1}})}} אחר // עדכן מונה IP ספציפי, כדי לראות מי מבקר ביותר {ipc.update ({ip: Public_ip}, {$ inc: {count: 1}})}}}); }

זה יוצר את סכמת הספירה ואת הפונקציה.getCount שלנו. הפונקציה.getCount בודקת את ה- DB עבור ה- ip של המשתמשים ואם היא מוצאת אותו, הפונקציה מגדילה את ספירת אותו משתמש, לא את מונה הפגיעות. אולם אם ה- ip של המשתמשים לא יימצא הוא ייצור אובייקט איסוף חדש עם ה- ip של המשתמשים ויגדיל את מונה הפגיעות ב -1.

לאחר מכן זה מוחזר ומוצג לדף האינטרנט.

יש לך את זה מונה פגיעות מעקב ip.

שלב 6: בלוג

בלוג
בלוג

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

שלב 7: סיים

שם אתה עורך הדרכה מעמיקה באתר node.js שלי המתארח באופן מקומי בפאי הפטל שלי. אם יש לך שאלות או הערות אנא השאר אותן למטה.

אני מקווה שזה יעזור לאחרים שם בחוץ.

לגישה אחרת לאתר זה באמצעות hugo, מחולל דפי אינטרנט סטטי עיין במדריך אחר שלי (בקרוב).

מוּמלָץ: