Мазмуну:
- 1 -кадам: Колдонмонун структурасы
- 2 -кадам: Үлгүңүздү жайгаштыруу
- {{title}}
- 3 -кадам: Байланыш формасы
- 4 -кадам: Кирүү Барагы
- 5 -кадам: Traffic Counter
- 6 -кадам: Блог
- 7 -кадам: Бүттү
Video: Node.js Webpage Part 2: 7 Steps
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:40
2 -БӨЛҮКкө кош келиңиз !!
Бул менин Node.js веб -сайтынын колдонмосунун 2 -бөлүгү. Мен бул окуу куралын эки бөлүккө бөлдүм, анткени ал кыскача тааныштырууну талап кылгандар менен веб -баракчадан толук үйрөткүчтү каалагандарды бөлүп турат.
Мен сайтымды түзүү аркылуу бара жатам. Сиздики башкача болушу мүмкүн, андыктан меникин ээрчип, колдонулган ыкмаларды үйрөнүңүз. Башка HTML шаблонун тандап алгандан кийин, агым бир аз башкача болот. Муну эске алыңыз.
1 -кадам: Колдонмонун структурасы
Ошентип, менин сайтым экспресс -генераторду ээрчийт, бирок мен нефритке караганда рулду колдондум. Эгер нефритти жактырсаңыз, анда ага барыңыз! Jade - бул бардык кашааларсыз жана дивдерсиз кыска кол HTML. Эгер сиз түшүнбөсөңүз, анда YouTubeга кирип, HTML сабактарын көргүңүз келиши мүмкүн.
Мен HTML жана рулду жакшы көрөм жана өзүмдү ыңгайлуу сезем, ошондуктан мен колдонгон нерсе ушул. Рулдуу экспресс долбоорду түзүү үчүн экспресс буйругун аткарыңыз.
express --hbs nameofmyapp
Андан кийин бардык орто товарларды орнотуу үчүн 1-бөлүктөгү кадамды улантыңыз.
Экспресс абдан белгилүү колдонмо түзүмүн түзөт жана эң пайдалуу бири node.js тиркемелери кээ бир вариациялар менен бул форманы карманышат.
Тартылган сүрөттө сиз ар кандай папкаларды жана файлдарды көрө аласыз, төмөндө мен мунун баарын түшүндүрүүгө аракет кылам.
бин
Бул папка node.js сиздин серверди баштаганда биринчи иштетилет. Ал www файлын карайт жана бул файлды аткаруу үчүн ээрчийт. Www файлы node.jsке 3000 портунда серверди баштоону айтат (бул дээрлик баарына өзгөрүшү мүмкүн) жана окуяны угуучу жана башка ушул сыяктуу нерселерди жасаңыз. Эң башкысы - бул сиздин колдонмоңуз орнотулган порт.
node_modules
Бул папкада орто буюмдар деп аталат. Ортоңку буюмдар Мен сизге коддоону жеңилдетүү үчүн кошумча программа катары түшүндүрүүнү жакшы көрөм. Булар негизинен башка китепканалар, сиз үчүн колдонууга даярдалган функциялар. Мен бул долбоор үчүн колдонгон кээ бир кошумча буюмдар Nodemailer, Passport, Nodemon, bycrypt жана башкалар болгон.
коомдук
Бул жерде сиздин веб -сайтыңыз үчүн бардык сүрөттөрүңүз, CSS жана JavaScript бармак. Булар веб -баракчалар тарабынан түздөн -түз колдонулат.
маршруттар
Бул сиздин сайттын жолдорун аныктайт. Мисалы, башкы бет, кирүү баракчасы жана башкалар.
көрүүлөр
Көрүнүп тургандай, бул.hbs файлдары же.handlebars, же иштейт, ал жөн гана app.js файлын бир аз иштетүүнү талап кылат. Бул браузерде көрсөтүлө турган HTML барактарыңыз. Макет - бул сиздин негизги жайгашуу файлыңыз жана кээде өзүнүн жайгашуу суб папкасында болот. Негизги жайгашуу файлы сиздин башка рулдук файлдарыңызга чалып, аларды көрсөтөт, бул биз кодго киргенибизде мааниси чоң болот.
app.js
Бул сиздин негизги колдонмо файлыңыз, кээде бул сервер деп аталат, жөн гана орнотуудан көз каранды. Бул файлда сервердин бардык конфигурациясы, ал тургай кээ бир атайын функциялары бар. Ошондой эле ката иштетүүчү болот.
package.json
Бул файл экспресс тарабынан түзүлгөн жана npmге сиздин проектиңизде колдонууну каалаган бардык орто программаларды айтат. Сиз npm орнотууну иштеткенден кийин, бул файлда аталган бардык орто буюмдар node_modules папкасына орнотулат.
2 -кадам: Үлгүңүздү жайгаштыруу
Сиз HTMLиңиздин бардыгын нөлдөн түзө аласыз же шаблонду колдоно аласыз. Мен бул сайт үчүн шаблон колдондум. Мен жардам берген башка сайттар нөлдөн баштап коддолгон. Тандоо сиздики, бул кадам шаблондун жайгашуусун түшүндүрөт.
Менин веб -тиркемеде таң калыштуу 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.
Экспресс индексти түздү.handlebars
{{title}}
{{Title}} кош келиңиз
Index.handlebars файлы {{{body}}} тегине өзгөрмө катары берилет жана веб -баракчаңызда көрсөтүлөт.
Бул сиздин веб -сайтыңыздын статикалык бөлүгүн жана өзгөрмөлүү бөлүгүн алууга мүмкүндүк берет. Бул жогорку жана төмөнкү колонтитулдарды жагымдуу кылат, анткени сиз баракты толугу менен кайра көрсөтүүнүн кажети жок, жаңы баракты жүктөөдө кээ бир маалыматтар гана өзгөрөт.
3 -кадам: Байланыш формасы
Кимдир бирөө суроолор же комментарийлер менен менин сайтымдын электрондук почтасына кат жөнөтө алышы үчүн, мен веб баракчама байланыш формасын киргиздим.
Бул байланыш формасында Npm Mailer деп аталган npm ортоңку буюмдар колдонулган.
Node Mailer жөндөө
Түйүн почтасын орнотуу үчүн сиз төмөнкү кодду эң жогорку деңгээлдеги файлыңызда иштетишиңиз керек, биздин учурда, myapp.
sudo npm nodemailer орнотуу
Орнотулгандан кийин, app.js файлыңызда бир нече нерселерди орнотушуңуз керек болот.
Биринчиси, жөн гана көз карандылык, бул түйүндү биз бул орто программаны колдонууну пландап жатканыбызды билдирет.
var nodemailer = талап кылуу ('nodemailer');
Экинчиден, биздин ташуучубуз, ташуучу почта серверине туташуу үчүн колдонулат, менин учурда gmail.
// Ташуучу gmail эсебин алуу үчүн колдонулат
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 МК-EKPMYmwxFe9AOZ7mY6kurYyQ7e1Mu8m8INxg7 '}})
Эгерде почта серверин башка почта менен колдонсоңуз, бул жерден документтерди жана жардамды издеңиз.
Адамдан адамга бир нече нерсе өзгөрөт: user, clientId, clientSecret. refreshToken жана accessToken.
Сиздин userId - бул сиз колдонгуңуз келген электрондук почта, мен сайтыма окшош жаңысын жасадым.
ClientId, clientSecret, refreshToken жана accessToken Google каттоо эсебиңиз аркылуу табылышы керек.
Эгер сизге көбүрөөк жардам керек болсо, бул видеону бул жерден көрө аласыз.
Бардык талаалар толтурулгандан кийин, биз билдирүүбүздүн чоо -жайын кошобуз.
Андан кийин биз формабыздагы бардык талаалар киргизилгенин жана жарактуу жооптор экенин текшеришибиз керек.
// Express Validatorapp.use (expressValidator ({errorFormatter: функция (парам, мсг, маани)) {var namespace = param.split ('.'), Root = namespace.shift (), formParam = root; while (namespace.length) {formParam + = '[' + namespace.shift () + ']';} return {param: formParam, msg: msg, value: value};}}));
Биз азыр веб -баракчабыздагы байланыш формасынан маалымат алып, билдирүү жөнөтүшүбүз керек.
// Байланыш тапшыруу баскычынан пост, тапшырылган formapp.post ('/contact_Form', функциясы (req, res) үчүн ийгиликтүү билдирүү менен башкы баракча түзүү керек {// homepage.hbs var nameден байланыш формасынан маалымат алыңыз = 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 ' + билдирүү} transporter.sendMail (mailOptions, функция (ката, res) {if (err) {console.log ('Error');} else {console.log ('Email sent');}}) res.render ('index'); // render жаңы башкы баракча, муну ийгиликтүү билдирүү менен кантип жасоону карап көрүңүз, чыгуу баракчасы сыяктуу})
Flash
Flash иш -аракеттер бүткөндөн кийин билдирүүлөрдү көрсөтүү үчүн колдонулат. Муну форма тапшырганда же талаага туура эмес киргизгенде көрө аласыз.
Башка npm орто программасы сыяктуу эле флэшти орнотуңуз.
sudo npm connect-flash орнотуу
var flash = талап кылуу ('connect-flash'); // экранда билдирүүлөрдү көрсөтүү үчүн флеш функциясы болгон
// Flashapp.use туташуу (flash ());
Веб баракчасындагы билдирүүлөрдү түртө турган жана жаңыртуучу жаркылдатууну иштетүү. Бул ийгиликтер сыяктуу нерселерди айткан билдирүүлөр, же маалымат туура эмес киргизилген.
// Global Vars
app.use (функция (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 паспорт-жергиликтүү && npm bcryptjs орнотуу
&& бир сызык менен бир нече буйруктарды иштетүүгө мүмкүндүк берет.
Кирүү жана Колдонуучулар
Сиз маршруттар папкаңыздын астында login.js жана user.js файлын түзүшүңүз керек болот. Бул биздин маалымат базабызда сактала турган колдонуучуну түзүүгө жана колдонуучуга маалымат базасын текшерүү менен кирүүгө уруксат берүү үчүн колдонулат.
user.js
var express = талап кылуу ('экспресс'); var роутер = express. Router (); var passport = талап кылуу ('паспорт'); var LocalStrategy = талап кылуу ('паспорт-жергиликтүү'). Стратегия; var User = талап кылуу ('../ моделдер/колдонуучу'); // Register router.get ('/register', function (req, res) {res.render ('register');}); // Колдонуучуну каттоо router.post ('/register', милдети (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; // Текшерүү req.checkBody ('аты', 'Аты талап кылынат'). notEmpty (); req.checkBody ('электрондук почта', 'Электрондук почта керек')).notEmpty (); req.checkBody ('email', 'Email is not valid'). isEmail (); req.checkBody ('username', 'Username is' '.. notEmpty (); req.checkBody (' сырсөз ',' Сырсөз талап кылынат '). notEmpty (); req.checkBody (' password2 ',' Сырсөздөр дал келбейт '). барабар (req.body.password); var error = req.validationErrors (); if (каталар) {res.render ('катталуу', {каталар: каталар});} башка {var newUser = жаңы колдонуучу ({аты: аты, электрондук почта: электрондук почта, колдонуучунун аты: колдонуучу аты, сырсөз: пароль}); User.createUser (newUser, милдети (ката, колдонуучу) {if (err) ыргытуу катасы; console.log (user);}); req.flash ('success_msg', 'Сиз катталдыңыз жана эми кире аласыз'); res.redirect (' /кирүү ');}});
Муну бөлүк -бөлүккө бөлүү
Биринчиден, биз керектүү бардык орто буюмдарды камтыйбыз, андан кийин биз төмөндө түшүндүрүлгөн моделдик файлды кошобуз. Биз реестрдин тегинен тартып, регистрдин рулунун текстин көрсөтөбүз. Андан кийин маанилүү функция келет. Булар биздин базада жаңы колдонуучуну каттоого мүмкүндүк берет. Функция бардык талаалар жарактуу экенин жана формага киргизилгенин текшерет, эгер андай болбосо, аларды талап кылат. Андан кийин ал каталарды текшерет, эгерде ката кетпесе, анда берилген маалымат менен жаңы колдонуучу пайда болот. Андан кийин ал кирүү баракчасына кайра кирип, кирүүгө мүмкүнчүлүк берет.
login.js
var express = талап кылуу ('экспресс');
var router = express. Router (); var passport = талап кылуу ('паспорт'); var LocalStrategy = талап кылуу ('паспорт-жергиликтүү'). Стратегия; var User = талап кылуу ('../ моделдер/колдонуучу'); /* Колдонуучулардын тизмесин алуу. */// Башкы бет router.get ('/', функциясы (req, res) {res.render ('login');}); passport.use (жаңы LocalStrategy (функция (колдонуучунун аты, сырсөз, аткарылган)) {User.getUserByUsername (колдонуучунун аты, функция (ката, колдонуучу)) {if (err) ката кетир; if (! user) {return done (null, false, { билдирүү: 'Белгисиз Колдонуучу'});} User.comparePassword (сырсөз, user.password, функция (err, isMatch) {if (err) ыргытуу катасы; if (isMatch) {return done (null, user);} башка { кайтаруу аткарылды (null, false, {message: 'Invalid password'});}});});})); passport.serializeUser (функция (колдонуучу, аткарылган) {аткарылган (null, user.id);}); passport.deserializeUser (функция (id, аткарылган) {User.getUserById (id, функция (ката, колдонуучу) {аткарылган (ката, колдонуучу);});}); router.post ('/login', passport.authenticate ('local', {successRedirect: '/', failRedirect: '/login', failFlash: true}), функция (req, res) {res.redirect ('/ панели ');}); router.get ('/logout', function (req, res) {req.logout (); req.flash ('muvaffaqiyat_msg', 'Сиз чыктыңыз'); res.redirect ('/башкы баракча');});
module.exports = роутер;
Биринчиден, биз керектүү бардык орто буюмдарды камтыйбыз, андан кийин биз төмөндө түшүндүрүлгөн моделдик файлды кошобуз. Биз кирүү тегинен маршрут алабыз жана кирүү рулубуздун текстин көрсөтөбүз. Биз анда киргизилген колдонуучунун атын жана сырсөзүн алуу жана биздин маалымат базасына каршы текшерүү үчүн кээ бир паспорттук функцияларды колдонобуз. Биз шифрленген сырсөздү колдонобуз, ал малина пи боюнча кирүүнү бир аз жайыраак кылат. Мен муну кийинкиде кеңири түшүндүрөм. Колдонуучунун атын жана сырсөзүн ырастагандан кийин, сиз башкы бетке багытталасыз, ал панелди биз индекстин файлына орнотуп жатканда көрсөтөт. Биз бул жерден чыгуу мүмкүнчүлүгүн дагы кошобуз.
Жогоруда айткандай, биз дагы маалымат базасын текшерүү үчүн моделди түзүшүбүз керек.
Бул моделдер деп аталган негизги колдонмо папкаңыздын астындагы папканы түзүү аркылуу жасалат. Бул папкада user.js файлы да керек.
модель/user.js
var mongoose = талап кылуу ('mongoose');
var bcrypt = талап кылуу ('bcryptjs'); // Колдонуучунун схемасы бар UserSchema = mongoose. Schema ({колдонуучунун аты: {түрү: Стринг, индекси: чыныгы}, сырсөзү: {түрү: Страны}, электрондук почтасы: {түрү: Страны}, аты: {түрү: Сапы}}); var User = module.exports = mongoose.model ('User', UserSchema);
module.exports.createUser = функция (жаңы колдонуучу, кайра чалуу) {
bcrypt.genSalt (10, функция (ката, туз) {bcrypt.hash (newUser.password, туз, функция (ката, хэш) {newUser.password = hash; newUser.save (callback);});}); } module.exports.getUserByUsername = функция (колдонуучунун аты, кайра чалуу) {var query = {username: username}; User.findOne (суроо, кайра чалуу); } module.exports.getUserById = функция (id, кайра чалуу) {User.findById (id, кайра чалуу); } module.exports.comparePassword = функция (талапкерPassword, хэш, кайра чалуу) {bcrypt.compare (кандидатПассвод, хэш, функция (ката, isMatch) {if (ката) ката кетирүү; кайра чалуу (null, isMatch);}); }
Бул модель биздин колдонуучунун параметрлери кандай болорун жана аларга кантип кирээрибизди көрсөтөт. Мен буга чейин паролдорубузду шифрлей тургандыгыбызды айткан элем. Бул эч кимдин сырсөзү бузулган учурда маалымат базасында сакталбашы үчүн. Сырсөздөр орто товардык bcrypt аркылуу хэштелген.
5 -кадам: Traffic Counter
Мен веб -баракчама кирген канча уникалдуу колдонуучуну көрүп, "хиттердин" санын эсептегим келди. Мунун көптөгөн жолдору бар, мен муну кантип кылганымды түшүндүрөм.
Бул mongodb коллекциясын колдонуп, менин баракчама канча колдонуучу киргенин жана ар бир уникалдуу конок канча жолу келгенин көзөмөлдөө үчүн колдонулат.
Биз буга чейин mongoDB түзүү жөнүндө сүйлөшкөндүктөн, мен аны кайра өткөрбөйм.
Сиз чогултуу үчүн маалымат базаңызга эки коллекцияны кошушуңуз керек болушу мүмкүн. Бул үчүн сиз UI колдонуп жатсаңыз RoboMongo орнотсоңуз болот, бирок эгерде мен сыяктуу башы жок малина пи колдонсоңуз, анда сиз төмөнкү буйруктарды кызыктуу кыласыз.
Mongo shell
ДБны түзөтүү, маалымат алуу же коллекция түзүү үчүн башы жок бирдикке монго кабыгы керек болот.
Run
mongo
Бул кабыкты ачат.
Жыйнак кошуу
Менин учурда, маалымат базасы loginapp деп аталат, сиз каалаган нерсеңизди атасаңыз болот.
nameofyourdb колдонуңуз
Биздин сайтка кирген колдонуучулардын бардык IP даректерин кармоо үчүн бизге коллекция керек.
db.creatCollection ("ip")
Андан кийин биз сайтыбыздын уникалдуу хиттерин эсептөө үчүн коллекция түзөбүз. Бул id менен башталат жана 0дөн башталат.
db.createCollection ("эсептөө", {id: "эсептегичти кармоо", саноо: 0})
IP даректерин көзөмөлдөө
Бул үчүн биз колдонуучуларды биздин башкы баракчага киргенде Ip тартып, саныбызды көбөйтүп, кийинчерээк салыштыруу үчүн сактайбыз.
Биз mongoose схемаларыбызды сактоо үчүн кээ бир моделдерди түзүшүбүз керек жана homepage.js файлына кээ бир коддорду кошушубуз керек.
Биз count.js жана ip.js түзүп, аларды биздин моделдер папкасында сактайбыз.
Ip.js файлы биздин IP дарегибиздин схемасы
var mongoose = талап кылуу ('mongoose'); // mongo үчүн пакет иштетүүчү
// Count Schema var IpSchema = mongoose. Schema ({ip: {type: String,}, count: {type: Number,}}); var Ip = module.exports = mongoose.model ('Ip', IpSchema);
count.js биздин башкы баракчага хитке көз салууну баштоо үчүн чакырылат. Бул төмөндөгүдөй жасалат.
//Homepagerouter.get('/ ', функция (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, функция (саноо) {
}); count = db.collection ('count'). findOne ({id: "hit counter"}, функция (ката, count) {userCount = count.count; res.render ('үй баракчасы', {count: userCount}); }); });
Бул кимдир бирөө биздин башкы бетибизге кирген сайын болот, бул учурда theinternet.onthewifi.com/homepage.
Колдонуучунун IP дарегин текшерет, ip4 же ip6, анан ошол баалуулукту сактайт, ал биздин count.js файлында сакталган function.get.collection.
Колдонуучунун уникалдуулугун текшергенден кийин, ал кайтып келет жана репортердун өзгөрмөсү катары башкы баракка санап коюлат.
Count.js файлы төмөнкүчө.
//count.jsvar mongo = талап кылуу ('mongodb'); // базаны колдойт var mongoose = талап ('mongoose'); // mongo mongoose.connect үчүн пакет иштетүүчү ('mongodb: // localhost/loginapp'); var db = mongoose.connection; var Ip = талап кылуу ('../ моделдер/ip'); // Count Schema var CountSchema = mongoose. Schema ({id: {type: String,}, count: {type: Number,}}); var Count = module.exports = mongoose.model ('Count', CountSchema); module.exports.getCount = функция (эсептөө, ipc, Public_ip, кайра чалуу) {// эсептөө тест, кайра чалуу функциясы ipc.findOne ({ip: Public_ip}, функция (ката, iptest) {эгер (! iptest) // кошуу маалымат базасында жок болсо, жаңы IP жана эсептегичти жаңыртуу {var new_ip = new Ip ({ip: Public_ip, count: 1}); db.collection ('ip'). save (new_ip); // жаңы ip кошуу database.update (// хит эсептегичти жаңыртуу {id: "hit counter"}, {$ inc: {count: 1}})} башка // белгилүү бир IP эсептегичти жаңыртуу, ким көп барарын көрүү үчүн {ipc.update ({ip: Public_ip}, {$ inc: {count: 1}})}}); }
Бул эсептөө схемасын жана биздин.getCount функциясын түзөт.. GetCount функциясы ДБны колдонуучулардын IP үчүн текшерет жана эгерде аны тапса, функция хит эсептегичти эмес, ошол колдонуучунун санын көбөйтөт. Бирок, эгерде колдонуучулардын ipи табылбаса, анда ал ip колдонуучулары менен жаңы коллекция объектин түзүп, хит эсептегичти 1ге көбөйтөт.
Бул кайра кайтарылып, веб -баракчага көрсөтүлөт.
Ал жерде сизде IP көзөмөлдөөчү эсептегич бар.
6 -кадам: Блог
Учурда мен программалык камсыздоо, акылдуу үйлөр жана поляроиддер жөнүндө кызыкчылыктарым боюнча борборлоштурулган блогду иштеп чыгууга аракет кылып жатам. Ошентип, блог бөлүмүн түздүм. Блог статикалык html барактарын жана рулдук алкакты колдонот. Блог жазууну жеңилдетүү үчүн жакшыраак технологияларды карап чыккандан кийин, мен веб -сайтымды hugo аркылуу кайра иштеп чыктым. Уго - бул статикалык html генератору. Мен бул тууралуу кененирээк төмөндөгү окуу куралында сүйлөшөм.
7 -кадам: Бүттү
Ал жерде сиз менин малина пи боюнча жергиликтүү түрдө node.js веб -сайтында терең үйрөткүчкө барасыз. Эгерде сизде суроолор же комментарийлер болсо, аларды төмөндө калтырыңыз.
Мен бул жерде башкаларга жардам берет деп үмүттөнөм.
Уго менен бул сайтка башкача мамиле кылуу үчүн, веб -баракчалардын статикалык генератору менин башка окуу куралымды көрөт (жакында).
Сунушталууда:
Motion Activated Cosplay Wings Circuit Playground Express колдонуу - Part 1: 7 Steps (Сүрөттөр менен)
Motion Activated Cosplay Wings Circuit Playground Expressти колдонуп - 1 -бөлүк: Бул эки бөлүктөн турган долбоордун бир бөлүгү, мен сизге автоматтык жомок канаттарын жасоо процессимди көрсөтөм. Долбоордун биринчи бөлүгү - бул канаттардын механикасы, ал эми экинчи бөлүгү аны кийүүгө жарактуу кылып, канаттарды кошуу
Arduino LTC6804 BMS - Part 2: Balance Board: 5 Steps
Arduino LTC6804 BMS - Part 2: Balance Board: Part 1 бул жерде аныкталган диапазон, пакет дискотека болушу мүмкүн
Raspberry Pi жана Custom Webpage аркылуу Ledтин жарыктыгын көзөмөлдөө: 5 кадам
Raspberry Pi жана Custom Webpage аркылуу Led's Brightness контролдоо: PHP менен апа серверин колдонуп, мен сиздин пиңиз менен бир тармакка туташкан каалаган түзмөктө жеткиликтүү веб баракчасы бар слайдерди колдонуп, LEDтин жарыктыгын башкаруунун жолун таптым. .Мунун көптөгөн жолдору бар
Portable Arduino Workbench Part 1: 4 Steps
Portable Arduino Workbench 1 -бөлүк: Учууда бир нече долбоорлордун болушу менин жакында уюшулбай калганымды билдирет жана столумдун сүрөтү эмне болорун көрсөтөт. Бул стол гана эмес, менде дагы ушундай абалда бүткөн кабина жана жыгач устаканасы бар, бирок бул тыкан, электр шаймандары
Portable Arduino Workbench Part 2: 7 Steps
Portable Arduino Workbench 2 -бөлүк: Мен буга чейин 1 -бөлүмдө сүрөттөлгөн бул кутучалардын бир нечесин жасаган болчумун жана эгерде буюмдарды алып жүрүү жана долбоорду бирге кармоо үчүн кутуча талап кылынса, анда алар жакшы иштешет. Мен бүт долбоорду өз алдынча кармап, аны жылдыргым келди