Mục lục:

Trang web Node.js Phần 2: 7 bước
Trang web Node.js Phần 2: 7 bước

Video: Trang web Node.js Phần 2: 7 bước

Video: Trang web Node.js Phần 2: 7 bước
Video: Tạo Web app với Node & Express - Bài 2 - Chuẩn bị & Chạy server 2024, Tháng bảy
Anonim
Trang web Node.js Phần 2
Trang web Node.js Phần 2

Chào mừng đến với PHẦN 2 !!

Đây là phần 2 của hướng dẫn ứng dụng trang web Node.js của tôi. Tôi đã chia hướng dẫn này thành hai phần vì nó phân tách những người chỉ cần giới thiệu ngắn gọn và những người muốn có hướng dẫn đầy đủ trên một trang web.

Tôi sẽ đi qua quá trình tạo trang web của mình. Của bạn có thể khác nhau, vì vậy hãy làm theo của tôi và học các kỹ thuật được sử dụng. Khi bạn chọn một mẫu HTML khác, quy trình sẽ hơi khác một chút. Giữ nó trong tâm trí.

Bước 1: Cấu trúc ứng dụng

Cấu trúc ứng dụng
Cấu trúc ứng dụng

Vì vậy, trang web của tôi tuân theo trình tạo tốc độ cao, tuy nhiên tôi đã sử dụng tay lái chứ không phải bằng ngọc bích. Nếu bạn thích ngọc đi cho nó! Jade là HTML ngắn tay không có tất cả các dấu ngoặc và div. Nếu bạn không hiểu, bạn có thể truy cập youtube và xem một số hướng dẫn về HTML.

Tôi thích và cảm thấy thoải mái hơn với HTML và tay lái nên đó là những gì tôi đã sử dụng. Để tạo một dự án nhanh với các thanh điều khiển, hãy chạy lệnh express.

express --hbs nameofmyapp

Sau đó, tiếp tục làm theo bước trong Phần 1 để cài đặt tất cả các phần mềm trung gian.

Express tạo ra một cấu trúc ứng dụng rất cụ thể và một cấu trúc rất hữu ích, hầu hết các ứng dụng node.js đều tuân theo biểu mẫu này với một số biến thể.

Trong ảnh đã đính kèm, bạn có thể thấy các thư mục và tệp khác nhau, dưới đây tôi cố gắng giải thích tất cả những điều này.

thùng rác

Đây là thư mục được chạy đầu tiên khi node.js khởi động máy chủ của bạn. Nó tìm đến tệp www và theo sau tệp này để thực thi. Tệp www yêu cầu node.js khởi động máy chủ ở cổng 3000 (điều này có thể thay đổi thành bất kỳ thứ gì) và thực hiện một số việc khác như trình nghe sự kiện, v.v. Điều quan trọng chính là cổng mà ứng dụng của bạn được thiết lập.

node_modules

Trong thư mục này có cái được gọi là phần giữa. Phần mềm trung gian, tôi muốn giải thích là phần mềm bổ sung để giúp bạn viết mã dễ dàng hơn. Về cơ bản, chúng là các thư viện khác với các chức năng được tạo sẵn để bạn sử dụng. Một số phần mềm trung gian bổ sung mà tôi đã sử dụng cho dự án này là Nodemailer, Passport, Nodemon, bycrypt và các phần mềm khác.

công cộng

Đây là nơi tất cả hình ảnh, CSS và javascript cho trang web của bạn sẽ đi đến. Chúng được sử dụng trực tiếp bởi các trang web.

các tuyến đường

Đây là các tuyến đường xác định cho trang web của bạn. Chẳng hạn như trang chủ, trang đăng nhập và các trang khác.

lượt xem

Như bạn có thể thấy các dạng xem là tệp.hbs hoặc.handlebars, hoặc sẽ hoạt động mà chỉ cần một số thao tác với tệp app.js. Đây là các trang html trên thanh điều khiển của bạn sẽ được hiển thị trên trình duyệt. Bố cục là tệp bố cục chính của bạn và đôi khi nằm trong thư mục con bố cục của chính nó. Tệp bố cục chính gọi đến các tệp thanh điều khiển khác của bạn và hiển thị chúng, điều này sẽ có ý nghĩa hơn khi chúng ta đi sâu vào mã.

app.js

Đây là tệp ứng dụng chính của bạn, đôi khi nó được gọi là máy chủ, chỉ phụ thuộc vào thiết lập. Tệp này có tất cả cấu hình cho máy chủ và thậm chí một số chức năng đặc biệt. Nó cũng sẽ là một trình xử lý lỗi.

package.json

Tệp này được tạo bởi express và cho npm biết tất cả phần mềm trung gian mà bạn muốn sử dụng trong dự án của mình. Khi bạn chạy cài đặt npm, tất cả phần mềm trung gian được gọi ra trong tệp này, sẽ được cài đặt trong thư mục node_modules.

Bước 2: Bố trí mẫu của bạn

Bạn có thể tạo tất cả HTML của mình từ đầu hoặc bạn có thể sử dụng một mẫu. Tôi đã sử dụng một mẫu cho trang web này. Các trang web khác mà tôi đã giúp phát triển, tôi đã viết mã từ đầu. Sự lựa chọn là của bạn, bước này giải thích bố cục mẫu.

Ứng dụng web của tôi sử dụng mẫu bootstrap rất tốt trong việc tạo CSS tuyệt vời. Để tìm các mẫu hãy truy cập trang web này. Như đã nêu ở bước trước, tất cả các tệp css, js và img cần thiết đều nằm trong thư mục chung. Các tệp này làm cho trang web trông đẹp hơn văn bản thuần túy và cách hình ảnh được sử dụng trên trang web.

Để làm cho kiểu tạo khuôn ghi đông hoạt động với một mẫu Các trang được chia thành hai phần. Đầu tiên là những gì được gọi là "bố cục". Bố cục là các thuộc tính mà bạn muốn được hiển thị trên mọi trang web trong trang web của mình. Trong trường hợp của tôi, đây là đầu trang, có thanh điều hướng và chân trang, chứa các phần điều hướng và hiển thị bổ sung.

Tệp bố cục và các tệp thanh điều khiển khác nằm trong thư mục dạng xem. Tôi sẽ xem qua một bố cục đơn giản hơn từ trình tạo express mà bạn đã sử dụng trước đó để hiển thị cách hoạt động của khái niệm, sau đó bạn có thể xem mã của tôi và so sánh chúng.

Tệp layout.handlebars được tạo nhanh

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

Điều kỳ diệu thực sự của ghi đông nằm ở ghi đông {{title}} và {{{body}}}. Vì vậy, hai điều này hoạt động khác nhau {{title}} là một biến được chuyển từ tệp index.js trong các tuyến, sau khi được chuyển đến mẫu, nó sẽ được hiển thị. Thẻ {{{body}}} nhận những gì từng được gọi trong hàm kết xuất trong tệp js tuyến đường của bạn. Trong trường hợp của chúng tôi, index.js có dòng này:

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

Điều này gọi là tệp 'chỉ mục' của những gì bạn đã từng sử dụng, ngọc bích, ghi đông, v.v., vì vậy trong trường hợp của chúng tôi là index.handlebars.

Express được tạo index.handlebars

{{chức vụ}}

Chào mừng đến với {{title}}

Tệp index.handlebars được chuyển giống như một biến vào thẻ {{{body}}} và được hiển thị trên trang web của bạn.

Điều này cho phép bạn có một phần tĩnh của trang web và một phần biến thể. Điều này làm cho đầu trang và chân trang đẹp hơn vì bạn không phải kết xuất lại toàn bộ trang, khi tải một trang mới, chỉ một số thông tin được thay đổi.

Bước 3: Biểu mẫu liên hệ

Mâu liên hệ
Mâu liên hệ
Mâu liên hệ
Mâu liên hệ
Mâu liên hệ
Mâu liên hệ

Tôi đã kết hợp một biểu mẫu liên hệ vào trang web của mình để bất kỳ ai cũng có thể gửi email đến trang web của tôi, với các câu hỏi hoặc nhận xét.

Biểu mẫu liên hệ này đã sử dụng một phần mềm trung gian npm được gọi là Node Mailer.

Thiết lập Node Mailer

Để cài đặt node-mailer, bạn chỉ cần chạy mã bên dưới trong tệp cấp cao nhất của mình, trong trường hợp của chúng tôi là myapp.

sudo npm cài đặt gật đầu

Sau khi cài đặt, bạn sẽ cần thiết lập một số thứ trong tệp app.js của mình.

Đầu tiên chỉ là sự phụ thuộc, điều này cho nút biết rằng chúng tôi dự định sử dụng phần mềm trung gian này.

var gật đầu = request ('gật đầu');

Thứ hai là đơn vị vận chuyển của chúng tôi, đơn vị vận chuyển được sử dụng để kết nối với máy chủ thư của bạn, trong trường hợp của tôi là gmail.

// Người vận chuyển được sử dụng để lấy tài khoản gmail

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

nếu sử dụng gật đầu với một máy chủ thư khác, vui lòng xem tại đây để có tài liệu và trợ giúp.

Một số thứ sẽ thay đổi từ người này sang người khác: user, clientId, clientSecret. refreshToken và accessToken.

UserId của bạn là email mà bạn muốn sử dụng, tôi đã tạo một email mới có tên giống với trang web của tôi.

ClientId, clientSecret, refreshToken và accessToken cần được tìm thấy thông qua tài khoản google của bạn.

Nếu cần thêm trợ giúp bạn có thể theo dõi video này tại đây.

Khi tất cả các trường đó đã được điền vào, chúng tôi sẽ thêm chi tiết tin nhắn của chúng tôi.

Tiếp theo, chúng tôi cần xác thực rằng tất cả các trường trong biểu mẫu của chúng tôi đã được nhập và là phản hồi hợp lệ.

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

Bây giờ chúng tôi cần lấy thông tin từ biểu mẫu liên hệ của chúng tôi trên trang web của chúng tôi và gửi tin nhắn.

// Đăng từ nút gửi liên hệ, cần tạo trang chủ với thông báo thành công cho formapp.post đã gửi ('/ contact_Form', function (req, res) {// Lấy thông tin từ biểu mẫu liên hệ, từ tên trang web.hbs var name = req.body.name; var email = req.body.email; var phone = req.body.phone; var message = req.body.message; var mailOptions = {// tạo thông tin được sử dụng khi gửi tin nhắn từ: ' Email tự động ', tới:' [email protected] ', chủ đề:' Biểu mẫu liên hệ trên trang web: '+ tên, văn bản:' Bạn đã nhận được tin nhắn mới từ biểu mẫu liên hệ trang web của mình. / N / n '+' Tại đây là chi tiết: / n / nTên: '+ tên +' / n / n Email: '+ email +' / n / nĐiện thoại: '+ điện thoại +' / n / nTin nhắn: / n '+ tin nhắn} Transporter.sendMail (mailOptions, function (err, res) {if (err) {console.log ('Error');} else {console.log ('Email đã gửi');}}) res.render ('index'); // kết xuất trang chủ mới, hãy xem cách thực hiện việc này với thông báo thành công, như trang đăng xuất})

Tốc biến

Flash được sử dụng để hiển thị thông báo sau khi các hành động được thực hiện. Bạn có thể thấy điều này khi bạn gửi biểu mẫu hoặc không nhập chính xác trường.

Cài đặt flash giống như các phần mềm trung gian npm khác.

sudo npm cài đặt kết nối flash

var flash = demand ('connect-flash'); // có chức năng flash để hiển thị thông báo trên màn hình

// Kết nối Flashapp.use (flash ());

Bật flash để đẩy và cập nhật tin nhắn trên trang web. Đây là những thông báo cho biết những thứ như thành công hoặc thông tin được nhập không chính xác.

// Global Vars

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 ('error'); res.locals.user = req.user || null; next ();});

Một số biến cần kết hợp với flash.

Đó là bạn đi một mẫu liên hệ được thực hiện.

Bước 4: Trang đăng nhập

Trang đăng nhập
Trang đăng nhập

Đây chỉ là thứ tôi muốn xem liệu tôi có thể làm được không và có thể tôi sẽ sử dụng nó trong tương lai. Tôi chỉ muốn giải thích mã vì nó nằm trong kho lưu trữ git của tôi.

Vì vậy, phần này sử dụng thêm một vài phần mềm trung gian npm. Cài đặt phần sau bằng các lệnh bên dưới.

npm install passport && npm install passport-local && npm install bcryptjs

&& cho phép bạn chạy nhiều lệnh với một dòng.

Đăng nhập và Người dùng

Bạn sẽ cần tạo tệp login.js và user.js trong thư mục tuyến đường của mình. Điều này sẽ được sử dụng để cho phép tạo người dùng, người dùng sẽ được lưu trữ trong cơ sở dữ liệu của chúng tôi và cho phép người dùng đăng nhập bằng cách kiểm tra cơ sở dữ liệu.

user.js

var express = request ('express'); var router = express. Router (); var passport = Required ('passport'); var LocalStrategy = request ('passport-local'). Strategy; var Người dùng = request ('../ models / user'); // Đăng ký router.get ('/ register', function (req, res) {res.render ('register');}); // Đăng ký 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; // Xác thực req.checkBody ('tên', 'Tên là bắt buộc'). notEmpty (); req.checkBody ('email', 'Email là bắt buộc').notEmpty (); req.checkBody ('email', 'Email không hợp lệ'). isEmail (); req.checkBody ('tên người dùng', 'Tên người dùng là bắt buộc'). notEmpty (); req.checkBody (' mật khẩu ',' Mật khẩu là bắt buộc '). notEmpty (); req.checkBody (' password2 ',' Mật khẩu không khớp '). equals (req.body.password); var error = req.validationErrors (); if (lỗi) {res.render ('register', {error: error});} else {var newUser = new Người dùng ({name: name, email: email, username: username, password: password}); User.createUser (newUser, function (err, user) {if (err) throw err; console.log (user);}); req.flash ('success_msg', 'Bạn đã đăng ký và hiện có thể đăng nhập'); res.redirect (' /đăng nhập'); } });

Chia nhỏ từng phần một

Đầu tiên, chúng tôi bao gồm tất cả các thiết bị trung gian cần thiết, sau đó chúng tôi đưa vào tệp mô hình của chúng tôi được giải thích bên dưới. Chúng tôi định tuyến từ thẻ đăng ký và hiển thị văn bản thanh điều khiển đăng ký của chúng tôi. Sau đó, chức năng quan trọng đến. Những điều này cho phép chúng tôi đăng ký một người dùng mới trong cơ sở dữ liệu của chúng tôi. Hàm kiểm tra để đảm bảo tất cả các trường đều hợp lệ và được bao gồm trong biểu mẫu, nếu không, nó sẽ nhắc chúng. Tiếp theo, nó kiểm tra lỗi và nếu không có lỗi nào xảy ra, nó sẽ tạo ra một người dùng mới với thông tin được cung cấp. Sau đó, nó định tuyến lại trang đăng nhập, cho phép bạn đăng nhập.

login.js

var express = request ('express');

var router = express. Router (); var passport = request ('passport'); var LocalStrategy = request ('passport-local'). Strategy; var Người dùng = request ('../ models / user'); / * NHẬN danh sách người dùng. * / // Trang chủ router.get ('/', function (req, res) {res.render ('login');}); passport.use (new LocalStrategy (function (tên người dùng, mật khẩu, xong) {User.getUserByUsername (tên người dùng, chức năng (err, user)) {if (err) throw err; if (! user) {return done (null, false, { message: 'Unknown User'});} User.comparePassword (password, user.password, function (err, isMatch) {if (err) throw err; if (isMatch) {return done (null, user);} else { return done (null, false, {message: 'Mật khẩu không hợp lệ'});}});});})); 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: '/', failRedirect: '/ login', failFlash: true}), function (req, res) {res.redirect ('/ bảng điều khiển'); }); router.get ('/ logout', function (req, res) {req.logout (); req.flash ('success_msg', 'Bạn đã đăng xuất'); res.redirect ('/ trang chủ');});

module.exports = bộ định tuyến;

Đầu tiên, chúng tôi bao gồm tất cả các thiết bị trung gian cần thiết, sau đó chúng tôi đưa vào tệp mô hình của chúng tôi được giải thích bên dưới. Chúng tôi định tuyến từ thẻ đăng nhập và hiển thị văn bản thanh điều khiển đăng nhập của chúng tôi. Sau đó, chúng tôi sử dụng một số chức năng hộ chiếu để lấy tên người dùng và mật khẩu đã nhập và kiểm tra chúng với cơ sở dữ liệu của chúng tôi. Chúng tôi cũng sẽ sử dụng một mật khẩu được mã hóa, điều này có thể làm cho việc đăng nhập chậm hơn một chút trên raspberry pi. Tôi giải thích điều này nhiều hơn tiếp theo. Sau khi xác thực tên người dùng và mật khẩu, bạn được chuyển hướng đến trang chủ sẽ hiển thị trang tổng quan khi chúng tôi thiết lập điều này trong tệp chỉ mục của mình. Chúng tôi cũng thêm ở đây khả năng đăng xuất.

Giống như tôi đã đề cập trước đây, chúng tôi cũng sẽ cần tạo một mô hình để kiểm tra cơ sở dữ liệu.

Điều này được thực hiện bằng cách tạo một thư mục trong thư mục ứng dụng chính của bạn được gọi là các mô hình. Trong thư mục này cũng cần có tệp user.js.

model / user.js

var mongoose = request ('mongoose');

var bcrypt = request ('bcryptjs'); // Lược đồ người dùng var UserSchema = mongoose. Schema ({tên người dùng: {type: String, index: true}, mật khẩu: {type: String}, email: {type: String}, name: {type: String}}); var User = module.exports = mongoose.model ('Người dùng', 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 (username, callback) {var query = {username: username}; User.findOne (truy vấn, gọi lại); } module.exports.getUserById = function (id, callback) {User.findById (id, callback); } module.exports.comparePassword = function (applicationPassword, hash, callback) {bcrypt.compare (applicationPassword, hash, function (err, isMatch) {if (err) throw err; callback (null, isMatch);}); }

Mô hình này phác thảo các thông số người dùng của chúng tôi sẽ như thế nào cũng như cách chúng tôi sẽ truy cập chúng. Tôi đã đề cập trước đây rằng chúng tôi sẽ mã hóa mật khẩu của mình. điều này để không có mật khẩu nào được lưu trữ trong cơ sở dữ liệu trong trường hợp vi phạm. Mật khẩu được băm bằng bcrypt trung gian.

Bước 5: Bộ đếm lưu lượng truy cập

Bộ đếm lưu lượng truy cập
Bộ đếm lưu lượng truy cập

Tôi muốn xem có bao nhiêu người dùng duy nhất đã truy cập trang web của tôi và đếm số lần "truy cập". Có nhiều cách để làm điều này, tôi sẽ giải thích cách tôi đã làm về nó.

Điều này sử dụng một bộ sưu tập mongodb để theo dõi số lượng người dùng đã truy cập trang của tôi và số lần mỗi khách truy cập duy nhất đã truy cập.

Vì chúng ta đã nói về việc thiết lập mongoDB nên tôi sẽ không xem lại nó nữa.

Bạn có thể cần thêm hai bộ sưu tập vào cơ sở dữ liệu của mình để biên dịch. Để thực hiện việc này, bạn có thể cài đặt RoboMongo nếu sử dụng giao diện người dùng, tuy nhiên nếu bạn đang sử dụng pi raspberry không đầu như tôi, bạn sẽ thấy thú vị với các lệnh sau.

Vỏ Mongo

Để chỉnh sửa một db, lấy thông tin hoặc tạo một bộ sưu tập, bạn sẽ cần trình bao mongo trên một đơn vị không đầu.

Chạy

mongo

Điều này sẽ mở vỏ.

Thêm một bộ sưu tập

Trong trường hợp của tôi, cơ sở dữ liệu được gọi là loginapp, bạn có thể đặt tên cho nó bất cứ điều gì bạn muốn.

sử dụng nameofyourdb

Chúng tôi cần một bộ sưu tập để lưu giữ tất cả địa chỉ ip của những người dùng truy cập trang web của chúng tôi.

db.creatCollection ("ip")

Tiếp theo, chúng tôi tạo một bộ sưu tập để đếm số lượt truy cập duy nhất vào trang web của chúng tôi. Điều này được khởi tạo với một id và số lượng bắt đầu từ 0.

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

Theo dõi địa chỉ IP

Để làm điều này, chúng tôi sẽ kéo Ip người dùng khi họ truy cập trang chủ của chúng tôi, tăng số lượng của chúng tôi và lưu trữ chúng để so sánh chúng sau này.

Chúng tôi cần tạo một số mô hình để lưu trữ các lược đồ mongoose và thêm một số mã vào tệp trang chủ.js của chúng tôi.

Chúng tôi tạo count.js và ip.js và lưu trữ chúng trong thư mục mô hình của chúng tôi.

Tệp ip.js chỉ là một giản đồ cho địa chỉ ip của chúng tôi

var mongoose = demand ('mongoose'); // trình xử lý gói cho mongo

// Đếm lược đồ var IpSchema = mongoose. Schema ({ip: {type: String,}, count: {type: Number,}}); var Ip = module.exports = mongoose.model ('Ip', IpSchema);

count.js sẽ được gọi bởi trang chủ của chúng tôi để bắt đầu theo dõi lần truy cập. Điều này được thực hiện như dưới đây.

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

Count.getCount (collection, ipc, Public_ip, function (count) {

}); count = db.collection ('count'). findOne ({id: "hit counter"}, function (err, count) {userCount = count.count; res.render ('trang chủ', {count: userCount}); }); });

Điều này xảy ra mỗi khi ai đó truy cập trang chủ của chúng tôi, trong trường hợp này là theinternet.onthewifi.com/homepage.

Nó kiểm tra IP của người dùng, ip4 hoặc ip6, sau đó lưu trữ giá trị đó nơi nó gửi nó đến count.get.collection, một hàm được lưu trữ trong tệp count.js của chúng tôi.

Sau khi kiểm tra tính duy nhất của người dùng, nó sẽ trả về và đăng giá trị đếm lên trang chủ dưới dạng biến thanh điều khiển.

Tệp count.js như sau.

//count.jsvar mongo = request ('mongodb'); // hỗ trợ cơ sở dữ liệu var mongoose = demand ('mongoose'); // trình xử lý gói cho mongo mongoose.connect ('mongodb: // localhost / loginapp'); var db = mongoose.connection; var Ip = request ('../ models / ip'); // Đếm lược đồ 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, callback is Chức ipc.findOne ({ip: Public_ip}, function (err, iptest) {if (! iptest) // add một ip mới nếu không có trong cơ sở dữ liệu và cập nhật bộ đếm {var new_ip = new Ip ({ip: Public_ip, count: 1}); db.collection ('ip'). save (new_ip); // thêm ip mới vào database count.update (// cập nhật bộ đếm lượt truy cập {id: "hit counter"}, {$ inc: {count: 1}})} else // cập nhật bộ đếm ip cụ thể, để xem ai truy cập nhiều nhất {ipc.update ({ip: Public_ip}, {$ inc: {count: 1}})}}); }

Điều này tạo ra lược đồ đếm và hàm.getCount của chúng tôi. Hàm.getCount kiểm tra DB để tìm ip của người dùng và nếu nó tìm thấy nó, hàm sẽ tăng số lượng của người dùng đó chứ không phải bộ đếm lượt truy cập. Tuy nhiên, nếu không tìm thấy ip của người dùng, nó sẽ tạo một đối tượng tập hợp mới với ip của người dùng và tăng số lần truy cập lên 1.

Điều này sau đó được trả lại và hiển thị trên trang web.

Ở đó bạn có nó một bộ đếm lượt truy cập theo dõi ip.

Bước 6: Blog

Blog
Blog

Tôi hiện đang cố gắng phát triển một blog tập trung vào sở thích của tôi về phần mềm, nhà thông minh và Polaroids. Vì vậy, tôi đã tạo một phần blog. Blog sử dụng các trang html tĩnh và khung điều khiển. Sau khi xem xét các công nghệ tốt hơn để viết blog dễ dàng hơn, tôi đã thiết kế lại trang web của mình bằng hugo. Hugo là một trình tạo html tĩnh. Tôi nói thêm về điều này trong hướng dẫn được đề cập bên dưới.

Bước 7: Hoàn thành

Ở đó bạn có một hướng dẫn chuyên sâu về trang web node.js của tôi được lưu trữ cục bộ trên raspberry pi của tôi. Nếu bạn có thắc mắc hoặc ý kiến vui lòng để lại bên dưới.

Tôi hy vọng điều này sẽ giúp những người khác ngoài đó.

Để có cách tiếp cận khác với trang web này bằng cách sử dụng hugo, trình tạo trang web tĩnh, hãy xem hướng dẫn khác của tôi (sắp có).

Đề xuất: