Բովանդակություն:
- Քայլ 1: Հավելվածի կառուցվածքը
- Քայլ 2: Տեղադրեք ձեր ձևանմուշը
- {{կոչում}}
- Քայլ 3: Կոնտակտային ձև
- Քայլ 4: Մուտքի էջ
- Քայլ 5: Երթևեկության հաշվիչ
- Քայլ 6: Օրագիր
- Քայլ 7: Ավարտված
Video: Node.js վեբ էջ Մաս 2: 7 քայլեր
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:48
Բարի գալուստ ՄԱՍ 2 !!
Սա իմ Node.js վեբ կայքի կիրառման ձեռնարկի 2 -րդ մասն է: Ես այս ձեռնարկը բաժանեցի երկու մասի, քանի որ այն առանձնացնում է նրանց, ովքեր պարզապես կարճ ներածության կարիք ունեն, և նրանց, ովքեր ցանկանում են ամբողջական ձեռնարկ ձեռնարկել վեբ էջում:
Ես պատրաստվում եմ անցնել իմ կայքի ստեղծման միջոցով: Ձերը կարող է տարբեր լինել, այնպես որ հետևեք իմին և սովորեք օգտագործվող տեխնիկան: Երբ ընտրեք այլ HTML ձևանմուշ, հոսքը փոքր -ինչ այլ կլինի: Սա մտքում պահեք:
Քայլ 1: Հավելվածի կառուցվածքը
Այսպիսով, իմ կայքը հետևում է էքսպրես գեներատորին, սակայն ես ավելի շատ օգտագործել եմ ղեկ, այլ ոչ թե ջադ: Եթե սիրում եք ջադ, գնացեք դրան: Jade- ը կարճ ձեռքի HTML է ՝ առանց բոլոր փակագծերի և div- երի: Եթե չեք հասկանում, որ գուցե ցանկանաք այցելել youtube և դիտել HTML- ի որոշ ձեռնարկներ:
Ես նախընտրում եմ և ավելի հարմար եմ HTML- ի և ղեկի հետ, այնպես որ դա այն է, ինչ ես օգտագործել եմ: Handեկավարներով ճեպընթաց նախագիծ ստեղծելու համար գործարկեք express հրամանը:
express -hbs nameofmyapp
Այնուհետև շարունակեք հետևել 1-ին մասի քայլին ՝ ամբողջ միջին սարքավորումները տեղադրելու համար:
Express- ը ստեղծում է հավելվածների շատ կոնկրետ կառուցվածք, և շատ օգտակար node.js ծրագրերը հետևում են այս ձևին ՝ որոշակի տատանումներով:
Կցված լուսանկարում կարող եք տեսնել տարբեր թղթապանակներ և ֆայլեր, ներքևում ես փորձում եմ բացատրել այս բոլորը:
աղբարկղ
Սա այն թղթապանակն է, որն առաջինը գործարկվում է, երբ node.js- ը սկսում է ձեր սերվերը: Այն նայում է www ֆայլին և հետևում այս ֆայլին ՝ կատարման համար: Www ֆայլը node.js- ին ասում է, որ սերվերը սկսի 3000 պորտից (սա կարող է փոխվել գրեթե ամեն ինչի) և որոշ այլ բաներ անել, ինչպիսիք են իրադարձությունների ունկնդիրը և այլն: Ամենակարևորը նավահանգիստն է, որի վրա տեղադրված է ձեր ծրագիրը:
node_modules
Այս թղթապանակում կա այն, ինչ կոչվում է միջին սարքավորում: Միջին սարքավորում Ես սիրում եմ բացատրել որպես լրացուցիչ ծրագրակազմ ՝ ձեր համար կոդավորումը հեշտացնելու համար: Հիմնականում դրանք այլ գրադարաններ են, որոնց գործառույթները նախապես պատրաստված են ձեր օգտագործման համար: Այս նախագծի համար օգտագործված լրացուցիչ միջին սարքավորումները եղել են Nodemailer, Passport, Nodemon, bycrypt և այլն:
հանրային
Սա այն վայրն է, որտեղ կգնային ձեր վեբ կայքի բոլոր պատկերները, CSS- ը և javascript- ը: Դրանք ուղղակիորեն օգտագործվում են վեբ էջերի կողմից:
երթուղիներ
Սրանք ձեր կայքի երթուղիներ են: Օրինակ ՝ գլխավոր էջ, մուտքի էջ և այլն:
դիտումներ
Ինչպես տեսնում եք, դիտումները.hbs ֆայլեր կամ.handlebars են, կամ կաշխատեն, այն պարզապես պահանջում է app.js ֆայլի մանիպուլյացիա: Սրանք ձեր ղեկի html էջերն են, որոնք կցուցադրվեն դիտարկիչում: Դասավորությունը ձեր հիմնական դասավորության ֆայլն է և երբեմն գտնվում է իր դասավորության ենթապանակում: Հիմնական դասավորության ֆայլը կանչում է ձեր մյուս ղեկի ֆայլերին և ցուցադրում դրանք, սա ավելի իմաստալից կլինի, երբ մենք սուզվենք կոդի մեջ:
app.js
Սա ձեր հիմնական հավելվածի ֆայլն է, երբեմն դա սերվեր է կոչվում, ուղղակի կախված է կարգավորումից: Այս ֆայլն ունի սերվերի բոլոր կազմաձևերը և նույնիսկ որոշ հատուկ գործառույթներ: Այն նաև կլինի սխալների վարիչ:
փաթեթ. json
Այս ֆայլը ստեղծվում է express- ի միջոցով և npm- ին պատմում է այն բոլոր միջին ծրագրակազմը, որը ցանկանում եք օգտագործել ձեր նախագծում: Երբ գործարկեք npm install- ը, այս ֆայլում կանչված բոլոր միջին սարքավորումները կտեղադրվեն node_modules պանակում:
Քայլ 2: Տեղադրեք ձեր ձևանմուշը
Դուք կարող եք ստեղծել ձեր ամբողջ HTML- ը զրոյից կամ կարող եք օգտագործել ձևանմուշ: Այս կայքի համար ես օգտագործել եմ ձևանմուշ: Այլ կայքեր, որոնց ես օգնել եմ մշակել, կոդավորել եմ զրոյից: Ընտրությունը ձերն է, այս քայլը բացատրում է կաղապարի դասավորությունը:
Իմ վեբ ծրագիրը օգտագործում է bootstrap ձևանմուշ, որը հիանալի է զարմանալի CSS- ի պատրաստման համար: Կաղապարներ գտնելու համար այցելեք այս կայքը: Ինչպես և նախորդ քայլում նշվեց, բոլոր անհրաժեշտ css, js և img ֆայլերը գտնվում են հանրային թղթապանակի տակ: Այս ֆայլերը կայքին ավելի լավ տեսք են տալիս, քան պարզ տեքստը և դրա պատկերների օգտագործումը կայքում:
Որպեսզի ղեկի ձևանմուշի ոճը աշխատի ձևանմուշով: Էջերը բաժանված են երկու մասի: Առաջինը այն է, ինչին անվանում են «դասավորություն»: Դասավորությունը այն հատկություններն են, որոնք կցանկանայիք ցուցադրվել ձեր կայքի յուրաքանչյուր վեբ էջում: Իմ դեպքում սա վերնագիրն է, որն ունի նավիգացիոն գոտի և տողատակը, որը պարունակում է լրացուցիչ նավարկության և ցուցադրման կտորներ:
Դասավորության ֆայլը և ղեկի այլ ֆայլերը դիտումների պանակում են: Ես կանդրադառնամ ավելի պարզ դասավորությանը, որն ավելի վաղ օգտագործել էիք ՝ ցուցադրելու համար, թե ինչպես է աշխատում հայեցակարգը, այնուհետև կարող եք տեսնել իմ ծածկագիրը և համեմատել դրանք:
Էքսպրես առաջացած layout.handlebars ֆայլ
{{title}} {{{body}}}
Handեկի իսկական կախարդանքը ղեկի {{վերնագիր}} և {{{մարմին}}} մեջ է: Այսպիսով, այս երկուսը տարբեր կերպ են գործում {{title}} փոփոխական է, որը փոխանցվում է index.js ֆայլից երթուղիներում, ձևանմուշին փոխանցվելուց հետո այն ցուցադրվում է: {{{Մարմին}}} պիտակը վերցնում է այն, ինչ երբևէ կոչվում է ձեր երթուղու js ֆայլում մատուցման գործառույթում: Մեր դեպքում index.js- ն ունի այս տողը.
res.render ('index', {title: 'Express', count: userCount});
Սա կոչում է «ինդեքսի» ֆայլ, թե որն է ձեր շարժիչը, ժեդը, ղեկը և այլն, այնպես որ մեր դեպքում index.handlebars:
Էքսպրես գեներացվող ինդեքս. Handlebars
{{կոչում}}
Բարի գալուստ {{title}}
Index.handlebars ֆայլը փոփոխականի պես փոխանցվում է {{{{body}}} պիտակին և ցուցադրվում ձեր վեբ էջում:
Սա թույլ է տալիս ունենալ ձեր կայքի ստատիկ և փոփոխական հատված: Սա գեղեցիկ է դարձնում վերնագրերն ու տողատակը, քանի որ անհրաժեշտ չէ ամբողջ էջը նորից մատուցել: Նոր էջ բեռնելիս միայն որոշ տեղեկություններ են փոխվում:
Քայլ 3: Կոնտակտային ձև
Կոնտակտային ձևը ներառեցի իմ վեբ էջի մեջ, որպեսզի որևէ մեկը կարողանա էլեկտրոնային փոստով ուղարկել իմ կայքի էլ.
Այս կոնտակտային ձևը օգտագործել է npm միջին սարք, որը կոչվում է Node Mailer:
Node Mailer- ի ստեղծում
Node-mailer տեղադրելու համար պարզապես անհրաժեշտ է գործարկել ստորև նշված ծածկագիրը ձեր բարձր մակարդակի ֆայլում, մեր դեպքում `myapp:
sudo npm տեղադրել nodemailer
Տեղադրվելուց հետո ձեզ հարկավոր կլինի մի քանի բան կարգավորել ձեր app.js ֆայլում:
Առաջինը միայն կախվածությունն է, սա հանգույցին ասում է, որ մենք նախատեսում ենք օգտագործել այս միջնակարգ ծրագիրը:
var nodemailer = պահանջում ('nodemailer');
Երկրորդը մեր փոխադրողն է, փոխադրողը օգտագործվում է ձեր փոստի սերվերին, իմ դեպքում gmail- ին միանալու համար:
// Transporter- ը gmail հաշիվ էր ստանում
var transporter = nodemailer.createTransport ({ծառայություն ՝ «gmail», author: {type: «OAuth2», օգտվող ՝ «[email protected]», clientId: «Q775xefdHA_BGu3ZnY9-6sP- ', refreshToken:' 1 / 0HfdzyzW3FmnDPqeYkv19_py6zWgMCOqI9DSZ9kQWfc ', accessToken« ya29. GlvDBGA2Z_coEKjQOnXAnBLbTB0wQmS-sARqNGC3V2UATiywNb34IhFq4d7UQvhTobE6pi83-FB2-OvMWjC-mk-EKPMYmwxFe9AOZ7mY6kurYyQ7e1Mu8m8INxg7'}})
եթե այլ փոստային սերվերի հետ nodemailer եք օգտագործում, խնդրում ենք այստեղ փնտրել փաստաթղթեր և օգնություն:
Անձից մարդուն մի քանի բան կփոխվի ՝ օգտվող, clientId, clientSecret: refreshToken, և accessToken:
Ձեր userId- ն այն էլ.փոստն է, որը ցանկանում եք օգտագործել, ես պատրաստել եմ նորը, որը նույնն է, ինչ իմ կայքը:
The 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};}}));
Այժմ մենք պետք է տեղեկատվություն ստանանք մեր վեբ էջի մեր կոնտակտային ձևից և հաղորդագրություն ուղարկենք:
// Փակցնել կոնտակտների ներկայացման կոճակից, անհրաժեշտ է ստեղծել formsapp.post- ի համար հաջողված հաղորդագրությամբ գլխավոր էջ ('/contact_Form', գործառույթ (պահանջ, res) {// Ստանալ տեղեկատվություն կոնտակտային ձևից ՝ homepage.hbs var անունից = req.body.name; var էլփոստ = req.body.email; var հեռախոս = req.body.phone; var հաղորդագրություն = req.body.message; var mailOptions = {// ստեղծում է տեղեկատվություն, որն օգտագործվում է հետևյալից հաղորդագրություն ուղարկելու ժամանակ: ' Ավտոմատ էլփոստ », հասցեով ՝« [email protected] », թեմա ՝« Վեբ կայքի կոնտակտային ձև ՝ » + անուն, տեքստ ՝« Դուք ստացել եք նոր հաղորդագրություն ձեր վեբ կայքի կոնտակտային ձևից: / n / n ' +' Այստեղ մանրամասներն են ՝ / n / n Անուն ՝ ' + անուն +' / n / n Էլ. փոստ ՝ ' + էլփոստ +' / n / n Հեռախոս `' + հեռախոս +' / n / n Հաղորդագրություն. / n ' + հաղորդագրություն} transporter.sendMail (mailOptions, գործառույթը (err, res) {if (err) {console.log ('Error');} else {console.log ('Email Send');}}) res.render ('index'); // render նոր գլխավոր էջ, նայեք, թե ինչպես դա անել հաջողության հաղորդագրությամբ, օրինակ ՝ ելքի էջը))
Ֆլեշ
Flash- ը օգտագործվում է գործողությունները կատարելուց հետո հաղորդագրությունները ցուցադրելու համար: Դուք կարող եք դա տեսնել, երբ ձև եք ներկայացնում կամ դաշտը ճիշտ չեք մուտքագրում:
Տեղադրեք ֆլեշը, ինչպես մյուս npm միջնակարգ ծրագիրը:
sudo npm տեղադրել connect-flash
var flash = պահանջում ('connect-flash'); // ուներ ֆլեշ գործառույթ ՝ էկրանին հաղորդագրությունները ցուցադրելու համար
// Միացրեք Flashapp.use (ֆլեշ ());
Միացնել ֆլեշը, որը մղում և թարմացնում է հաղորդագրությունները վեբ էջում: Սրանք այն հաղորդագրություններն են, որոնք ասում են այնպիսի բաներ, ինչպիսիք են հաջողությունը, կամ տեղեկատվությունը սխալ է մուտքագրվել:
// Գլոբալ Վարս
app.use (գործառույթ (req, res, հաջորդ) {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 = պահանջում ('express'); var երթուղիչ = express. Router (); var անձնագիր = պահանջում («անձնագիր»); var LocalStrategy = պահանջում («անձնագիր ՝ տեղական»): Ռազմավարություն; var 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 username = req.body.username; var password = req.): գաղտնաբառ »,« Գաղտնաբառը պարտադիր է »): notEmpty (); req.checkBody (« գաղտնաբառ 2 »,« Գաղտնաբառերը չեն համընկնում »): հավասար է (req.body.password); var սխալներ = req.validationErrors (); եթե (սխալներ) {res.render ('գրանցվել', {սխալներ `սխալներ});} else {var newUser = նոր օգտվող ({անուն ՝ անուն, էլ. փոստ, օգտվողի անուն ՝ օգտվողի անուն, գաղտնաբառ ՝ գաղտնաբառ}); User.createUser (newUser, գործառույթը (err, user) {if (err) throw err; console.log (user);}); req.flash ('success_msg', 'Դուք գրանցված եք և այժմ կարող եք մուտք գործել'); res.redirect (' /մուտք »);}});
Կոտրելով սա մաս առ մաս
Սկզբում մենք ներառում ենք անհրաժեշտ բոլոր միջին սարքավորումները, այնուհետև ներառում ենք մեր մոդելային ֆայլը, որը բացատրված է ստորև: Մենք անցնում ենք գրանցման պիտակից և ցուցադրում մեր գրանցամատյանի ղեկի տեքստը: Այնուհետեւ գալիս է կարեւոր գործառույթը: Դրանք թույլ են տալիս գրանցել նոր օգտվող մեր տվյալների բազայում: Ֆունկցիան ստուգում է, որպեսզի համոզվի, որ բոլոր դաշտերը վավեր են և ներառված են ձևի մեջ, եթե ոչ, դրանք կհրապարակեն դրանք: Հաջորդը այն ստուգում է սխալները, և եթե սխալներ չլինեն, դա նոր օգտվող է ստեղծում `տրված տեղեկատվությամբ: Այնուհետև այն վերադառնում է դեպի մուտքի էջ ՝ թույլ տալով մուտք գործել:
login.js
var express = պահանջում ('արտահայտել');
var router = express. Router (); var անձնագիր = պահանջում («անձնագիր»); var LocalStrategy = պահանջում («անձնագիր ՝ տեղական»): Ռազմավարություն; var User = պահանջում ('../ մոդելներ/օգտվող'); /* Ստացեք օգտվողների ցուցակ: */// Գլխավոր էջ router.get ('/', գործառույթ (պահանջ, res) {res.render ('login');}); Passport.use (նոր LocalStrategy (գործառույթ (օգտվողի անուն, գաղտնաբառ, կատարված)) {User.getUserByUsername (օգտվողի անուն, գործառույթ (սխալ, օգտվող) {եթե (սխալ) սխալ է նետում, եթե (! օգտվող) {վերադարձը կատարված է (զրո, կեղծ, { հաղորդագրություն ՝ 'Անհայտ օգտվող'});}} User.comparePassword (գաղտնաբառ, user.password, գործառույթ (err, isMatch) {if (err) throw err; if (isMatch) {return done (null, user);} else { վերադարձը կատարված է (null, false, {message: 'Invalid password'});}});});})); Passport.serializeUser (գործառույթը (օգտվողը, կատարված է) {կատարված է (null, user.id);}); Passport.deserializeUser (գործառույթը (id, ավարտված է) {User.getUserById (id, գործառույթը (err, user) {done (err, user);});}); երթուղիչ վահանակ ');}); router.get ('/logout', function (req, res) {req.logout (); req.flash ('success_msg', 'Դուք դուրս եք եկել'); res.redirect ('/homepage');});
module.exports = երթուղիչ;
Սկզբում մենք ներառում ենք անհրաժեշտ բոլոր միջին սարքավորումները, այնուհետև ներառում ենք մեր մոդելային ֆայլը, որը բացատրված է ստորև: Մենք անցնում ենք մուտքի պիտակից և ցուցադրում մեր մուտքի ղեկի տեքստը: Այնուհետև մենք օգտագործում ենք անձնագրի որոշ գործառույթներ ՝ մուտքագրված մուտքագրված օգտվողի անունն ու գաղտնաբառը և դրանք ստուգելու մեր տվյալների շտեմարանին համապատասխան: Մենք կօգտագործենք նաև գաղտնագրված գաղտնաբառ, որը կարող է մի փոքր դանդաղեցնել մուտքը ազնվամորու pi- ով: Սա ավելի մանրամասն բացատրում եմ հաջորդիվ: Օգտվողի անունը և գաղտնաբառը վավերացնելուց հետո դուք կուղղորդվեք դեպի գլխավոր էջ, որը ցույց կտա վահանակը, քանի որ մենք դա տեղադրել ենք մեր ինդեքսի ֆայլում: Մենք այստեղ ավելացնում ենք նաև դուրս գալու հնարավորությունը:
Ինչպես արդեն նշեցի, մենք նաև պետք է ստեղծենք մոդել ՝ տվյալների բազան ստուգելու համար:
Դա արվում է ՝ ձեր հիմնական հավելվածի թղթապանակի ներքո մոդելներ կոչվող թղթապանակ ստեղծելով: Այս թղթապանակում անհրաժեշտ է նաև user.js ֆայլ:
model/user.js
var մանգուս = պահանջել ('մանգուշ');
var bcrypt = պահանջել ('bcryptjs'); // User Schema var UserSchema = mongoose. Schema ({օգտվողի անունը ՝ {տիպը ՝ տող, ինդեքսը ՝ ճշմարիտ}, գաղտնաբառը ՝ {տիպը ՝ լարային}, էլ. var User = module.exports = mongoose.model («Օգտվող», UserSchema);
module.exports.createUser = գործառույթը (նոր օգտվող, հետադարձ) {
bcrypt.genSalt (10, գործառույթ (սխալ, աղ)) {bcrypt.hash (newUser.password, salt, function (err, hash) {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 = գործառույթ (թեկնածուական գաղտնաբառ, հեշ, հետադարձ) {bcrypt.compare (candidPassword, hash, function (err, isMatch) {if (err) throw err; callback (null, isMatch);}); }
Այս մոդելը նախանշում է, թե ինչպիսին կլինեն մեր օգտագործողի պարամետրերը, ինչպես նաև այն, թե ինչպես ենք դրանք հասանելի լինելու: Նախկինում նշեցի, որ մենք ծածկագրելու ենք մեր գաղտնաբառերը: սա այն է, որ խախտման դեպքում տվյալների բազայում ոչ մեկի գաղտնաբառ չի պահվում: Գաղտնաբառերը խափանվում են միջին պարագաների bcrypt- ի միջոցով:
Քայլ 5: Երթևեկության հաշվիչ
Ես ուզում էի տեսնել, թե քանի եզակի օգտվող է այցելել իմ վեբ էջը և հաշվել «հարվածների» թիվը: Կան բազմաթիվ եղանակներ դա անելու համար, ես կբացատրեմ, թե ինչպես եմ դա արել:
Սա օգտագործում է mongodb հավաքածու ՝ հետևելու համար, թե քանի օգտվող է այցելել իմ էջը և քանի անգամ է այցելել յուրաքանչյուր եզակի այցելու:
Քանի որ մենք արդեն խոսել ենք mongoDB ստեղծելու մասին, ես այլևս չեմ անցնի դրա միջով:
Կազմելու համար գուցե անհրաժեշտ լինի երկու հավաքածու ավելացնել ձեր տվյալների բազայում: Դա անելու համար կարող եք կամ տեղադրել RoboMongo- ն, եթե օգտվում եք միջերեսից, սակայն եթե դուք օգտագործում եք անգլուխ ազնվամորու պի, ինչպիսին ես եմ, դուք կզվարճանաք հետևյալ հրամաններով:
Մոնգոյի պատյան
Db խմբագրելու, տեղեկատվություն ստանալու կամ հավաքածու ստեղծելու համար ձեզ հարկավոր կլինի մոնգոյի կեղևը անգլուխ միավորի վրա:
Վազիր
մոնգո
Սա կբացի պատյանը:
Ավելացնել հավաքածու
Իմ դեպքում տվյալների շտեմարանը կոչվում է loginapp, կարող եք այն անվանել ինչ ուզում եք:
օգտագործել nameofyourdb
Մեզ անհրաժեշտ է հավաքածու ՝ մեր կայք այցելած օգտվողների մեր բոլոր IP հասցեները պահելու համար:
db.creatCollection ("ip")
Հաջորդը մենք ստեղծում ենք հավաքածու `մեր կայքի յուրահատուկ հիթերը հաշվելու համար: Սա նախաստորագրվում է id- ով և հաշվարկվում է 0 -ից:
db.createCollection («հաշվել», {id ՝ «հարվածի հաշվիչ», հաշվել ՝ 0})
Հետևեք IP հասցեներին
Դա անելու համար մենք կքաշենք օգտվողների Ip- ն, երբ նրանք այցելեն մեր գլխավոր էջ, ավելացնենք մեր հաշվարկը և կպահենք ՝ հետագայում դրանք համեմատելու համար:
Մենք պետք է որոշ մոդելներ ստեղծենք մեր մանգուսի սխեմաները պահելու համար և որոշ կոդ ավելացնենք մեր homepage.js ֆայլում:
Մենք ստեղծում ենք count.js և ip.js և պահում դրանք մեր մոդելների պանակում:
Ip.js ֆայլը պարզապես մեր IP հասցեի սխեման է
var մանգուս = պահանջել ('մանգուշ'); // փաթեթ վարող մոնգոյի համար
// Count Schema var IpSchema = mongoose. Schema ({ip: {type: String,}, count: {type: Number,}}); var Ip = module.exports = mongoose.model ('Ip', IpSchema);
count.js- ը կհրավիրվի մեր գլխավոր էջի կողմից `հարվածների հետևումը սկսելու համար: Դա արվում է այնպես, ինչպես ստորև:
//Homepagerouter.get('/ ', գործառույթ (պահանջ, 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"}, function (err, count) {userCount = count.count; res.render ('homepage', {count: userCount}); }); });
Դա տեղի է ունենում ամեն անգամ, երբ ինչ -որ մեկը գնում է մեր գլխավոր էջ, այս դեպքում theinternet.onthewifi.com/homepage:
Այն ստուգում է օգտվողի IP- ն ՝ ip4 կամ ip6, այնուհետև պահում է այդ արժեքը այնտեղ, որտեղ այն ուղարկում է count.get.collection, որը մեր count.js ֆայլում պահվող գործառույթ է:
Օգտվողի յուրահատկությունը ստուգելուց հետո այն վերադառնում է և տեղադրում է հաշվարկի արժեքը հիմնական էջում ՝ որպես ղեկի փոփոխական:
Count.js ֆայլը հետևյալն է.
//count.jsvar մոնգո = պահանջել ('mongodb'); // աջակցում է տվյալների բազա var mongoose = պահանջում ('մանգուս'); // փաթեթների մշակող mongo mongoose.connect- ի համար ('mongodb: // localhost/loginapp'); var db = մանգուս. միացում; 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}, գործառույթը (err, iptest) {if (! iptest) // ավելացնել նոր ip, եթե ոչ տվյալների բազայում, և թարմացնող հաշվիչ {var new_ip = new Ip ({ip: Public_ip, count: 1}); db.collection ('ip'). save (new_ip); // ավելացնել նոր ip տվյալների բազա count.update (// update hit counter {id: "hit counter"}, {$ inc: {count: 1}})} else // թարմացնել կոնկրետ ip հաշվիչը, տեսնելու, թե ով է ամենից շատ այցելում {ipc.update ({ip: Public_ip}, {$ inc: {count: 1}})}}); }
Սա ստեղծում է հաշվարկի սխեման և մեր.getCount գործառույթը:. GetCount գործառույթը ստուգում է DB- ն օգտվողների ip- ի համար, և եթե այն գտնում է, գործառույթը ավելացնում է այդ օգտագործողի թիվը, այլ ոչ թե հարվածների հաշվիչը: Այնուամենայնիվ, եթե օգտագործողների ip- ը չգտնվի, այն կստեղծի հավաքման նոր օբյեկտ օգտվողների ip- ով և հարվածի հաշվիչը կավելացնի 1 -ով:
Այնուհետև այն վերադարձվում և ցուցադրվում է վեբ էջին:
Այնտեղ դուք ունեք ip tracking hit counter:
Քայլ 6: Օրագիր
Ես ներկայումս փորձում եմ մշակել բլոգ, որը կենտրոնացած կլինի ծրագրերի, խելացի տների և Polaroids- ի վերաբերյալ իմ հետաքրքրությունների վրա: Այսպիսով, ես ստեղծեցի բլոգի բաժին: Բլոգը օգտագործում է ստատիկ html էջեր և ղեկի շրջանակ: Բլոգավարությունն ավելի դյուրին դարձնելու համար ավելի լավ տեխնոլոգիաներ փնտրելուց հետո ես այնուհետև վերափոխեցի իմ կայքը `օգտագործելով hugo- ն: Hugo- ն ստատիկ html գեներատոր է: Այս մասին ես ավելի շատ եմ խոսում ստորև նշված ձեռնարկում:
Քայլ 7: Ավարտված
Այնտեղ դուք անցնում եք իմ node.js վեբ կայքի խորացված ձեռնարկով, որը տեղակայված է իմ ազնվամորու pi- ում: Եթե ունեք հարցեր կամ մեկնաբանություններ, խնդրում ենք թողնել դրանք ստորև:
Հուսով եմ, որ սա կօգնի մյուսներին:
Hugo- ի միջոցով այս կայքի նկատմամբ այլ մոտեցման համար, ստատիկ վեբ էջերի գեներատոր, տես իմ մյուս ձեռնարկը (շուտով):
Խորհուրդ ենք տալիս:
Հեշտ Շատ ցածր էներգիայի BLE Arduino- ում Մաս 2 - peratերմաստիճանի/խոնավության մոնիտոր - Rev 3: 7 քայլեր
Հեշտ Շատ ցածր էներգիայի BLE Arduino- ում Մաս 2 - peratերմաստիճանի/խոնավության մոնիտոր - Rev 3. Թարմացում. 23 նոյեմբերի, 2020 թ. - 2 x AAA մարտկոցների առաջին փոխարինում 2019 թ. Հունվարի 15 -ից, այսինքն `22 ամիս 2xAAA ալկալային համար: Թարմացում. 7 ապրիլի, 2019 թ. lp_BLE_TempHumidity, ավելացնում է Ամսաթիվ/ժամ գծագրեր, օգտագործելով pfodApp V3.0.362+և ավտոմատ ճնշում, երբ
Arduino Portable Workbench Մաս 3.11 Քայլեր
Arduino Portable Workbench Մաս 3. Եթե դուք դիտել եք 1, 2 և 2B մասերը, ապա մինչ այժմ այս նախագծում շատ Arduino չի եղել, բայց ընդամենը մի քանի տախտակի լարեր և այլն այն չէ, ինչի մասին է դա և ենթակառուցվածքը: պետք է կառուցվի մինչև մնացած աշխատանքները: Սա էլեկտրոնիկա է և Ա
DIY RACING GAME SIMULATOR BUILD ՄԱՍ 1: 6 քայլեր
DIY RACING GAME SIMULATOR BUILD ՄԱՍ 1. Բարև բոլորին Բարի գալուստ, այսօր ես ձեզ ցույց կտամ, թե ինչպես եմ կառուցում " Racing Game Simulator " Arduino UNO- ի օգնությամբ: YouTube ալիք " համոզվեք, որ բաժանորդագրված եք իմ ալիքին A Builds (Սեղմեք այստեղ) " Սա կառուցման բլոգն է, ուստի
Ինչպես կատարել A.I. Մաս 2: 9 Քայլեր
Ինչպես կատարել A.I. Մաս 2. Սա 2 -րդ մասն է այն քայլերի մասին, որոնք ես ձեռնարկել եմ Windows համակարգչի վրա AI կառուցելու համար ՝ օգտագործելով անվճար տվյալների բազա, mingրագրավորման զարգացման գործիք և Windows- ի հետ միասին ներկառուցված TTS շարժիչ: Բառը " Windows " պատկանում է Microsoft- ին: Բառը " Dra
Ինչպես կառուցել կայք Raspberry Pi- ի վրա, Node.js- ի, Express- ի և MongoDB- ի հետ Մաս 1: 6 քայլեր
Ինչպես կառուցել կայք Raspberry Pi- ի վրա ՝ Node.js- ի, Express- ի և MongoDB- ի հետ … Մաս 1. Բարի գալուստ իմ node.js վեբ հավելվածի ձեռնարկի ՄԱՍ 1: Մաս 1 -ը պատրաստվում է անցնել node.js հավելվածի մշակման համար օգտագործվող անհրաժեշտ ծրագրակազմով, ինչպես օգտագործել նավահանգստի փոխանցումը, ինչպես ստեղծել ծրագիր Express- ի միջոցով և ինչպես գործարկել ձեր ծրագիրը: Այս երկրորդ մասը