1. Trang chủ
  2. » Công Nghệ Thông Tin

Sach lap trinh nodejs that don gian

93 7 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 93
Dung lượng 3,58 MB

Nội dung

Võ Duy Tạo Lorem ipsum Trang 2 MỤC LỤC Lời nói đầu 5 Cách học đúng cách 5 Yêu cầu trình độ 6 Liên hệ với tác giả 6 Phần 1 Giới thiệu 7 Giới thiệu ứng dụng blog sẽ xây dựng 7 Node js là gì? 8 Cài đặt N.

Võ Duy Tạo Lor MỤC LỤC Lời nói đầu Cách học cách Yêu cầu trình độ Liên hệ với tác giả Phần 1: Giới thiệu Giới thiệu ứng dụng blog xây dựng Node.js gì? Cài đặt Node.js Tạo server Nodejs 10 Hiểu request response 12 Phần 2: Giới thiệu NPM Express 15 Cài đặt Custom Package với NPM 15 Giới thiệu Express 18 Tổng kết 24 Phần 3: Bước đầu tạo web app với Express 25 Tải web template 25 Tự động khởi động server thay đổi mã nguồn 26 Npm start 27 Tạo thư mục public chứa tệp static 27 Tạo Page routes 30 Tổng kết 30 Phần 4: Templating Engine 31 Giới thiệu Template engine 31 Layout 33 Tổng kết 35 Phần 5: Giới thiệu MongoDB 36 Kiến trúc MongoDB 37 Cài đặt MongoDB 37 Kết nối quản lý MongoDB với Robo 3T 39 Trang Cài đặt Mongoose 40 Kết nối MongoDB từ Node.js 40 Định nghĩa Model 40 Tạo action CRUD với Mongoose model 41 Tổng kết 43 Phần 6: Ứng dụng MongoDB vào dự án 44 Lưu liệu Post vào Database 47 Hiển thị danh sách Post 48 Hiển thị liệu động với Template engine 49 Hiển thị nội dung Post 51 Thêm Fields Schema 52 Tổng kết 53 Phần 7: Tạo tính upload ảnh với Express 54 Tổng kết 58 Phần 8: Tìm hiểu Express Middleware 59 Middleware tùy chỉnh 59 Tạo đăng ký Validation middleware 60 Tổng kết 61 Phần 9: Refactoring theo mơ hình MVC 62 Giới thiệu mơ hình MVC 62 Tiến hành Refactoring 63 Tổng kết 66 Phần 10: Tạo tính đăng ký thành viên 67 User Model 69 Controller xử lý đăng ký user 70 Mã hóa mật 71 Mongoose Validation 73 Tạo tính đăng nhập 74 Tổng kết 77 Phần 11: Xác thực với Express Sessions 78 Implementing User Sessions 79 Trang Protect Pages với Authentication Middleware 81 User Logout 83 Tạo trang 404 84 Tổng kết 86 Phần 12: Triển khai web app lên server thật .87 Cài đặt server 87 Đưa sourcecode Node.js lên VPS 89 Quản lý ứng dụng Node.js PM2 90 Kết nối domain vào vps 91 Cấu hình Nginx Reverse Proxy Server 91 Chào tạm biệt 92 Tài liệu tham khảo .93 Trang Lời nói đầu N ode.js trở thành xu hướng giới lập trình back-end Có nhiều ứng dụng lớn đại gia sử dụng Nodejs Có thể kể tên như: Paypal, Netflix, LinkedIn Mục tiêu sách giúp bạn bước vào giới Node.js cách vững Tức bạn hiểu rõ chất, cách xây dựng ứng dụng Nodejs cách Nếu không gọi "vũ trụ Node.js " "Vũ trụ Node.js " bắt nguồn từ viên gạch Javascript Để khám phá "Vũ trụ Node.js " cách trơn tru, sách giúp bạn tìm hiểu "tam trụ" Node.js, Node.js, ExpressJS, MongoDB Mỗi phần sách trình bày thẳng vào vấn đề, kiến thức trọng tâm để tránh thời gian vàng ngọc bạn Sau bạn đọc xong sách này, bạn đủ kỹ để tự xây dựng web app Nodejs triển khai Internet Cách học cách Cuốn sách chia nhỏ nội dung thành 12 phần, phần giới thiệu chủ đề riêng biệt Mục đích để bạn chủ động lịch học, không bị dồn nén nhiều Với phần lý thuyết, có ví dụ minh họa code ln vào dự án Vì vậy, cách học tốt vừa học vừa thực hành Bạn nên tự viết lại dịng code chạy Đừng copy đoạn code sách, điều làm hạn chế khả viết code bạn, làm bạn nhiều không hiểu code bị lỗi Nhớ nhé, đọc đến đâu, tự viết code đến đó, tự build kiểm tra đoạn code chạy khơng! Trang u cầu trình độ Cuốn sách xây dựng từ kiến thức tảng Node.js từ Nên khơng cần bạn phải có kiến thức Node.js Tuy nhiên, Node.js xây dựng ngơn ngữ Javascript nên tốt bạn có kiến thức Javascript Ngoài ra, bạn cần chút hiểu biết HTML CSS để dựng giao diện web Liên hệ với tác giả Nếu có vấn đề trình học, code bị lỗi khơng hiểu, bạn liên hệ với qua hình thức đây:     Website: https://vntalking.com Fanpage: https://facebook.com/vntalking Email: support@vntalking.com Github: https://github.com/vntalking/nodejs-express-mongodb-co-ban Trang PHẦN Giới thiệu N ode.js JavaScript runtime để chạy Javascript phía server Có nhiều công ty sử dụng Node.js để xây dựng cho ứng dụng họ Có thể kể số tên tuổi đình đám như: WalMart, LinkedIn, PayPal, YouTube, Yahoo!, Amazon.com, Netflix, eBay Reddit Trong sách này, học Node.js kết hợp với Express mongoDB để xây dựng blog từ đầu, từ số Trong trình đọc thực hành theo sách, bạn hiểu tự xây dựng ứng dụng riêng từ kỹ thuật sách Chúng ta tìm hiểu loạt kỹ thuật xác thực người dùng, validate liệu, bất đồng Javascript, Express, MongoDB template engine.v.v Giới thiệu ứng dụng blog xây dựng Như giới thiệu trên, để việc học có hiệu quả, thay có đoạn code mẫu ngắn không liên quan tới nhau, vừa học vừa xây dựng ứng dụng hoàn chỉnh Tiêu chí "học đến đâu, ứng dụng đến đó" Đây giao diện ứng dụng: Hình 1.1: Template giao diện dùng sách Trang Với trang blog này, người dùng đăng ký tài khoản Sau đăng ký xong họ trang chủ, đăng nhập vào blog Thanh navigation bar hiển thị menu khác tùy thuộc vào trạng thái người đăng nhập hay chưa Để xây dựng giao diện, sử dụng EJS template engine Sau người dùng đăng nhập, thành navigator bar hiển thị text "LogOut" để họ đăng xuất cần Ngồi ra, cịn thêm menu "new post" để họ tạo viết mới, upload ảnh lên blog Sau họ tạo viết xong quay trở lại trang chủ, blog hiển thị danh sách viết published Thông qua việc thực hành xây dựng ứng dụng blog này, bạn nắm kiến thức Node.js, kết hợp với express MongoDB Node.js gì? Trước tìm hiểu khái niệm Node.js gì, bạn cần phải hiểu chế Internet hoạt động Khi người dùng mở trình duyệt, vào website vntalking.com chẳng hạn Như cô tạo request tới server, lúc ấy/trình duyệt coi client Khi client tạo request tới server server phản hồi lại nội dung trang web mà client u cầu Có số ngơn ngữ lập trình thiết kế để viết ứng dụng cho server PHP, Ruby, Python, ASP, Java Nếu trước kia, Javascript thiết kế để chạy trình duyệt, cung cấp thêm khả tương tác trang web với người dùng Ví dụ menu có hiệu ứng dropdown, hay hiệu ứng tuyết rơi Nhưng chuyện thay đổi vào năm 2009, Node.js đời, sử dụng dụng V8 engine làm chạy mã Javascript Giờ đây, Javascript vượt khởi khn khổ trình duyệt, cho phép chạy server Như vậy, ngồi ngơn ngữ dành riêng cho server PHP, Golang, JAVA Javascript trở thành lựa chọn sáng giá khác Những lợi ích mà Node.js mang lại cho bạn:    Đầu tiên, V8 JavaScript engine Javascript engine mạnh mẽ, sử dụng trình duyệt Chrome Google Điều làm ứng dụng bạn có tốc độ nhanh Node.js khuyến khích viết mã kiểu asynchronous (bất đồng bộ) để cải thiện tốc độ ứng dụng, tránh vấn đề phát sinh việc sử dụng đa luồng Thứ Javascript ngôn ngữ phổ biến, bạn thừa hưởng nhiều thư viện hay ho mà lại miễn phí Trang  Cuối Node.js sử dụng javascript, bạn tận dụng kiến thức có từ trước, bạn viết ứng dụng dùng Javascript trình duyệt Giờ đây, thay phải tìm hiểu thêm ngơn ngữ mới, bạn cần biết Javascript đủ full stack Cài đặt Node.js Để cài đặt Node.js, bạn vào trang chủ nodejs.org (hình 1.2) tải phiên tương ứng với hệ điều hành máy tính bạn Hình 1.2: Download node.js Việc cài đặt diễn đơn giản Nếu máy bạn dùng window cài đặt phần mềm khác thơi Bạn tham khảo chi tiết cài đặt chi tiết Sau cài xong, bạn kiểm tra version lệnh sau: node -v Ngoài ra, cài đặt Node.js, bạn khuyến NPM npm -v Trang Kết hình 1.3 Hình 1.3: kiểm tra phiên node.js Tạo server Nodejs Chúng ta tạo server đơn giản Node.js để bạn dễ hiểu cách client tạo request tới server server phản hồi lại request Bạn sử dụng trình soạn thảo code để viết code Như đề xuất bạn sử dụng Visual Studio Code Giờ tạo thư mục dùng Visual Studio Code (từ viết tắt VS) để mở thư mục Các bạn tạo file Javascript, đặt tên index.js Dưới đoạn code để tạo http server đơn giản: const http = require('http') const server = http.createServer((req, res) => { console.log(req.url) res.end('VNTALKING: Xin chào Node.js') }) server.listen(3000) Giải thích code const http = require('http') Hàm require có tác dụng import module vào tệp bạn xử lý Hàm Node.js giống hàm import hay include ngôn ngữ khác Tham số đầu vào hàm require tên module định nghĩa từ khóa export trả package Quay lại đoạn code trên, require module có tên http gán cho biến có tên http (mình đặt trùng dễ nhận biết biến package thơi, bạn đặt biến tên bạn muốn) http module tích hợp sẵn Node.js, dùng để cung cấp phương thức tương tác với server GET, POST, UPDATE Trang 10 cịn với Chrome Developer Tools -> application Bạn nhìn thấy cookie trang localhost sinh Hình 11.1: Cookie tạo express-session module Nếu bạn comment đoạn code liên quan đến express-session, sau refesh lại trình duyệt cookie khơng tạo bạn thấy Implementing User Sessions Chúng ta bắt tay thực implement cho tính tạo lưu session đăng nhập người dùng Mở controllers/ loginUser.js, thêm đoạn code bơi đậm bên dưới: const bcrypt = require('bcrypt') const User = require(' /models/User') module.exports = (req, res) => { const { username, password } = req.body; User.findOne({ username: username }, (error, user) => { if (user) { bcrypt.compare(password, user.password, (error, same) => { if (same) { // if passwords match req.session.userId = user._id res.redirect('/') } else { res.redirect('/auth/login') } }) } else { res.redirect('/auth/login') } }) } Chúng ta định user_id cho session express-session module lưu thông tin xuống cookie trình duyệt người dùng, để người dùng gửi yêu cầu trình duyệt gửi cookie lại cho server kèm authenticated id Đây cách để server biết người dùng đăng nhập hay chưa Trang 79 Để xem xác thơng tin session object, vào controllers/home.js thêm dòng console.log: module.exports = (req, res) => { BlogPost.find({}, function (error, posts) { console.log(req.session) console.log(posts); res.render('index', { blogposts: posts }); }) } Ok, bạn thử vào trang web, tiến hành đăng nhập thành cơng, kiểm tra hình console Session { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true }, userId: '5e70d250fd1459148c026c22' } Thông tin userId: '5e70d250fd1459148c026c22' chia sẻ trình duyệt server có request Đây thơng tin để biết người dùng đăng nhập hay không Tiếp theo, để kiểm tra session id trước cho phép người dùng tạo post, thêm đoạn code sau vào controllers/newPost.js module.exports = (req, res) => { if (req.session.userId) { return res.render("create"); } res.redirect('/auth/login') } Đoạn code có ý nghĩa là: kiểm tra xem session có chứa user id hay khơng? Nếu khơng có tức request người dùng chưa đăng nhập -> tiến hành redirect sang hình login Trang 80 Protect Pages với Authentication Middleware Trong ứng dụng web, bạn thấy có số trang có người dùng đăng nhập truy cập Ví dụ trang tạo post mới, người đăng nhập phép truy cập Mở rộng yêu cầu: Có nhiều trang web, người ta phân quyền tài khoản Ví dụ có trang thuộc admin panel phải tài khoản admin vào được, hay tài khoản thơng thường phép truy cập giới hạn tính khơng thay đổi giá trị hệ thống Cuối khách truy cập xem nội dung, mà khơng sửa Sau bạn hồn thành xong phần 11 sách này, bạn thử thực hành làm tính phân quyền gợi ý xem Đầu tiên, cần tạo custom middleware đặt tên là: /middleware/authMiddleware.js const User = require(' /models/User') module.exports = (req, res, next) => { User.findById(req.session.userId, (error, user) => { if (error || !user) return res.redirect('/') next() }) } Trong middleware này, query vào DB để tìm userId: User.findById(req.session.userId ) Nếu kết trả mà có tồn gọi hàm next() để chuyển sang middleware khác Ngược lại, redirect trang chủ Tiếp theo, import middleware index.js const authMiddleware = require('./middleware/authMiddleware') Để áp dụng middleware vào route tạo post cần đặt middleware trước newPostController app.get('/posts/new', authMiddleware, newPostController) Trang 81 Chúng ta làm tương tự lưu post vào DB app.post('/posts/store', authMiddleware, storePostController) Để kiểm tra xem đoạn code hoạt động chưa, bạn cần xóa cookie trình duyệt, sau thử chọn menu "new post", web mà redirect trang chủ Sau bạn login làm lại, vào trang "new post" Tiếp tục nhé! Hiện tại, người dùng đăng nhập thành cơng, họ nhìn thấy menu "login" "new user" Điều sai sai khơng? Bởi họ login khơng cần login Tương tự, họ user rồi, cần phải đăng ký nữa??? Tương tự với trường hợp menu "new post" Menu dành cho người dùng đăng nhập, cịn với khách khơng Giờ xử lý trường hợp Trong thư mục middleware, tạo thêm middleware đặt tên redirectIfAuthenticatedMiddleware.js module.exports = (req, res, next) => { if (req.session.userId) { return res.redirect('/') // if user logged in, redirect to home page } next() } Sau import middleware index.js const redirectIfAuthenticatedMiddleware = require('./middleware/redirectIfAut henticatedMiddleware') Áp dụng cho routes sau: app.get('/auth/register', redirectIfAuthenticatedMiddleware, newUserController) app.post('/users/register', redirectIfAuthenticatedMiddleware, storeUserController) app.get('/auth/login', redirectIfAuthenticatedMiddleware, loginController) app.post('/users/login', redirectIfAuthenticatedMiddleware, loginUserController) Giờ bạn đăng nhập thành cơng mà cố tình nhấp vào menu "login", trang web điều hướng trang chủ Nhưng chưa Chúng ta tiếp tục xử lý phần giao diện, cần phải ẩn menu "Login" "New User" người dùng đăng nhập Trang 82 Để làm điều này, index.js global.loggedIn = null; app.use("*", (req, res, next) => { loggedIn = req.session.userId; next() }); Chúng ta khai báo biến loggedIn kiểu global, mục đích truy cập biến file EJS Với khai báo app.use("*", (req, res, next) => … ), với toán tử "*" tức áp dụng cho request, gán UserId cho biến loggedIn Tiếp theo, sửa NavigatorBar views/layout/navbar.ejs Thêm kiểm tra điều kiện cho menu "Login", "new post" "new user" Giờ bạn thử chạy ứng dụng kiểm tra thành User Logout Hiện người dùng chưa có cách để logout tài khoản Để làm điều bạn cần gọi hàm session.destroy() Cách thực tạo giao Trang 83 diện người dùng hoàn toàn tương tự phần trước Mình trình bày nhanh thơi Trong views/layout/navbar.ejs Tạo thêm controller cho logout: /controllers/logout.js module.exports = (req, res) => { req.session.destroy(() => { res.redirect('/') }) } Với req.session.destroy(), chúng xóa tất liệu liên quan sesson, kể session user id, sau xóa xong redirect trang chủ Trong index.js const logoutController = require('./controllers/logout') app.get('/auth/logout', logoutController) Đã xong, bạn chạy ứng dụng kiểm tra tính logout xem Tạo trang 404 Có trường hợp người dùng truy cập vào URL khơng tồn Ví dụ như: localhost:4000/dasdsdad Hiện chưa có xử lý cả, nên bị crash bên Trang 84 Hình 11.1: Ứng dụng bị crash vào URL Điều không mang trải nghiệm tốt cho người dùng Với trường hợp này, cần tạo trang 404, mục đích thơng báo cho người dùng biết URL khơng tồn Trong thư mục views, tạo thêm file đặt tên notfound.ejs 404 Page Not Found Trong index.js, đăng ký route cho not found app.get('/', homeController) app.get('/posts/new', authMiddleware, newPostController) app.get('/post/:id', getPostController) app.post('/posts/store', authMiddleware, storePostController) app.get('/auth/register', redirectIfAuthenticatedMiddleware, newUserController) app.post('/users/register', redirectIfAuthenticatedMiddleware, storeUserController) app.get('/auth/login', redirectIfAuthenticatedMiddleware, loginController); app.post('/users/login', redirectIfAuthenticatedMiddleware, loginUserController) app.get('/auth/logout', logoutController) app.use((req, res) => res.render('notfound')); Trang 85 Đoạn code có ý nghĩa là, request mà không thuộc vào route nhảy vào route cuối ( trường hợp not found) Hình 11.3 : Giao diện trang 404 Tổng kết Hoàn thành xong phần 11, hồn thiện tính đăng nhập người dùng Mỗi phiên đăng nhập lưu vào cookie trình duyệt, từ server xác thực request từ trình duyệt xem có phải người đăng nhập hay chưa Các bạn tham khảo mã nguồn phần đây: https://github.com/vntalking/nodejs-express-mongodb-co-ban/tree/master/chap11 Nếu bạn có thắc mắc chỗ chưa hiểu, đừng ngại liên hệ với qua support@vntalking.com Trang 86 PHẦN 12 Triển khai web app lên server thật Đ ây công đoạn cuối dự án, tất mã nguồn sẵn sàng, bạn tiến hành triển khai ứng dụng web lên server thật, thức mắt sản phẩm cho người dùng thật Về nguyên tắc việc triển khai lên server thật không khác so với việc bạn cài đặt localhost Điểm khác biệt là:   Server sử dụng public IP, truy cập lúc Cần phần mềm monitor ứng dụng web Ở sử dụng PM2 Ở mức có vậy, cịn tất nhiên, hệ thống lớn có lượng truy cập nhiều cần phải có đội quản trị server chuyên nghiệp, tối ưu xử lý cố Trong nhà cung cấp server, khuyến khích sử dụng Vultr Đây nhà cung cấp server VPS tiếng, giá rẻ mà chất lượng đảm bảo Đặc biệt bạn đăng ký tài khoản mới, tặng tới 100$ để dùng thử tất dịch vụ Vultr Cài đặt server Sau bạn tạo Cloud VPS mới, thường trạng thái mặc định, tức chưa có thêm ứng dụng khác cài thêm Ngoài ra, tùy nhà cung cấp VPS mà bạn cấp tài khoản root tài khoản user bình thường có quyền sudo Trong trường hợp bạn có tài khoản root khơng cần chạy dịng lệnh bắt đầu sudo Bạn truy cập vào server thông qua giao thức SSH cấu hình server dịng lệnh cửa sổ terminal Lưu ý: Khi bạn tạo VPS server, bạn theo hướng dẫn sách nên chọn Ubuntu OS Mọi hướng dẫn sách này, thao tác Ubuntu Trang 87 Hình 12.1: hình ssh kết nối thành công Cài đặt NGINX Git sudo apt install -y nginx git NGINX đóng vai trị reversed proxy static file server để tiếp nhận request thông qua port mặc định 80 (http) 443 (https) Git dùng để lấy source code app để tiến hành build deploy Cài đặt NodeJS mongoDB Việc cài đặt hai thành phần server hoàn toàn tương tự localhost Bạn tham khảo lại cách cài đặt phần 1: cài đặt Node.js phần 5: cài đặt mongoDB Sau cài đặt xong khởi động dịch vụ MongoDB lệnh: # Khởi động mongod service sudo systemctl start mongod # Bật chức tự chạy restart Ubuntu sudo systemctl enable mongod Trang 88 Cài đặt PM2 PM2 trình quản lý process (tiến trình) dành cho ứng dụng Nodejs, viết Nodejs Shell Bạn giữ cho process server cịn sống reload/restart với zero downtime Và bạn biết, zero downtime mà ứng dụng web muốn đạt tới Cài đặt PM2 bình thường với dòng lệnh: sudo npm install -g pm2 Chúng ta sử dụng PM2 qua dòng lệnh command line đồng thời quản lý giao diện người dùng thơng qua Key Metrics Hình 12.2: Giao diện quản lý PM2 Đưa sourcecode Node.js lên VPS Đầu tiên ta phải cài đặt git cho VPS với cú pháp: $ sudo apt-get install git Tiếp theo bạn cần phải clone sourcecode bạn Ở lưu vào thư mục /var/apps/demo_vntalking nên bạn tạo thư mục theo đường dẫn nhé, lưu nơi khác tùy bạn $ git clone https://github.com/vntalking/nodejs-express-mongodb-co-banfinal.git /var/apps/demo_vntalking Trang 89 Các bạn nhớ thay đường dẫn bạn vào Sau clone bạn chạy dịng lệnh sau để chạy ứng dụng: $ node index.js Quản lý ứng dụng Node.js PM2 Như giới thiệu trên, sau PM2 cài đặt, dùng PM2 để quản lý ứng dụng web Để chạy ứng dụng nodejs PM2 ta thực theo cú pháp: $ pm2 start index.js Sau chạy lệnh bạn để ý ứng dụng chạy bạn hồn tồn thực lệnh khác khơng ảnh hưởng đến Hoặc bạn chạy thêm nhiều ứng dụng khác với cú pháp tương tự Sau chạy pm2, bạn hồn tồn vào trang web địa theo cú pháp: http://: Ở ví dụ mình: port 4000 PM2 có nhiều câu lệnh để quản lý ứng dụng monitor thông số server Dưới số câu lệnh phổ biến: #Dừng ứng dụng $ pm2 stop app_name_or_id #Khởi động lại ứng dụng $ pm2 restart app_name_or_id #em danh sách ứng dụng chạy $ pm2 list #Xem thông tin ứng dụng $ pm2 info app_name_or_id Trang 90 #Xem mức CPU nhớ sử dụng $ pm2 monit #Xem log ứng dụng $ pm2 logs app_name_or_id Kết nối domain vào vps Sau deploy, web bạn định dạng :, để gán domain vào server, cần tên miền, quyền chỉnh sửa DNS tên miền Mình mua tên miền NameCheap, nên chỉnh sửa trang web nhà cung cấp tên miền Hoặc bạn sử dụng dịch vụ DNS trung gian Clouldflare Hình 12 3: Thêm A record NameCheap Sau chuyển, cần chờ tầm để hệ thống cập nhật Sau giờ, bạn vào web theo cú pháp: http://:4000 Như bạn thấy, cịn hiển thị port, phần dùng Nginx loại bỏ port khỏi domain Cấu hình Nginx Reverse Proxy Server Mở file cấu hình nginx sudo nano /etc/nginx/sites-available/default Trang 91 Xóa tồn nội dung đó, thêm cấu hình vào: server { listen 80; server_name example.com; location / { proxy_pass http://localhost:4000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } Với example.com domain, thay localhost port 4000 trùng với thông tin server bạn Sau khởi động lại Nginx sudo service nginx restart Giờ bạn vào ứng dụng web với domain mà không cần port: http:// Chào tạm biệt Khi đọc đến dịng chữ này, xin chúc mừng bạn hồn thành hành trình chinh phục Node.js Chúng ta trải qua nhiều nội dung đủ để trang bị cho bạn kỹ cần thiết để tự tạo cho riêng ứng dụng Node.js kết hợp với Express MongoDB Hi vọng bạn thích sách này, muốn tìm hiểu thêm giới lập trình Trong trình biên soạn sách khơng tránh khỏi thiếu sót Mình mong nhận phản hồi từ bạn, gửi email tới support@vntalking.com Tồn mã nguồn up lên github: https://github.com/vntalking/nodejsexpress-mongodb-co-ban Cuốn sách phần dự án học lập trình VNTALKING Mong bạn ủng hộ website học lập trình bọn tại: https://vntalking.com Hẹn gặp lại bạn sách Trang 92 PHỤ LỤC Tài liệu tham khảo Beginning Node.js, Express & MongoDB Development 2019 - Greg Lim Node.js official guides - https://nodejs.org/en/docs/guides/ Mongoose document - https://mongoosejs.com/docs/4.x/docs/guide.html Express documents - https://expressjs.com/en/api.html Hướng dẫn: Cài đặt hoàn chỉnh Nodejs app lên VPS https://int3ractive.com/2017/09/huong-dan-cai-dat-nodejs-app-len-vps-phan-1.html Deploy production Node.js với PM2 Nginx - https://blog.duyet.net/2016/04/deployproduction-nodejs-pm2-nginx.html Deploy ứng dụng Node.js lên VPS - https://www.tuankhaiit.com/deploy-ung-dungnode-js-len-vps/ Trang 93 ... kết sau: [ { _id: 5e3fb5939c43e40f70948958, title: 'Hoc lap trinh nodejs co kho khong?', body: 'Xin chao hoc vien, Thuc su thi hoc lap trinh Node.js khong he kho.', v: }, { _id: 5e3fb60153f5350fcdc55bdd,... document { price: 100000, name: "Lập trình Node.js thật đơn giản", image: "https://vntalking.com /lap_ trinh_ nodejs. png" }, → book document … Cài đặt MongoDB Có nhiều cách để cài đặt MongoDB, bạn tìm... cần nhiều thời gian, mà task lại đơn giản gửi file tĩnh cho trình duyệt khả task thực xong trước Cả task bắt đầu thời điểm khơng có nghĩa chúng thực đồng thời Khi task cần thời gian task thực

Ngày đăng: 23/09/2022, 15:59

HÌNH ẢNH LIÊN QUAN

Hình 1.1: Template giao diện dùng trong sách - Sach lap trinh nodejs that don gian
Hình 1.1 Template giao diện dùng trong sách (Trang 7)
Hình 1.4: Developer tools trong trình duyệt Chrome - Sach lap trinh nodejs that don gian
Hình 1.4 Developer tools trong trình duyệt Chrome (Trang 13)
Hình 1.5: Kiểm tra status code 200-OK - Sach lap trinh nodejs that don gian
Hình 1.5 Kiểm tra status code 200-OK (Trang 14)
Hình 1.6: Status 404 - NotFound - Sach lap trinh nodejs that don gian
Hình 1.6 Status 404 - NotFound (Trang 14)
Hình 2.1: giao diện trang web npmjs.com - Sach lap trinh nodejs that don gian
Hình 2.1 giao diện trang web npmjs.com (Trang 15)
Hình 2.2: Trang thơng tin một module trên npmjs.com - Sach lap trinh nodejs that don gian
Hình 2.2 Trang thơng tin một module trên npmjs.com (Trang 16)
node_modules (Hình 2.3) - Sach lap trinh nodejs that don gian
node _modules (Hình 2.3) (Trang 17)
Hình 2.3: nơi chứa mã nguồn expressJS trong dự án - Sach lap trinh nodejs that don gian
Hình 2.3 nơi chứa mã nguồn expressJS trong dự án (Trang 18)
Hình 2.4: Thư mục public dùng để chứa static resource - Sach lap trinh nodejs that don gian
Hình 2.4 Thư mục public dùng để chứa static resource (Trang 23)
Trong cuốn sách này, mình chọn clean blog templat e- Hình 3.1 (https://startbootstrap.com/themes/clean-blog/)  - Sach lap trinh nodejs that don gian
rong cuốn sách này, mình chọn clean blog templat e- Hình 3.1 (https://startbootstrap.com/themes/clean-blog/) (Trang 25)
Hình 3.2: thư mục public trong dự án - Sach lap trinh nodejs that don gian
Hình 3.2 thư mục public trong dự án (Trang 28)
Hình 3.3: Kiểm tra link static resource trên trình duyệt - Sach lap trinh nodejs that don gian
Hình 3.3 Kiểm tra link static resource trên trình duyệt (Trang 29)
Sau các bạn đổi tên và chuyển vào thư mục views, giờ dự án sẽ trơng như thế này (Hình 4.1)  - Sach lap trinh nodejs that don gian
au các bạn đổi tên và chuyển vào thư mục views, giờ dự án sẽ trơng như thế này (Hình 4.1) (Trang 32)
Hình 5.2: Màn hình thiết lập kết nối tới MongoDB - Sach lap trinh nodejs that don gian
Hình 5.2 Màn hình thiết lập kết nối tới MongoDB (Trang 39)
Sau đó bạn kiểm trong Robo3T xem đã thêm được document trên chưa. Như hình dưới là đã thêm thành công - Sach lap trinh nodejs that don gian
au đó bạn kiểm trong Robo3T xem đã thêm được document trên chưa. Như hình dưới là đã thêm thành công (Trang 42)
Hình 6.2: kết quả lưu một bài post trong MongoDB - Sach lap trinh nodejs that don gian
Hình 6.2 kết quả lưu một bài post trong MongoDB (Trang 48)
Hình 6.3: giao diện trang hiển thị danh sách bài posts - Sach lap trinh nodejs that don gian
Hình 6.3 giao diện trang hiển thị danh sách bài posts (Trang 50)
Hình 7.3: Ảnh được lưu trên server - Sach lap trinh nodejs that don gian
Hình 7.3 Ảnh được lưu trên server (Trang 56)
Hình 7.4: đường dẫn ảnh được lưu trong DB - Sach lap trinh nodejs that don gian
Hình 7.4 đường dẫn ảnh được lưu trong DB (Trang 57)
Hình 7.5: Ảnh được hiển thị lên trang web - Sach lap trinh nodejs that don gian
Hình 7.5 Ảnh được hiển thị lên trang web (Trang 58)
Bản thân ExpressJS framework cũng đã tạo sẵn cấu trúc dự án theo mơ hình MVC. Các bạn để ý sẽ thấy, ngay khi khởi tạo dự án với ExpressJS, chúng ta đã có sẵn các thư  mục như: models, views, public.. - Sach lap trinh nodejs that don gian
n thân ExpressJS framework cũng đã tạo sẵn cấu trúc dự án theo mơ hình MVC. Các bạn để ý sẽ thấy, ngay khi khởi tạo dự án với ExpressJS, chúng ta đã có sẵn các thư mục như: models, views, public (Trang 62)
Hình 10.1: Giao diện màn hình đăng ký tài khoản thành viên - Sach lap trinh nodejs that don gian
Hình 10.1 Giao diện màn hình đăng ký tài khoản thành viên (Trang 69)
Hình 10.2: Thơng tin tài khoản mới đăng ký trong mongoDB - Sach lap trinh nodejs that don gian
Hình 10.2 Thơng tin tài khoản mới đăng ký trong mongoDB (Trang 71)
Kết quả thu được như hình bên dưới là ok. - Sach lap trinh nodejs that don gian
t quả thu được như hình bên dưới là ok (Trang 72)
Hình 10.4: Mật khẩu đã được mã hóa - Sach lap trinh nodejs that don gian
Hình 10.4 Mật khẩu đã được mã hóa (Trang 73)
Implementing User Sessions - Sach lap trinh nodejs that don gian
mplementing User Sessions (Trang 79)
Hình 11.1: Cookie được tạo ra bởi express-session module - Sach lap trinh nodejs that don gian
Hình 11.1 Cookie được tạo ra bởi express-session module (Trang 79)
Hình 11. 3: Giao diện trang 404 - Sach lap trinh nodejs that don gian
Hình 11. 3: Giao diện trang 404 (Trang 86)
Hình 12.2: Giao diện quản lý của PM2 - Sach lap trinh nodejs that don gian
Hình 12.2 Giao diện quản lý của PM2 (Trang 89)
Hình 12. 3: Thê mA record trong NameCheap - Sach lap trinh nodejs that don gian
Hình 12. 3: Thê mA record trong NameCheap (Trang 91)