Mundarija:

Node.js veb -sahifasi 2 -qism: 7 qadam
Node.js veb -sahifasi 2 -qism: 7 qadam

Video: Node.js veb -sahifasi 2 -qism: 7 qadam

Video: Node.js veb -sahifasi 2 -qism: 7 qadam
Video: Всё про Node.js от А до Я / Многопоточность, анархия, Метархия! / Тимур Шемсединов 2024, Noyabr
Anonim
Node.js veb -sahifasi 2 -qism
Node.js veb -sahifasi 2 -qism

2 -QISMga xush kelibsiz !!

Bu mening Node.js veb -sayti uchun qo'llanmaning 2 -qismi. Men bu darslikni ikki qismga ajratdim, chunki u qisqa tanishtirishga muhtoj bo'lganlarni va veb -sahifada to'liq ko'rsatma olishni xohlaydiganlarni ajratadi.

Men sayt yaratishim bilan tanishaman. Sizniki boshqacha bo'lishi mumkin, shuning uchun menikiga amal qiling va ishlatilgan texnikani o'rganing. Agar siz boshqa HTML shablonini tanlasangiz, oqim biroz boshqacha bo'ladi. Buni yodda saqlang.

1 -qadam: Ilovaning tuzilishi

Ilovaning tuzilishi
Ilovaning tuzilishi

Shunday qilib, mening saytim tezkor generatorni kuzatadi, lekin men jade emas, balki rulni ishlatardim. Agar sizga jade yoqsa, unga boring! Jade - bu hamma qavs va divlarsiz qisqa HTML. Agar siz tushunmasangiz, siz YouTube -ga tashrif buyurib, HTML darslarini ko'rishni xohlashingiz mumkin.

Men HTML va rulda ishlashni afzal ko'raman va o'zimni qulay his qilaman. Rulda ekspres loyihasini yaratish uchun ekspres buyrug'ini bajaring.

express -hbs nameofmyapp

Keyin barcha o'rta mahsulotlarni o'rnatish uchun 1-qismdagi qadamni bajarishni davom eting.

Express juda o'ziga xos ilova tuzilishini yaratadi va juda foydali bo'lgan node.js dasturlarining ko'pchiligi bu shaklga bir oz o'zgargan holda amal qiladi.

Yopilgan fotosuratda siz turli papkalar va fayllarni ko'rishingiz mumkin, quyida men bularning barchasini tushuntirishga harakat qilaman.

axlat qutisi

Bu node.js serveringizni ishga tushirganda birinchi bo'lib ishga tushiriladigan papka. U www fayliga qaraydi va bu faylni bajarilishi uchun kuzatib boradi. Www fayli node.js -ga serverni 3000 -portda ishga tushirishni aytadi (bu deyarli hamma narsaga o'zgarishi mumkin) va voqea tinglovchisi va boshqalar kabi boshqa narsalarni bajaradi. Asosiysi, sizning ilovangiz o'rnatilgan port.

tugun_modullari

Bu papkada o'rta buyumlar deb ataladi. O'rta asboblar, sizga kodlashni osonlashtiradigan qo'shimcha dastur sifatida tushuntirishni yoqtiraman. Theya, asosan, siz ishlatishingiz uchun oldindan tayyorlangan boshqa kutubxonalar. Men bu loyihada ishlatgan qo'shimcha vositalar Nodemailer, Passport, Nodemon, bycrypt va boshqalar edi.

ommaviy

Bu erda sizning veb -saytingiz uchun barcha rasmlaringiz, CSS va javascriptingiz bor. Bu to'g'ridan -to'g'ri veb -sahifalar tomonidan ishlatiladi.

marshrutlar

Bu sizning saytingiz uchun yo'nalishlarni belgilaydi. Bosh sahifa, kirish sahifasi va boshqalar kabi.

qarashlar

Ko'rib turganingizdek, ko'rinishlar.hbs fayllari yoki.handlebars, yoki u ishlaydi, faqat app.js faylini boshqarish kerak. Bu sizning brauzerda ko'rsatiladigan html sahifalaringiz. Layout - bu sizning asosiy joylashuv fayli va ba'zida uning ichki tartib papkasida joylashgan. Asosiy joylashuv fayli boshqa ruchkalar fayllariga qo'ng'iroq qiladi va ularni ko'rsatadi, bu biz kodga kirganimizda mantiqiyroq bo'ladi.

app.js

Bu sizning asosiy ilova faylingiz, ba'zida uni server deb atashadi, faqat sozlashga bog'liq. Ushbu fayl server uchun barcha konfiguratsiyaga va hatto ba'zi maxsus funktsiyalarga ega. Bu, shuningdek, xatolarni ko'rib chiquvchi bo'ladi.

paket.json

Bu fayl express tomonidan yaratilgan va npm -da sizning loyihangizda ishlatmoqchi bo'lgan barcha o'rta dasturlar haqida ma'lumot beradi. Npm install-ni ishga tushirgandan so'ng, ushbu faylda chaqirilgan barcha o'rta qurilmalar node_modules jildiga o'rnatiladi.

2 -qadam: Shablonni joylashtiring

Siz HTML -ni noldan yaratishingiz yoki shablonni ishlatishingiz mumkin. Men bu sayt uchun shablonni ishlatganman. Men yordam bergan boshqa saytlar men noldan kodlangan. Tanlov sizniki, bu qadam shablon tartibini tushuntiradi.

Mening veb -ilovam bootstrap shablonini ishlatadi, bu ajoyib CSS yaratishda juda yaxshi. Shablonlarni topish uchun ushbu saytga tashrif buyuring. Oldingi bosqichda aytilganidek, barcha kerakli CSS, JS va img fayllari umumiy papkada joylashgan. Bu fayllar saytni oddiy matndan va uning rasmlari saytda qanday ishlatilishini yaxshiroq ko'rsatib beradi.

Andoza uslubini shablon yordamida boshqarish uchun sahifalar ikki qismga bo'lingan. Birinchisi, "tartib" deb nomlangan. Joylashtirish - bu sizning saytingizdagi har bir veb -sahifada ko'rsatilishi kerak bo'lgan xususiyatlar. Mening holimda bu navigatsiya paneli bo'lgan sarlavha va qo'shimcha navigatsiya va displey qismlari bo'lgan altbilgi.

Joylashuv fayli va boshqa rullar fayllari ko'rinishlar papkasida. Men kontseptsiya qanday ishlashini ko'rsatish uchun ilgari ishlatgan ekspress generatoridan oddiyroq tartibni ko'rib chiqaman, shunda siz mening kodimni ko'rasiz va ularni solishtirasiz.

Layout.handlebars faylini yaratdi

{{sarlavha}} {{{tana}}}

Haqiqiy rulda sehrlari {{title}} va {{{body}}} rulda. Shunday qilib, bu ikkitasi boshqacha harakat qiladi {{title}} - bu index.js faylidan marshrutlarda uzatiladigan, shablonga o'tkazilgandan keyin ko'rsatiladigan o'zgaruvchi. {{{Body}}} yorlig'i sizning marshrutingiz js faylida renderlash funktsiyasida chaqirilgan narsani oladi. Bizning holatda index.js quyidagi qatorga ega:

res.render ('indeks', {sarlavha: 'Ekspress', son: userCount});

Bu sizning indeks.handlebars -da ishlatadigan narsalar, jade, rulda va boshqalarni boshqaradigan "indeks" faylini chaqiradi.

Express indeks.handlebarsni yaratdi

{{sarlavha}}

{{Title}} ga xush kelibsiz

Index.handlebars fayli o'zgaruvchiga o'xshab {{{body}}} tegiga o'tkaziladi va veb -sahifangizda ko'rsatiladi.

Bu sizga veb -saytingizning statik qismini va o'zgaruvchan qismini olish imkonini beradi. Bu sarlavha va altbilgilarni chiroyli qiladi, chunki siz butun sahifani qayta ko'rsatishingiz shart emas, yangi sahifani yuklashda faqat ba'zi ma'lumotlar o'zgartiriladi.

3 -qadam: aloqa shakli

Aloqa shakli
Aloqa shakli
Aloqa shakli
Aloqa shakli
Aloqa shakli
Aloqa shakli

Men veb -sahifamga aloqa formasini qo'shdim, shunda har kim mening saytimga elektron pochta orqali savollar yoki sharhlar yozishi mumkin edi.

Bu aloqa shakli node Mailer deb nomlangan npm o'rta qurilmasidan foydalangan.

Node Mailer -ni sozlash

Node-mailer-ni o'rnatish uchun siz quyidagi kodni yuqori darajali faylda ishga tushirishingiz kerak, bizda esa myapp.

sudo npm nodemailer -ni o'rnating

O'rnatgandan so'ng, siz app.js fayliga bir nechta narsalarni o'rnatishingiz kerak bo'ladi.

Birinchisi - bu faqat qaramlik, bu tugun biz ushbu o'rta dasturdan foydalanishni rejalashtirayotganimizni bildiradi.

var nodemailer = talab ('nodemailer');

Ikkinchidan, bizning tashuvchimiz, tashuvchi sizning pochta serveringizga ulanish uchun ishlatiladi, menimcha gmail.

// Tashuvchi gmail hisobini olish uchun ishlatilgan

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

Agar boshqa pochta serveri bilan nodemailerdan foydalansangiz, iltimos, hujjatlar va yordam uchun bu erga qarang.

Odamdan odamga bir nechta narsa o'zgaradi: user, clientId, clientSecret. refreshToken va accessToken.

Sizning userId - bu siz foydalanmoqchi bo'lgan elektron pochta manzili, men saytim bilan bir xil nomdagi yangisini yaratdim.

ClientId, clientSecret, refreshToken va accessToken -ni Google hisobingiz orqali topish kerak.

Agar sizga ko'proq yordam kerak bo'lsa, bu videoni bu erdan kuzatib borishingiz mumkin.

Bu maydonlarning barchasi to'ldirilgandan so'ng, biz xabar tafsilotlarini qo'shamiz.

Keyin biz formadagi barcha maydonlar kiritilganligini va to'g'ri javob ekanligini tasdiqlashimiz kerak.

// Express Validatorapp.use (expressValidator ({errorFormatter: funktsiya (parametr, msg, qiymat)) {var namespace = param.split ('.'), Root = namespace.shift (), formParam = root; while (namespace.length) {formParam + = '[' + namespace.shift () + ']';} qaytish {param: formParam, msg: msg, qiymat: qiymat};}}));

Endi biz veb -sahifamizdagi aloqa formasidan ma'lumot olishimiz va xabar yuborishimiz kerak.

// Kontaktni yuborish tugmachasidan xabar yuborish, yuborilgan formalar uchun bosh sahifa yaratish kerak. = req.body.name; var email = req.body.email; var phone = req.body.phone; var message = req.body.message; var mailOptions = {// xabar yuborishda foydalaniladigan ma'lumotlarni yaratadi: ' Avtomatik elektron pochta ',' [email protected] 'ga, mavzu:' Veb -sayt bilan bog'lanish shakli: ' + ism, matn:' Siz veb -saytingiz aloqa formasidan yangi xabar oldingiz. / N / n ' +' Bu erda tafsilotlar: / n / nIsm: ' + ism +' / n / nEmail: ' + elektron pochta +' / n / nTelefon: ' + telefon +' / n / nXabar: / n ' + xabar} tashuvchi.sendMail (mailOptions), funktsiyasi (xato, res) {if (xato) {console.log ("Xato");} boshqa {konsol.log ('Email yuborilgan');}}) res.render ('indeks'); // render yangi bosh sahifa, buni muvaffaqiyat xabari bilan qanday qilish kerakligini ko'rib chiqing, masalan, chiqish sahifasi})

Flash

Flash harakatlardan so'ng xabarlarni ko'rsatish uchun ishlatiladi. Siz buni ariza yuborganingizda yoki maydonni noto'g'ri kiritganingizda ko'rishingiz mumkin.

Boshqa npm o'rta dasturlar singari fleshni o'rnating.

sudo npm connect-flash-ni o'rnating

var flash = talab ("ulanish-flesh"); // ekran xabarlarini ko'rsatish uchun flesh -funksiyaga ega edi

// Flashapp.use -ni ulang (flesh ());

Veb -sahifadagi xabarlarni yuboradigan va yangilaydigan fleshni yoqing. Bu muvaffaqiyat kabi narsalarni bildiruvchi xabarlar yoki ma'lumotlar noto'g'ri kiritilgan.

// Global Vars

app.use (funktsiya (req, res, keyingi) {res.locals.success_msg = req.flash ('muvaffaqiyat_msg'); res.locals.error_msg = req.flash ('xato_msg'); res.locals.error = req.flash ('xato'); res.locals.user = req.user || null; keyingi ();});

Ba'zilarga flesh bilan bog'liq o'zgaruvchilar kerak.

U erda siz tuzilgan aloqa shakliga o'tasiz.

4 -qadam: Kirish sahifasi

Kirish sahifasi
Kirish sahifasi

Bu men qila oladigan narsani ko'rishni xohlagan narsam edi va kelajakda undan foydalanaman. Men kodni git omborimda bo'lgani kabi tushuntirmoqchi edim.

Shunday qilib, bu qism yana bir necha npm o'rta mahsulotlardan foydalanadi. Quyidagi buyruqlar yordamida quyidagilarni o'rnating.

npm pasportni o'rnatish && npm pasport-mahalliy && npm o'rnatish bcryptjs

&& bir qatorli bir nechta buyruqlarni bajarishga imkon beradi.

Kirish va foydalanuvchilar

Siz marshrutlar papkasida login.js va user.js fayllarini yaratishingiz kerak bo'ladi. Bu ma'lumotlar bazamizda saqlanadigan foydalanuvchini yaratishga va ma'lumotlar bazasini tekshirish orqali foydalanuvchiga kirishga ruxsat berish uchun ishlatiladi.

user.js

var express = talab qilish ('ekspress'); var router = express. Router (); var pasport = talab ('pasport'); var LocalStrategy = talab ('pasport-mahalliy'). Strategiya; var User = talab ('../ modellar/foydalanuvchi'); // Ro'yxatdan o'tish router.get ('/register', funktsiyasi (req, res) {res.render ('registr');}); // User router.post ('/register', function (req, res) {var name = req.body.name; var email = req.body.email; var username = req.body.username; var password = req.body.password; var password2 = req.body.password2; // Tekshirish req.checkBody ('ism', 'Ism talab qilinadi'). notEmpty (); req.checkBody ('elektron pochta', 'Elektron pochta kerak')).notEmpty (); req.checkBody ('elektron pochta', 'Elektron pochta haqiqiy emas'). isEmail (); req.checkBody ('foydalanuvchi nomi', 'Foydalanuvchi nomi kerak'). notEmpty (); req.checkBody (' notEmpty (); req.checkBody ('password2', 'Parollar mos kelmaydi'). teng (req.body.password); var error = req.validationErrors (); if (xatolar) {res.render ("ro'yxatdan o'tish", {xatolar: xatolar});} boshqa {var newUser = yangi foydalanuvchi ({ism: ism, elektron pochta: elektron pochta, foydalanuvchi nomi: foydalanuvchi nomi, parol: parol}); User.createUser (newUser, function (err, user) {if (err) error err; console.log (user);}); req.flash ('muvaffaqiyat_msg', 'Siz ro'yxatdan o'tdingiz va endi kira olasiz'); res.redirect (' /Kirish'); } });

Buni parcha -parcha sindirish

Birinchidan, biz zarur bo'lgan barcha o'rta mahsulotlarni o'z ichiga olamiz, keyin biz quyida tavsiflangan namunaviy faylimizni kiritamiz. Biz ro'yxatga olish yorlig'idan o'tamiz va registrning rulda matnini ko'rsatamiz. Keyin muhim funktsiya keladi. Bu bizga yangi foydalanuvchini ma'lumotlar bazamizda ro'yxatdan o'tkazishga imkon beradi. Funktsiya barcha maydonlarning to'g'riligini va shaklga kiritilganligini tekshiradi, aks holda bu ularni talab qiladi. Keyin u xatolarni tekshiradi va agar xato bo'lmasa, u berilgan ma'lumot bilan yangi foydalanuvchi yaratadi. Keyin kirish sahifasiga qaytadi, bu sizga kirishga imkon beradi.

login.js

var express = talab ("ekspress");

var router = express. Router (); var pasport = talab ('pasport'); var LocalStrategy = talab ('pasport-mahalliy'). Strategiya; var User = talab ('../ modellar/foydalanuvchi'); /* Foydalanuvchilar ro'yxatini oling. */// Bosh sahifa router.get ('/', funktsiyasi (req, res) {res.render ('login');}); passport.use (yangi LocalStrategy (funksiya (foydalanuvchi nomi, parol, bajarilgan)) {User.getUserByUsername (foydalanuvchi nomi, funksiya (xato, foydalanuvchi)) {if (xato) xato qilsa; agar (! foydalanuvchi) {qaytish bajarilgan bo'lsa (null, false, { xabar: 'Noma'lum foydalanuvchi'});} User.comparePassword (parol, user.password, funktsiya (err, isMatch) {if (err) xato qilsa; (isMatch) {qaytish bajarilgan (null, foydalanuvchi);} boshqa { qaytish bajarildi (null, noto'g'ri, {xabar: 'Parol noto'g'ri'});}});});})); passport.serializeUser (funktsiya (foydalanuvchi, bajarilgan) {bajarilgan (null, user.id);}); passport.deserializeUser (funktsiya (id, bajarilgan) {User.getUserById (id, funksiya (xato, foydalanuvchi) {bajarilgan (xato, foydalanuvchi);});}); router.post ('/login', passport.authenticate ('mahalliy', {successRedirect: '/', failRedirect: '/login', failFlash: true}), funktsiya (req, res) {res.redirect ('/ asboblar paneli ');}); router.get ('/logout', function (req, res) {req.logout (); req.flash ('muvaffaqiyat_msg', 'Siz tizimdan chiqdingiz'); res.redirect ('/bosh sahifa');});

module.exports = yo'riqnoma;

Birinchidan, biz zarur bo'lgan barcha o'rta mahsulotlarni o'z ichiga olamiz, keyin biz quyida tavsiflangan namunaviy faylimizni kiritamiz. Biz kirish yorlig'idan yo'nalishni o'rnatamiz va kirish ruchkasi matnini ko'rsatamiz. Keyin biz kiritgan foydalanuvchi nomi va parolni olish va ularni ma'lumotlar bazamizda tekshirish uchun ba'zi pasport funktsiyalaridan foydalanamiz. Biz shifrlangan paroldan foydalanamiz, bu malina pi ga kirishni biroz sekinlashtirishi mumkin. Bu haqda keyinroq batafsilroq tushuntiraman. Foydalanuvchi nomi va parolni tasdiqlaganingizdan so'ng, siz bosh sahifaga yo'naltirilasiz, u bizni indeks faylimizda o'rnatganimizda boshqaruv panelini ko'rsatadi. Shuningdek, biz bu yerdan chiqish imkoniyatini qo'shamiz.

Yuqorida aytib o'tganimdek, biz ma'lumotlar bazasini tekshirish uchun model yaratishimiz kerak bo'ladi.

Bu sizning asosiy dastur papkangiz ostida modellar deb nomlangan papka yaratish orqali amalga oshiriladi. Bu papkada user.js fayli ham kerak.

model/user.js

var mongoose = talab ('mongoose');

var bcrypt = talab ('bcryptjs'); // Foydalanuvchi sxemasi bor UserSchema = mongoose. Schema ({username: {type: String, index: true}, parol: {type: String}, email: {type: String}, name: {type: String}}); var User = module.exports = mongoose.model ('Foydalanuvchi', UserSchema);

module.exports.createUser = funktsiyasi (yangi foydalanuvchi, qayta qo'ng'iroq qilish) {

bcrypt.genSalt (10, funktsiya (xato, tuz) {bcrypt.hash (newUser.password, tuz, funksiya (xato, xash) {newUser.password = xash; newUser.save (qayta qo'ng'iroq);});)); } module.exports.getUserByUsername = funktsiya (foydalanuvchi nomi, qayta qo'ng'iroq) {var query = {username: username}; User.findOne (so'rov, qayta qo'ng'iroq qilish); } module.exports.getUserById = funktsiyasi (id, qayta qo'ng'iroq) {User.findById (id, qayta qo'ng'iroq); } module.exports.comparePassword = funktsiya (nomzodPassword, xesh, qayta qo'ng'iroq) {bcrypt.compare (namizədPassword, xash, funktsiya (xato, isMatch) {if (xato) xato qilsa; qayta qo'ng'iroq qilish (null, isMatch);}); }

Ushbu modelda bizning foydalanuvchi parametrlari qanday bo'lishi va ularga qanday kirishimiz ko'rsatilgan. Yuqorida aytib o'tgan edim, biz parollarimizni shifrlaymiz. bu buzilgan taqdirda ma'lumotlar bazasida hech kimning parollari saqlanmasligi uchun. Parollar o'rta darajadagi bcrypt yordamida himoyalangan.

5 -qadam: Trafik hisoblagichi

Yo'l harakati hisoblagichi
Yo'l harakati hisoblagichi

Men veb -sahifamga qancha noyob foydalanuvchilar tashrif buyurganini ko'rishni va "xitlar" sonini sanashni xohlardim. Buni amalga oshirishning ko'plab usullari bor, men buni qanday qilganimni tushuntiraman.

Bu mening sahifamga qancha foydalanuvchilar tashrif buyurganligini va har bir noyob tashrifchi necha marta tashrif buyurganligini kuzatish uchun mongodb to'plamidan foydalanadi.

Biz allaqachon mongoDB ni o'rnatish haqida gapirganimiz uchun, men uni boshqa o'tkazmayman.

Kompilyatsiya qilish uchun ma'lumotlar bazasiga ikkita to'plam qo'shish kerak bo'lishi mumkin. Buni amalga oshirish uchun, agar siz foydalanuvchi interfeysidan foydalansangiz, RoboMongo -ni o'rnatishingiz mumkin, lekin agar siz men kabi boshsiz malina pi dan foydalansangiz, siz quyidagi buyruqlarni yoqtirasiz.

Mongo qobig'i

JBni tahrirlash, ma'lumot olish yoki kollektsiya yaratish uchun sizga monsiz qobiq kerak bo'ladi.

Yugurish

mongo

Bu qobiqni ochadi.

To'plam qo'shing

Mening holatimda, ma'lumotlar bazasi loginapp deb ataladi, siz xohlagan narsani nomlashingiz mumkin.

nameofyourdb dan foydalaning

Bizning saytimizga tashrif buyuradigan foydalanuvchilarning barcha IP -manzillarini saqlash uchun bizga to'plam kerak.

db.creatCollection ("ip")

Keyin biz saytimizning noyob xitlarini hisoblash uchun to'plam yaratamiz. Bu id bilan boshlanadi va 0 dan boshlanadi.

db.createCollection ("hisoblash", {id: "taymer", hisob: 0})

IP manzillarini kuzatish

Buning uchun biz bosh sahifamizga kirgan foydalanuvchilarni IP -ni tortib olamiz, sonimizni ko'paytiramiz va ularni keyinchalik taqqoslash uchun saqlaymiz.

Biz mongoose sxemalarini saqlash uchun ba'zi modellar yaratishimiz va homepage.js faylimizga kod qo'shishimiz kerak.

Biz count.js va ip.js fayllarini yaratamiz va ularni modellar papkasida saqlaymiz.

IP.js fayli faqat bizning IP manzilimiz uchun sxemadir

var mongoose = talab ('mongoose'); // mongo uchun paket ishlovchisi

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

count.js bizning asosiy sahifamiz tomonidan xit kuzatishni boshlash uchun chaqiriladi. Bu quyida ko'rsatilgan tarzda amalga oshiriladi.

//Homepagerouter.get('/ ', funktsiyasi (req, res) {publicIp.v4 (). Keyin (ip => {Public_ip = ip; console.log ("ipv4:"+ Public_ip); // =>') 46.5.21.123 '}); publicIp.v6 (). Keyin (ip => {console.log ("ipv6" + ip); Public_ip = ip; // =>' fe80:: 200: f8ff: fe21: 67cf ') });

Count.getCount (to'plam, ipc, Public_ip, funktsiya (hisoblash) {

}); count = db.collection ('count'). findOne ({id: "hit counter"}, funktsiya (xato, hisoblash) {userCount = count.count; res.render ('bosh sahifa', {count: userCount}); }); });

Bu har safar kimdir bizning bosh sahifamizga kirganda sodir bo'ladi, bu holda theinternet.onthewifi.com/homepage.

U foydalanuvchining IP -manzilini tekshiradi, ip4 yoki ip6, keyin esa bu qiymatni count.js faylimizda saqlanadigan count.get.collection -ga yuboradigan joyda saqlaydi.

Foydalanuvchining o'ziga xosligini tekshirgandan so'ng, u hisob qiymatini boshqaruvchi o'zgaruvchisi sifatida bosh sahifaga qaytaradi va yuboradi.

Count.js fayli quyidagicha.

//count.jsvar mongo = talab ('mongodb'); // ma'lumotlar bazasini qo'llab -quvvatlaydi var mongoose = talab ('mongoose'); // mongo mongoose.connect uchun paket ishlovchisi ('mongodb: // localhost/loginapp'); var db = mongoose.connection; var Ip = talab ('../ modellar/ip'); // Count Schema var CountSchema = mongoose. Schema ({id: {type: String,}, count: {type: Number,}}); var Count = module.exports = mongoose.model ('Count', CountSchema); module.exports.getCount = funktsiya (hisoblash, ipc, Public_ip, qayta qo'ng'iroq qilish) {// hisoblash - test, qayta qo'ng'iroq qilish funktsiyasi ipc.findOne ({ip: Public_ip}, funktsiya (xato, iptest) {agar (! iptest) // qo'shish agar ma'lumotlar bazasida bo'lmasa, yangi ip va hisoblagichni yangilang {var new_ip = new Ip ({ip: Public_ip, count: 1}); db.collection ('ip'). save (new_ip); // ga yangi ip qo'shing ma'lumotlar bazasi count.update (// taymer taymerini yangilash {id: "hit counter"}, {$ inc: {count: 1}})} boshqa // ma'lum IP hisoblagichni yangilang, kim ko'proq tashrif buyurishini ko'rish uchun {ipc.update ({ip: Public_ip}, {$ inc: {count: 1}})}})); }

Bu hisoblash sxemasini va.getCount funktsiyasini yaratadi.. GetCount funktsiyasi ma'lumotlar bazasini foydalanuvchilar IP -ni tekshiradi va agar uni topsa, funktsiya hisoblagichni emas, balki o'sha foydalanuvchining sonini oshiradi. Biroq, agar IP -ning foydalanuvchilari topilmasa, u IP -foydalanuvchilar bilan yangi yig'ish ob'ektini yaratadi va hisoblagichni 1 ga oshiradi.

Keyin u qaytariladi va veb -sahifada ko'rsatiladi.

U erda sizda ipni kuzatib boruvchi taymer bor.

6 -qadam: Blog

Blog
Blog

Hozir men dasturiy ta'minot, aqlli uylar va polaroidlar haqidagi qiziqishlarimga bag'ishlangan blog ishlab chiqishga harakat qilyapman. Shunday qilib, men blog bo'limini yaratdim. Blogda statik html sahifalari va boshqaruv paneli ishlatiladi. Blogni osonlashtirish uchun yaxshiroq texnologiyalarni ko'rib chiqqach, men hugo yordamida veb -saytimni qayta loyihalashtirdim. Hugo - bu statik html generatori. Men bu haqda quyida aytib o'tilgan darslikda ko'proq gaplashaman.

7 -qadam: tugadi

U erda siz mening malina pi -da joylashgan node.js veb -saytida chuqur o'rganishga o'tasiz. Agar sizda savollar yoki sharhlar bo'lsa, ularni quyida qoldiring.

Umid qilamanki, bu boshqalarga yordam beradi.

Hugo -dan foydalanib, ushbu saytga boshqacha yondashish uchun, statik veb -sahifalar generatori mening boshqa darsligimni ko'ring (yaqinda).

Tavsiya: