Đồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean StackĐồ án tốt nghiệp: Xây dựng Website bán đồ cũ sử dụng công nghệ Mean Stack
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
ĐỀ TÀI:
KHÓA LUẬN TỐT NGHIỆP KỸ SƯ CNTT
KHÓA 2016 - 2020 KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN HỆ THỐNG THÔNG TIN
XÂY DỰNG WEBSITE BÁN ĐỒ CŨ
SỬ DỤNG CÔNG NGHỆ MEAN STACK
GIÁO VIÊN HƯỚNG DẪN
TS NGUYỄN THÀNH SƠN
NGUYỄN ĐÌNH ĐẠT - 16110304
Trang 2TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN HỆ THỐNG THÔNG TIN
NGUYỄN ĐÌNH ĐẠT - 16110304
ĐỀ TÀI:
XÂY DỰNG WEBSITE BÁN ĐỒ CŨ
SỬ DỤNG CÔNG NGHỆ MEAN STACK
KHÓA LUẬN TỐT NGHIỆP KỸ SƯ CNTT
GIÁO VIÊN HƯỚNG DẪN
TS NGUYỄN THÀNH SƠN
KHÓA 2016 - 2020
Trang 3LỜI CẢM ƠN
Em xin chân thành cảm ơn Thầy Nguyễn Thành Sơn – giảng viên khoa Công nghệ thông tin trường Đại học Sư Phạm Kỹ Thuật TP.HCM, đã nhiệt tình giúp đỡ em rất nhiều trong việc định hướng thực hiện đề tài khóa luận tốt nghiệp, hướng dẫn thực hiện, nêu ý kiến nhận xét, cung cấp tài liệu tham khảo trong quá trình thực hiện đề tài
“Xây dựng Website bán đồ cũ sử dụng công nghệ MEAN stack”
Bên cạnh đó, em xin gửi lời cảm ơn đến các thầy cô giảng viên của trường Đại học Sư Phạm Kỹ Thuật TP.HCM nói chung cũng như các thầy cô giảng viên khoa Công nghệ thông tin nói riêng, những người đã giảng dạy, tạo điều kiện cho em tích lũy được những kiến thức quý báu trong những năm học qua
Dù đã cố gắng hoàn thành khóa luận tốt nghiệp đúng yêu cầu, nhưng do thời gian hạn hẹp và khả năng còn hạn chế nên chắc chắn sẽ không tránh khỏi thiếu sót Em mong sẽ nhận được sự thông cảm và tận tình chỉ bảo của quí thầy cô
TP Hồ Chí Minh, ngày 05 tháng 07 năm 2020
Sinh viên thực hiện
Nguyễn Đình Đạt
Trang 4ĐH SƯ PHẠM KỸ THUẬT TP.HCM CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM
ĐỀ CƯƠNG KHÓA LUẬN TỐT NGHIỆP KỸ SƯ CNTT
Họ tên sinh viên thực hiện : Nguyễn Đình Đạt MSSV: 16110304
Thời gian làm khóa luận tốt nghiệp: Từ 01/03/2020 Đến 01/08/2020
Chuyên ngành: Hệ Thống Thông Tin
Tên đề tài: Xây dựng Website bán đồ cũ sử dụng công nghệ MEAN stack
Giảng viên hướng dẫn: TS Nguyễn Thành Sơn
Nhiệm vụ khóa luận:
* Tìm hiểu tổng quan thế nào là MEAN stack
* Tìm hiểu về MongoDB và AngularJS
* Tìm hiểu về Express và NodeJS
* Cấu hình môi trường và kết nối được database
* Tiến hành cài đặt website bán đồ cũ
- Sử dụng passportjs làm chức năng đăng ký đăng nhập + sử dụng token để lưu tiến trình đăng nhập
- Làm chức năng Comment
- Làm chức năng đăng bài
- Làm chức năng tìm kiếm
- Làm chức năng hồ sơ cá nhân và chỉnh sửa thông tin cá nhân
- Làm chức năng upload hình ảnh vào cơ sở dữ liệu
- Làm chức năng quản lý bài đăng,người dùng,comment
- Làm chức năng xác thực bài đăng,người dùng
- Làm chức năng gửi email
- Viết api Giáo viên hướng dẫn
(Ký & ghi rõ họ tên)
Trang 55 17/04/2020 23/04/2020 Thiết kế cơ sở dữ liệu 100%
6 24/04/2020 30/04/2020 Xây dựng ứng dung
8 08/05/2020 14/05/2020 Xây dựng ứng dung
9 15/05/2020 21/05/2020 Hoàn thành bài đặc tả về
website bán đồ cũ 90%
10 22/05/2020 28/05/2020 Xây dựng project Angular 30%
11 29/05/2020 04/05/2020 Xây dựng project Angular 50%
12 05/06/2020 11/06/2020 Xây dựng project Angular 85%
14 19/06/2020 25/06/2020 Tiến hành thiết kế giao diện 30%
15 26/06/2020 02/07/2020 Tiếp tục hoàn thiện giao diện 80%
16 03/07/2020 09/07/2020 Viết báo cáo khóa luận 100%
Ngày 5 tháng 7 năm 2020
Trang 6DANH MỤC HÌNH ẢNH
Hình 1.2 1: Cấu trúc express 27
Hình 2 1: Mở lệnh "mongod–dbpath D:\MongoDB\data" 30
Hình 2 2: Kết quả sau khi chạy thành công với Port 27017 30
Hình 2 3: Gõ lệnh "mongo" khi khởi động mongoDB xong 31
Hình 2 4: Gõ câu lệnh "show dbs" 31
Hình 2 5: Tạo database trong MongoDB 31
Hình 2 6: Xóa database 31
Hình 2 7: Thêm 1 document vào collection 31
Hình 2 8: Thêm nhiều document vào collection 32
Hình 2 9: Hiện thị tất cả các docment có trong collection 32
Hình 2 10: Update 1 document trong collection 32
Hình 2 11: Xóa document 33
Hình 2 12: Kết nối thành công với mongodb 35
Hình 2 13: Các bước thiết lập project Angular 35
Hình 2 14: Cấu trúc file với một project Angular 36
Hình 2 15: khởi chạy project Angular 37
Hình 2 16: Download postman về máy tính 37
Hình 2 17: Sau khi download xong 38
Hình 2 18:Giao diện postman 38
Hình 3 1:Xác định các Actor 40
Hình 3 2:Mô hình ERD database 42
Hình 3 3:Collection Product 49
Hình 3 4:Collection Comment 50
Hình 3 5:Collection Comment Children 51
Hình 3 6:Collection Users 51
Hình 3 7:Collection Category 52
Hình 4 1: Tạo 2 folder con là BackEnd và FrontEnd 53
Hình 4 2: Tạo mới một project backend 53
Hình 4 3:Khởi tạo git 54
Trang 7Hình 4 4: Thực hiện cài đặt express 54
Hình 4 5: Cài đặt express thành công 54
Hình 4 6: Cài đặt nodemon 55
Hình 4 7: Cài đặt thành công 55
Hình 4 8: Khởi tạo FrontEnd 56
Hình 4 9: Thực hiện lệnh để chạy project 56
Hình 4 10: Giao diên FrontEnd 56
Hình 4 11: Cài đặt mongoose 57
Hình 4 12: File cấu hình môi trường 57
Hình 4 13: Cấu hình file server.js 58
Hình 4 14: Folder chứa hình ảnh 58
Hình 4 15: Code xử lý gửi email 59
Hình 4 16: Tạo model 60
Hình 4 17: Xử lý tải hình ảnh và xác thực token 61
Hình 4 18: Thiết lập request đăng nhập 62
Hình 4 19: Api đăng nhập thành công 62
Hình 4 20: Thiết lập request đăng ký người dùng 63
Hình 4.21 : Api đăng ký người dùng thành công 63
Hình 4 22: Thiết lập request lấy danh sách người dùng 64
Hình 4 23: Api lấy danh sách người dùng thành công 64
Hình 4 24: Gán token request lấy thông tin người dùng 65
Hình 4 25: Api lấy thông tin người dùng theo ID thành công 65
Hình 4 26: Thiết lập request upload hình ảnh 66
Hình 4 27: Api upload hình ảnh thành công 66
Hình 4 28: Thiết lập request tìm người dùng theo email 66
Hình 4 29: Api tìm kiếm người dùng theo email thành công 67
Hình 4 30: Gán token request đổi mật khẩu 67
Hình 4 31: Thiết lập request thay đổi mật khẩu mới 68
Hình 4 32: Api thay đổi mật khẩu thành công 68
Hình 4 33: Gán token request tạo sản phẩm mới 69
Hình 4 34: Thiết lập request tạo sản phẩm mới 69
Hình 4 35: Api tạo một sản phẩm mới thành công 69
Trang 8Hình 4 36: Gán token request lấy danh sách sản phẩm 70
Hình 4 37: Api lấy tất cả danh sách sản phẩm thành công 70
Hình 4 38: Gán token request lấy chi tiết sản phẩm 71
Hình 4 39: Thiết lập request lấy chi tiết sản phẩm 71
Hình 4 40: Api lấy chi tiết một sản phẩm theo ID thành công 71
Hình 4 41: Gán token request xóa một sản phẩm 72
Hình 4 42: Thiết lập request xóa một sản phẩm 72
Hình 4 43: Xóa một sản phẩm thành công 72
Hình 4 44: Gán token request upload ảnh đại diện sản phẩm 73
Hình 4 45: Thiết lập request upload ảnh đại diện 73
Hình 4 46: Api upload ảnh đại diện sản phẩm thành công 73
Hình 4 47: Gán token request upload danh sách hình ảnh 74
Hình 4 48: Thiết lập request upload danh sách hình ảnh 74
Hình 4 49: Api upload danh sách hình ảnh chi tiết sản phẩm thành công 74
Hình 4 50: Thiết lập request tìm kiếm một sản phẩm 75
Hình 4 51: Api tìm kiếm một sản phẩm thành công 75
Hình 4 52: Gán token request tạo một bình luận 75
Hình 4 53: Thiết lập request tạo một bình luận 76
Hình 4 54: Api tạo bình luận mới thành công 76
Hình 4 55: Api lấy danh sách tất cả bình luận thành công 77
Hình 4 56: Api lấy danh sách danh mục sản phẩm thành công 78
Hình 4 57: Thiết lập request lây chi tiết danh mục sản phẩm 79
Hình 4 58: Api lấy chi tiết danh mục sản phẩm thành công 79
Hình 4 59: Thiết lập request lấy danh sách chi tiết danh mục sản phẩm 80
Hình 4 60: Api lấy danh sách chi tiết danh mục con thành công 80
Hình 4 61: Cấu trúc thư muc frontend 81
Hình 4 62:Diagram NgRx trong Angular 82
Hình 4 63:Cấu trúc thư mục tạo form login 83
Hình 4 64: Xử lý form login 83
Hình 4 65: Tạo service 84
Hình 4 66: Code file auth.guard.ts 84
Hình 4 67: Danh sách danh mục sản phẩm 85
Trang 9Hình 4 68: Gán token khi người dùng tạo một request xuống server 85
Hình 4 69: code server 86
Hình 4 70: Cấu trúc Module home 86
Hình 4 71: Giao diện danh mục sản phẩm 88
Hình 4 72: Giao diện danh sách sản phẩm 88
Hình 4 73: Lọc sản phẩm có giá từ thấp đến cao 88
Hình 4 74: Lọc sản phẩm có giá từ cao xuống thấp 89
Hình 4.75: Giao diện chi tiết sản phẩm 90
Hình 4.76:Giao diện xem danh sách bình luận 90
Hình 4.77:Giao diện đăng bình luận 91
Hình 4.78:Thông báo đăng nhập để có thể truy cập 91
Hình 4.79:Thông tin người dùng 93
Hình 4.80:Giao diện Form đăng nhập người dùng 93
Hình 4.81 : Giao diện người dùng đăng nhập thành công 94
Hình 4.82:Giao diện nhập thông tin vào form đăng ký 95
Hình 4.83:Giao diện thông báo đăng ký thành công 96
Hình 4.84:Thông báo về địa chỉ email sau khi đăng ký 97
Hình 4.85:Thông báo về email sau khi tài khoản được xác nhận 97
Hình 4.86:Giao diện Form lấy thông tin sản phẩm 98
Hình 4.87: Giao diện sản phẩm đăng ký thành công 99
Hình 4.88:Giao diện tìm kiếm 99
Hình 4.89:Giao diện danh sách sản phẩm được tìm thấy 100
Hình 4.90:Chọn địa chỉ và danh mục sản phẩm bạn tìm kiếm 100
Hình 4.91:Sản phẩm được tìm thấy 101
Hình 4.92:Giao diện đăng nhập của quản trị viên 102
Hình 4.93:Thông báo lỗi đăng nhập 102
Hình 4.94:Giao diện bảng điều khiển 103
Hình 4.95:Danh sách sản phẩm 103
Hình 4.96:Tài khoản cần xác thực 104
Hình 4 97: Sản phẩm cần xác thực 104
Hình 4 98: Danh sách người dùng 105
Hình 4 99: Hồ sơ người dùng 105
Trang 10DANH MỤC BẢNG BIỂU
Bảng 3 1 Ràng buộc bảng User 42
Bảng 3 2: Ràng buộc bảng Product 44
Bảng 3 3Ràng buộc bảng Comment 45
Bảng 3 4Ràng buộc bảng Comment Children 46
Bảng 3 5 Ràng buộc bảng Category Level1 47
Bảng 3 6 Ràng buộc bảng Category Level2 48
Trang 11PHẦN 1: PHẦN MỞ ĐẦU
1 TÍNH CẤP THIẾT CỦA ĐỀ TÀI:
Nếu đã từng xây dựng một vài ứng dụng Web, chắc hẳn bạn đã từng nghe đến cái tên Angular, một Frameworks Javascript giúp chúng ta xây dựng ứng dụng Web đầy đủ tính năng từ phía Client Angular lần đầu được phát hành bởi gã khổng lồ Google vào năm 2010 với phiên bản AngularJS, sau đó đã có chỗ đứng khá vững chắc trong một thời gian dài, phiên bản Angular 2 phát hành năm 2016 mang đến một bước chuyển mình vượt bậc, một công cụ thực sự mạnh mẽ cho việc phát triển ứng dụng Web trên cả nền tảng Mobile và Desktop … Angular là một công nghệ được phát triển bởi google
và là một trong những thành phần quang trọng trong việc thiết kế giao diện ( Front-End) của công nghệ MEAN STACK MEAN STACK là gì? MEAN có đủ để làm một trang Web hoàn thiện hay không? Cơ hội phát triển khi thành thạo MEAN là gì? Vâng rất nhiều câu hỏi được đặt ra và để giải quyết những vấn đề đó nhóm chúng em chọn đề tài
“Xây dựng một Website bán đồ cũ đơn giản bằng công nghệ MEAN STACK”
2 Ý NGHĨA KHOA HỌC VÀ THỰC TIỄN:
Đề tài hướng đến mục đích xây dựng một Website bán đồ cũ giúp mang ý nghĩa tiết kiệm tránh lãng phí dụng những kiến thức về lý thuyết biến nó thành thực tiễn Từ một Website đơn giản phát triển hoàn thiện hơn thành đồ án “Khóa luận tốt nghiệp” sau này cũng như tạo tiền đề căn bản để các em khóa sau tham khảo và phát triển dự án toàn
diện hơn
3 MỤC ĐÍCH NGHIÊN CỨU:
Hoàn thành nghiên cứu các bạn sẽ hiểu rõ hơn về MongoDB, NodeJS, Angular và Express đó là những thành phần cấu tạo nên công nghệ MEAN Có thể xây dựng một website theo đúng công nghệ MEAN Ngoài ra đề tài còn giúp các bạn hiểu hơn về một
Trang 12Website bán đồ cũ gồm những gì, các thao tác căn bản trên Database NoSql xử lý như
thế nào Liên kết giữa các phần ra sao…
Trang 13PHẦN 2: NỘI DUNG CHƯƠNG 1: TỔNG QUÁT VỀ MEAN STACK
Để tạo một ứng dụng hoàn chỉnh như một trang web động thật sự thì cần phải có sự kết hợp với các ngôn ngữ phía server và ngôn ngữ thao tác cơ sở dữ liệu Và MEAN Stack là một sự kết hợp như thế
MEAN stack là sự kết hợp giữa :
• MongoDB: Nếu như bạn đã từng sử dụng các hệ cơ sở dữ liệu quan hệ
(RDBMS)như MySQL, Oracle DB, MSSQL thì MongoDB lại thuộc trường phái cơ
sở dữ liệu phi quan hệ (NoSQL) MongoDB lưu trữ các dữ liệu dưới dạng giống với JSON (JavaScript Object Notation) và gọi tên là BSON (Binary JSON)
• ExpressJS: Là một web application framework cho NodeJS, bạn có thể xây dựng
ứng dụng Web bằng cách sử dụng ExpressJS Tuy nhiên, chúng ta có thể sử dụng sức mạnh của ExpressJS để tạo ra các API một cách nhanh chóng
• Angular: Angular là một javascript framework Dùng để xây dựng giao diện người
dùng(Front-end) Angular được phát triển bởi Google AngularJS là từ dùng để nói
về Angular 1 ra đời 2009 được viết bằng javascript.Còn Angular được gọi chung là Angular 2 ra đời 2016 được viết bằng TypeScript phiên bản nâng cấp javascript
• NodeJS: Là nền tảng phía server được dựng dựa trên Javascript Engine V8 Engine
Sức mạnh của NodeJS hiện nay được sử dụng ở rất nhiều dự án và công ty nổi tiếng như Uber, NetFlix, Facebook, Google…NodeJS có thể xử lý hàng ngàn kết nối song song – điều mà các web server thông thường không dễ để xử lý được
1.1 MONGODB
- Giới thiệu: MongoDB là một trong những cơ sở dữ liệu mã nguồn mở NoSQL
phổ biến nhất được biết bằng C++ Tính đến tháng 2/2015, MongoDB được xếp thứ 4 trong số các hệ thống cơ sở dữ liệu phổ biến nhất MongoDB là một cơ sở
dữ liệu NoSQL hỗ trợ đa nền tảng, nó có thể chạy trên Windows, Linux và Mac Nó hỗ trợ hầu hết các ngôn ngữ lập trình phổ biến như C#, Java, PHP, Javascript và các môi trường phát triển khác nhau (Nôi dung này được tham khảo phần tài liệu tham khảo số 6)
Trang 14* Một số điểm quan trọng của MongoDB:
• MongoDB được thiết kế theo kiểu hướng đối tượng trong đó các bảng được cấu trúc một cách linh hoạt cho phép các dữ liệu lưu trên bảng không cần phải tuân theo một dạng cấu trúc nhất định nào(về định dạng bảng, thuộc tính)
• JSON document lưu trữ các dữ liệu theo kiểu định dạng “key-value”, ví dụ
trong ví dụ trên, " Name " và “Age” là key, " Dat" và “23” là value
• Có 2 kiểu cấu trúc cơ bản trong JSON là:
Array: Một danh sách chứa các thể hiện của một list các “key-value”
Dictionaries: Lưu trữ các cặp “key-value”
• MongoDb có cấu trúc Schema động Một cơ sở dữ liệu NoSQL cho phép chúng ta phát triển ứng dụng mà không cần định nghĩa trước một schema, còn đối với các cơ sở dữ liệu quan hệ khác thì chúng ta cần phải định nghĩa một schema trước khi chúng ta có thể thêm dữ liệu vào hệ thống Không có schema được định nghĩa trước cho phép các cơ sở dữ liệu NoSQL dễ dàng
cập nhật lại dữ liệu của bạn mỗi khi có yêu cầu thay đổi
• MongoDB không hỗ trợ Joins và Transaction
- Trước khi tìm hiểu sâu về MongoDB, ta cùng tìm hiều hệ cơ sở dữ liệu phi quan
hệ (NoSQL): Cơ sở dữ liệu NoSQL tên gốc là “Non SQL” (phi SQL) hoặc “non relational” (phi quan hệ) Các cơ sở dữ liệu NoSQL đang được sử dụng ngày càng nhiều trong các ứng dụng dữ liệu lớn Vậy NoSQL khác gì với hệ cơ sở dữ liệu quan hệ (RDBMS)? Và lý do gì để chúng ta lựa chọn NoSQL cho các dự án hiện tại cũng như sắp tới ?
* Các đặc điểm khác biệt giữa MongoDB(NoSQL) và RDBMS như sau:
Trang 15• Mô hình dữ liệu: Một cơ sở dữ liệu NoSQL cho phép chúng ta phát triển ứng
dụng mà không cần định nghĩa trước một schema, còn đối với các cơ sở dữ liệu quan hệ khác thì chúng ta cần phải định nghĩa một schema trước khi chúng ta
có thể thêm dữ liệu vào hệ thống Không có schema được định nghĩa trước cho phép các cơ sở dữ liệu NoSQL dễ dàng cập nhật lại dữ liệu của bạn mỗi khi có yêu cầu thay đổi
• Mô hình cấu trúc: MongoDB lưu dữ liệu theo định dạng JSON, chính vì thế
nó có hiệu suất cao, tương tác nhanh và khả năng mở rộng tốt, nó hoạt động
trên khái niệm Database=> Collections=> _id và document RDBMS cung
cấp kiểu lưu trữ dữ liệu dưới dạng bảng và các bảng này có quan hệ với nhau
và nó hoạt động trên khái niệmDatabases=> Tables=> Columns
• Mô hình quan hệ: RDBMS query cung cấp JOIN query rất mạnh mẽ Chúng
ta có thể lấy dữ liệu liên quan trong nhiều bảng bằng cách sử dụng một câu lệnh SQL Còn NoSQL không trang bị JOIN, chúng ta phải làm bằng tay khi chúng ta code
• Transactions: Trong RDBMS, hai hoặc nhiều record update có thể được thực
hiện trong một transaction - đảm bảo tất cả update thành công hoặc nếu một bản update fails thì sẽ rollback lại toàn bộ các record khác Điều này đảm bảo tính đồng nhất cho dữ liệu Trong NoSQL, việc sửa đổi một document là riêng
lẻ Nói cách khác, nếu bạn đang cập nhật ba giá trị trong một document, cả ba đều được cập nhật thành công hoặc nó vẫn không thay đổi Tuy nhiên, không
có transaction tương đương để update cho nhiều document Có những option tương tụ như transaction Nhưng chúng phải được xử lý thủ công trong khi viết code
o Ưu điểm của MongoDB:
• Do Mongodb lưu trữ dữ liệu dạng JSON, không có tính ràng buộc về các mối quan hệ và cấu trúc lưu trữ nên khả năng mở rộng rất linh động, tính sẵn sàng cao và tốc độ truy vấn cực nhanh (Nhanh hơn nhiều so với SQL)
• Sử dụng bộ nhớ nội tại(RAM) để lưu giữ phần công việc, hạn chế truy
cập vào ổ cứng nên truy vấn sẽ rất nhanh
• Dữ liệu không đồng nhất ,Khả năng mở rông cao
Trang 16o Nhược điểm của MongoDB:
• Điều đầu tiên phải kể đến ở đây là MongoDB không có các tính chất ràng buộc như trong RDBMS nên khi thao tác với MongoDB thì phải hết sức cẩn thận vì rất dễ sai sót Không ứng dụng được cho các mô hình giao dịch yêu cầu độ chính xác cao
• Vì không hỗ trợ join giống như RDBMS nên khi viết function join trong code ta phải làm bằng tay
• Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao (Nội dung mongodb được tham khảo trong tài liệu tham khảo số 6)
1.2 EXPRESSJS
* Expressjs là một Framework của Nodejs, nhưng linh hoạt được xây dựng trên
nền tảng của Nodejs Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile Express rất dễ dàng để phát triển các ứng dụng nhanh dựa trên Node.js cho các ứng dụng Web Express hỗ trợ các phương thức HTTP và middleware tạo ra 1 API rất mạnh mẽ và sử dụng dễ dàng hơn
* Các tính năng của Express framework phải kể đến như:
• Cho phép thiết lập các lớp trung gian để trả về các HTTP request
• Định nghĩa routing có thể được sử dụng với các hành động khác nhau dựa trên phương thức HTTP và URL
• Cho phép trả về các trang HTML dựa vào các tham số truyền vào đến template
• Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên các
bạn không phải lo lắng khi làm việc với Framework này
• Express hỗ trợ các phương thức HTTP và middleware để tạo ra API một
cách dễ dàng, nhanh chóng và rất mạnh mẽ
• Về hiệu năng thì Express rất tối ưu vì Express cung cấp một layer bao
gồm các tính năng cơ bản của ứng dụng web và không hề tác động đến các tính năng của Node.js
Trang 17* Cấu trúc của ExpressJS
Hình 1.2.1: Cấu trúc Express
• Root:
• app.js chứa các thông tin về cấu hình, khai báo, các định nghĩa, để ứng dụng của chúng ta chạy ok
• package.json chứa các package cho ứng dụng chạy
• Routes: chứa các route có trong ứng dụng
• Views: chứa view/template cho ứng dụng
• Public: chứa các file css, js, images, cho ứng dụng
* Các tính năng cốt lõi của Angular:
- Angular Module: Angular bao gồm một số các khối như Component, Service và
Directive Chúng ta tạo ra nhiều block để phát triển ứng dụng lớn dần Angular đưa ra một cách tốt để tổ chức các khối này sử dụng một khái niệm gọi là Angular Module
Trang 18Chúng ta tạo ra các component, service, và directive sau đó đặt chúng trong Angular Module Chúng ta sử dụng một directive đặc biệt gọi là @NgModule để tạo module Angular Module cũng được gọi là NgModule
Sử dụng Angular Module (hoặc ngModule) để tổ chức code ứng dụng Angular với một ứng dụng Angular lớn hơn Ứng dụng sẽ gộp lại bởi nhiều Angular Module Mỗi Module triển khai một tính năng cụ thể voặc các tính năng của ứng dụng
- Component: Angular Component là một class nó được bổ trợ bởi @Component
decorator Component điều khiển một phần của UI
- Template: Component cần một view để hiển thị Template định nghĩa view
Template chỉ là một tập con của HTML, nó chỉ cho Angular biết làm sao để hiển thị view Nó là một trang HTML chuẩn sử dụng các thẻ H1, H2 Nó cũng sử dụng các lệnh của Angular như {}, []
- Diective: Directive giúp chúng ta thao tác với View Một directive là một class, chúng ta tạo ra sử dụng @Directive nó chứa metadata và logic thao tác trên DOM
View được tạo ra bởi Angular sử dụng template metadata được định nghĩa trong Component Các template là động và được chuyển đổi sử dụng directive
- Service : Service cung cấp dịch vụ cho các Components hoặc các service khác
Angular không có bất cứ đặc tả nào cho Service nó chỉ là các class có export method
và chứa một số task Bạn không cần làm gì cả
* Ưu điểm của Angular:
- Tốc độ và hiệu suất: Đạt được tốc độ tối đa có thể có trên Nền tảng Web hiện nay
và tiếp tục thực hiện nó thông qua Công việc Web và hiển thị phía máy chủ Angular giúp bạn kiểm soát khả năng mở rộng Đáp ứng các yêu cầu dữ liệu lớn bằng cách xây dựng các mô hình dữ liệu trên RxJS, Immutable.js hoặc một mô hình đẩy khác
giản, khai báo Mở rộng ngôn ngữ mẫu với các thành phần của riêng bạn và sử dụng một mảng rộng các thành phần hiện có Nhận trợ giúp và phản hồi cụ thể theo góc cạnh với hầu hết mọi IDE và trình chỉnh sửa Tất cả điều này đến với nhau để bạn
có thể tập trung vào việc xây dựng các ứng dụng tuyệt vời thay vì cố gắng làm cho
mã hoạt động
Trang 19- Được nhiều nhà phát triển yêu thích: Angular cung cấp cơ sở hạ tầng năng suất
và khả năng mở rộng hỗ trợ các ứng dụng lớn nhất của Google
- Angular có thể chạy trên hầu hết các trình duyệt điện thoại thông minh
* Nhược điểm của Angular:
- Mặc dù angular có nhiều lợi thế ưu điểm nhưng nó cũng có mặt trái ngược lại: Không an toàn: Được phát triển từ javascript nên nó không an toàn, phía máy chủ phải thường xuyên xác nhận quyền để hệ thống chạy trơn tru Phụ thuộc: Nếu người dùng vô hiệu hóa javascript thì ứng dụng sẽ không hoạt động được
- Khó tiếp cận cho người mới học Web
(Nôi dung về Angular được tham khảo phần tài liệu tham khảo số 7)
1.4 NODEJS
• Có thể hiểu Node.js là 1 nền tảng hay 1 môi trường được sử dụng để xây dựng
các ứng dụng web, ứng dụng mạng, công cụ, thư viện,
• Nền tảng ở đây có nghĩa là tập hợp các công cụ, các framework, các thư viện, các khả năng và sử dụng ngôn ngữ lập trình gì để hỗ trợ bạn xây dựng (build) ứng dụng của bạn
• NodeJS là một nền tảng Server side được xây dựng dựa trên Javascript Engine (V8 Engine) Cho phép lập trình viên có thể xây dựng các ứng dụng chạy trên máy chủ Ban đầu, Node.js được phát triển bởi Ryan Dahl Phiên bản đầu tiên của Node.js được cho ra mắt vào năm 2009
• Node.js có thể chạy được trên nhiều nền tảng khác nhau như Windows, Linux hay Mac OS,…
• Node.js là bộ thư viện JavaScript được Google phát triển để viết trình duyệt web Chrome
• Bản thân Node.js không phải là một ngôn ngữ lập trình mới, thay vào đó Node.js
là một nền tảng mã nguồn mở (hay phần mềm mã nguồn mở) được viết dựa trên ngôn ngữ JavaScript
• Một khái niệm cốt lõi của Node.js đó là các function bất đồng bộ (asynchronous functions) - vì vậy về cơ bản thì mọi thứ chạy trên nền tảng này Với hầu hết các ngôn ngữ kịch bản máy chủ, chương trình phải đợi mỗi function thực thi xong trước
Trang 20khi có thể tiếp tục chạy tiếp Với Node.js, bạn xác định các function sẽ chạy để hoàn thành một tác vụ nào đó, trong khi phần còn lại của ứng dụng vẫn chạy đồng thời
* Đặc điểm của NodeJS:
- Không đồng bộ và Phát sinh sự kiện (Event Driven): Tất các các APIs của thư
viện Node.js đều không đồng bộ, nghĩa là không blocking (khóa) Nó rất cần thiết
vì Node.js không bao giờ đợi một API trả về dự liệu Server chuyển sang một API sau khi gọi nó và có cơ chế thông báo về Sự kiện của Node.js giúp Server nhận đựa phản hồi từ các API gọi trước đó
- Chạy rất nhanh: Dựa trên V8 Javascript Engine của Google Chrome, thư viện
Node.js rất nhanh trong các quá trình thực hiện code
- Các tiến trình đơn giản nhưng hiệu năng cao: Node.js sử dụng một mô hình
luồng đơn (single thread) với các sự kiện lặp Các cơ chế sự kiện giúp Server trả lại các phản hồi với một cách không khóa và tạo cho Server hiệu quả cao ngược lại với các cách truyền thống tạo ra một số lượng luồng hữu hạn để quản lý request Nodejs
sử dụng các chương trình đơn luồng và các chương trình này cung cấp các dịch vụ cho số lượng request nhiều hơn so với các Server truyền thống như Apache HTTP Server
- Có thể tải được một lượng truy cập khá lớn mà vẫn mượt Phần Core bên dưới
của Nodejs được viết hầu hết bằng C++ nên cho tốc độ xử lý và hiệu năng khá cao
- Không đệm: Ứng dụng Node.js không lưu trữ các dữ liệu buffer
- Có giấy phép: Node.js được phát hành dựa vào MIT License
➔ Với những đặc điểm này NodeJS là một sự lựa chọn hoàn hảo cho các ứng dụng website trên các lĩnh vực công nghệ bao gồm:
- Các ứng dụng về I/O
- Các ứng dựng về luồng dữ liệu
- Các ứng dụng về dữ liệu hướng đến thời gian thực
- Các ứng dụng dựa vào JSON APIs
- Các ứng dụng Single Page Application Hiện tại có rất nhiều hệ thống lớn hiện tại
đang sử dụng NodeJS, trong số này có thể kể đến như: eBay, GE, GoDaddy, Microsoft, Yahoo, Linkedin, Paypal, Uber,…
Trang 21* Ưu điểm của NodeJS:
- JSON APIs: Với cơ chế event-driven, non-blocking I/O(Input/Output) và mô
hình kết hợp với Javascript là sự lựa chọn tuyệt vời cho các dịch vụ Webs làm bằng JSON
- Ứng dụng trên 1 trang: Nếu bạn định viết 1 ứng dụng thể hiện trên 1 trang
(Gmail?) NodeJS rất phù hợp để làm Với khả năng xử lý nhiều Request/s đồng thời thời gian phản hồi nhanh Các ứng dụng bạn định viết không muốn nó tải lại trang, gồm rất nhiều request từ người dùng cần sự hoạt động nhanh để thể hiện sự chuyên nghiệp thì NodeJS sẽ là sự lựa chọn của bạn
- Shelling tools unix: NodeJS sẽ tận dụng tối đa Unix để hoạt động Tức là NodeJS
có thể xử lý hàng nghìn Process và trả ra 1 luồng khiến cho hiệu xuất hoạt động đạt mức tối đa nhất và tuyệt vời nhất
- Streamming Data (Luồng dữ liệu): Các web thông thường gửi HTTP request
và nhận phản hồi lại (Luồng dữ liệu) Giả xử sẽ cần xử lý 1 luồng giữ liệu cực lớn, NodeJS sẽ xây dựng các Proxy phân vùng các luồng dữ liệu để đảm bảo tối đa hoạt động cho các luồng dữ liệu khác
- Ứng dụng Web thực: Giả sử bạn xây dựng 1 ứng dụng chat, feed Facebook,
Twitter là điển hình cho Web thực NodeJS làm khá tốt điều đó !
* Nhược điểm của NodeJS:
- Giống như hầu hết các công nghệ mới, việc triển khai Node.js trên host không
phải là điều dễ dàng
- Ứng dụng nặng tốn tài nguyên: Nếu cần xử lý các ứng dụng tốn tài nguyên
CPU như encoding video, convert file, decoding encryption… hoặc các ứng dụng tương tự như vậy thì không nên dùng NodeJS (Lý do: NodeJS được viết bằng C++
& Javascript, nên phải thông qua thêm 1 trình biên dịch của NodeJS sẽ lâu hơn 1 chút )
- NodeJS và ngôn ngữ khác NodeJS, PHP, Ruby, Python NET …thì việc cuối
cùng là phát triển các App Web NodeJS mới sơ khai như các ngôn ngữ lập trình khác Với những gì các ngôn ngữ tiền bối đang có, nếu chưa biết về NodeJS thì việc cần xây dựng dự án quan trọng, kinh doanh phát triển trên NodeJS sẽ không phải lựa chọn bây giờ
* Không nên sử dụng Node.js khi:
Trang 22- Xây dựng các ứng dụng hao tốn tài nguyên: Bạn đừng mơ mộng đến Node.js khi
bạn đang muốn viết một chương trình convert video Node.js hay bị rơi vào trường hợp thắt cổ chai khi làm việc với những file dung lượng lớn
- Một ứng dụng chỉ toàn CRUD: Node.js không nhanh hơn PHP khi bạn làm các
tác vụ mang nặng tính I/O như vậy Ngoài ra, với sự ổn định lâu dài của các webserver script khác, các tác vụ CRUD của nó đã được tối ưu hóa Còn Node.js?
Nó sẽ lòi ra những API cực cực kỳ ngớ ngẩn
- Khi bạn cần sự ổn định trong ứng dụng của bạn: Chỉ với 4 năm phát triển của
mình (2009-2013), version của Node.js đã là 0.10.15 (hiện tại tới thời điểm này là v0.10.35) Mọi API đều có thể thay đổi – một cách không tương thích ngược – hãy thật cẩn thận với những API mà bạn đang dùng, và luôn đặt câu hỏi: “Khi nó thay đổi, nó sẽ ảnh hưởng gì đến dự án của tôi?”
- Và quan trọng nhất: Bạn chưa hiểu hết về Node.js Node.js cực kỳ nguy hiểm
trong trường hợp này, bạn sẽ rơi vào một thế giới đầy rẫy cạm bẫy, khó khăn Với phần lớn các API hoạt động theo phương thức non-blocking/async việc không hiểu
rõ vấn đề sẽ làm cho việc xuất hiện những error mà thậm chí bạn không biết nó xuất phát từ đâu? Và mệt mỏi hơn nữa: Khi cộng đồng Node.js chưa đủ lớn mạnh, và sẽ
ít có sự support từ cộng đồng Khi mà phần lớn cộng đồng cũng không khá hơn bạn
là bao
* Nên sử dụng Node.js khi:
- Node.js thực sự tỏa sáng trong việc xây dựng RESTful API (json) Gần như
không có ngôn ngữ nào xử lý JSON dễ dàng hơn Javascript, chưa kể các API server thường không phải thực hiện những xử lý nặng nề nhưng lượng concurrent request thì rất cao Mà Node.js thì xử lý non-blocking Chẳng còn gì thích hợp hơn Node.js trong trường hợp này!
- Những ứng dụng đòi hỏi các giao thức kết nối khác chứ không phải chỉ có http
Với việc hỗ trợ giao thức tcp, từ nó bạn có thể xây dựng bất kỳ một giao thức custom nào đó một cách dễ dàng
- Những ứng dụng thời gian thực: Khỏi phải nói vì Node.js dường như sinh ra để
làm việc này!
- Những website stateful Node.js xử lý mọi request trên cùng một process giúp
cho việc xây dựng các bộ nhớ đệm chưa bao giờ đơn giản đến thế: Hãy lưu nó vào
Trang 23một biến global, và thế là mọi request đều có thể truy cập đến bộ nhớ đệm đó Caching sẽ không còn quá đau đầu như trước đây, và bạn có thể lưu cũng như chia
sẻ trạng thái của một client với các client khác ngay trong ngôn ngữ, chứ bạn không cần thông qua các bộ nhớ ngoài!
- Quan trọng nhất: Có yêu thích và muốn sử dụng nó hay không?
(Nội dung Nodejs được tham khảo trong phầm tài liệu số 2)
Trang 24CHƯƠNG 2: CÀI ĐẶT CHƯƠNG TRÌNH
2.1.2 Yêu cầu hệ thống Windows
• MongoDB dành cho Windows Server 2008 R2 edition : (Ví dụ: 2008R2)
chỉ chạy trên Windows Server 2008 R2, Windows 7 64-bit, và các phiên bản mới hơn của Windows Các phiên bản này tận dụng các cải tiến gần đây cho nền tảng Windows và không thể hoạt động trên các phiên bản cũ của Windows
• MongoDB dành cho Windows 64-bit : chạy trên bất kỳ phiên bản 64-bit
của Windows mới hơn so với Windows XP, bao gồm Windows Server 2008 R2 và Windows 7 64-bit
• MongoDB dành cho Windows 32-bit : hay trên bất kỳ phiên bản 32-bit của
Windows mới hơn so với Windows XP Phiên bản 32-bit của MongoDB chỉ được dành cho hệ thống cũ và để sử dụng trong thử nghiệm và phát triển hệ thống Phiên bản 32-bit của MongoDB chỉ hỗ trợ cơ sở dữ liệu nhỏ hơn 2GB
Trang 25Link cài đặt : “ https://www.mongodb.com/download-center#community ”
2.1.5 Cấu hình
- Từ file cài đặt của MongoDB, tạo một thư mục tên “data”, vào thư mục “data”
tạo một thư mục “db” Thư mục này có tác dụng chứa những dữ liệu mà chúng
ta tạo sau này
- Thiết lập đường dẫn đến thư mục “data” vừa mới tạo bằng cách chạy file
“mongod.exe” trong thư mục server trên CMD và trỏ tới thư mục “data” đã tạo
ở trên:
- Vào thư mục server, bấm tổ hợp phím Ctrl + Shift + Chuột phải vào thư mục
“bin”, Chọn “Open command window here” để mở chương trình console
* Khai báo đường dẫn thư mục chứa data:
- Gõ lệnh “mongod–dbpath D:\MongoDB\data”
Hình 2 1: Mở lệnh "mongod–dbpath D:\MongoDB\data"
- Nếu thành công, màn hình sẽ hiển thị như sau (Chú ý dòng chữ cuối là port 27017,
đây là port kết nối của MongoDB):
Hình 2 2: Kết quả sau khi chạy thành công với Port 27017
Trang 262.1.6 Những thao tác cơ bản với MongoDB
Trước khi bắt đầu code, ta cần mở cửa sổ cmd lên với đường dẫn vào file cài đặt MongoDB ban đầu
- Gõ lệnh “mongo” và bắt đầu viết code:
Hình 2 3: Gõ lệnh "mongo" khi khởi động mongoDB xong
- Muốn biết có tất cả bao nhiêu database (trong đây màn hình hiển thị 4 database):
Hình 2 4: Gõ câu lệnh "show dbs"
- Tạo một database có các collection (collection ~ table trong SQL)
Hình 2 5: Tạo database trong MongoDB
- Xóa một database nào đó
Hình 2 6: Xóa database
- Thêm 1 document vào collection “test” (document nằm trong collection)
Trang 27Hình 2 7: Thêm 1 document vào collection
- Thêm nhiều document vào collection “test”
Hình 2 8: Thêm nhiều document vào collection
- Hiển thị tất cả document trong collection “users”(hoặc db.users.find().pretty() để
hiển thị rõ hơn) :
Hình 2 9: Hiện thị tất cả các docment có trong collection
- Update “age” của người tên “Giang” trong collection thay bằng 24
Trang 28Hình 2 10: Update 1 document trong collection
- Xóa document có tên “giang”:
Link cài đặt là : https://git-scm.com/downloads
• Visual Studio Code
Trang 29Link cài đặt là : https://code.visualstudio.com/download
2.2.3 Kết nối NodeJS với MongoDB sử dụng Mongoose [4]
Bước 1: Tạo một Folder có tên “NODEJS” ngoài desktop
Bước 2: Mở Visual Studio Code => Thêm một thư mục project tên “myMongoose”
đường dẫn tới Folder “NODEJS” phía trên
Bước 3: Tải thư viện Mongoose
a Khởi chạy MongoDB lên
b Mở CMD lên, kéo đường dẫn tới thư mục “myMongoose” phía trên
c Tiếp tục câu lệnh “npm init -y” để tự động trả lời “Yes” của tất cả các tùy chọn
d Đã có file package.json
e Tiếp tục câu lệnh “npm install –save mongoose” Xong
Bước 4: Tạo một file để cấu hình cho Mongoose kết nối với Database Server
(myMongoose)
a Mở Visual Studio Code
b Chuột phải vào “myMongoose” chọn New File
c Đặt tên là db.js
Bước 5: Kết nối Mongoose với MongoDB
a Mở Visual Studio Code
b Vào file “db.js” và thực hiện các câu lệnh kết nối
c Gọi thư viện mongoose:
const mongoose = require('mongoose')
d Kết nối:
mongoose.connect('mongodb://localhost/27017/demo')
e Tạo Schema (tạo cấu trúc cho model):
const userSchema = new mongoose.Schema({
name: String,
age: Number
})
Trang 30f Tạo model từ Schema đã có:
const user = mongoose.model('user', userSchema)
Bước 6: Chạy file chúng ta vừa code bằng cách:
a Mở CMD kéo đường dẫn tới thư mục “demo”
b Thực hiện câu lệnh: “node db.js” (chạy tập tin db.js chứa code)
Bước 7: Mở mongodb lên để kiểm tra kết nối có thành công hay không
Hình 2 12: Kết nối thành công với MongoDB
• Kết nối thành công, đã có Collection “demo” và Document…
(Nôi dung thao tác với mongodb được tham khảo trong tài liệu tham khảo số 1)
2.3 CÀI ĐẶT ANGULAR:
Điều kiện: Đã cài đặt Nodejs, cài đặt các modul cần thiết
Trang 31Lần lượt thực hiện từng bước sau:
Hình 2 13:Các bước thiết lập project angular
Bước 1: Tạo một Folder tên “Angular” ngoài màn hình desktop
Bước 2: Tiếp theo vẫn trên cửa sổ dòng lệnh bạn chạy câu lệnh sau đây để cài đặt Angular CLI: npm install -g @angular/cli
Bước 3: Sau khi cài đặt xong Angular CLI chạy câu lệnh ng new demo-angular
“demo-angular” chính là tên của project
Hình 2 14: Cấu trúc file của một project angular
Trang 32Bước 4: Chạy tiếp câu lệnh “npm start” hoăc “ng serve” để khởi động angular
Hình 2 15: Khởi chaỵ projectangular
• Tiến trình cài đặt Angular hoàn tất
2.4 CÀI ĐẶT POSTMAN TEST API:
Postman: Là công cụ phổ biến được sử dụng để thử nghiệm api.Api viết tắt của
application Programming Interface cho phép ứng dụng phần mềm giao tiếp với nhau
thông qua các lệnh gọi api
Bước 1: Truy cập trang https://www.getpostman.com/downloads/ và chọn nền tảng muốn tải về như cho Mac, Windows hoặc Linux Kích Download
Trang 33Hình 2 16: Download postman về máy tính
Bước 2: File tải về sẽ được hiển thị ở dưới cửa sổ của trình duyệt Khi quá trình tải về
hoàn tất, kích nút Run
Hình 2 17: Sau khi download xong
Click run để cài đặt
Bước 3: Màn hình sau khi cài đặt xong
Hình 2 18: Giao diện của postman
Cách sử dụng Postman
1.HTTP Request – Click vào đây sẽ hiển thị danh sách thả xuống với các request
khác nhau như GET, POST, COPY, DELETE, v.v Trong thử nghiệm, các yêu cầu
được sử dụng phổ biến nhất là GET và POST
2.Request URL – Còn được gọi là điểm cuối (endpoint), đây là nơi bạn sẽ xác định
liên kết đến nơi API sẽ giao tiếp
Trang 343.Params – Đây là nơi bạn sẽ viết các tham số cần thiết cho một request, ví dụ như
các cặp key – value
4.Authorization – Để truy cập API, cần được cấp quyền Nó có thể ở dạng tên người
dùng và mật khẩu, bearer token, v.v
5.Headers – Bạn có thể thiết lập các header như nội dung kiểu JSON tùy theo cách tổ
chức của bạn
6.Body – Đây là nơi chúng ta có thể tùy chỉnh chi tiết trong request thường được sử
dụng trong request POST
Trang 35CHƯƠNG 3: BÀI ĐẶC TẢ WEB THƯƠNG MAI ĐIỆN TỬ
3.1 Giới thiệu
Ngày nay công nghệ ngày càng phát triển sự giao dịch qua lại giữa con người cũng dễ dàng nhanh chóng hơn.Mục tiêu của website resale là sẽ trở thành thị trường mua bán trực tuyến.Mục tiêu cho phép người dùng và người bán kết nối và giao dịch an toàn ,dễ dàng trong một môi trường thuận lợi và rõ ràng.Tất cả các hàng mục điều có trên website,cho dù
là dành cho mua,bán,tìm kiếm nhà cửa ,xe ô tô,tuyền dụng ,đồ điện tử đã qua sử dụng,vật nuôi,và cả dịch vụ gia đình.Mục tiêu của website là cung cấp cho người dùng một nền tảng trực tuyến để sử dụng một cách đơn giản,tiện lợi không cần rắc rối phức tạp.Không cần đăng ký và ai cũng có thể tìm kiếm và đăng các thông tin liên quan về danh mục sản phẩm cần bán khác nhau,từ bất động sản ,xe ô tô và còn nhiều hơn nữa
Mỗi người trong chúng ta đều có những sản phẩm có thể bán được.bên cạnh việc giữ những sản phẩm không cần đến ở nhà, bất kì ai cũng có thể kiếm thêm tiền bằng việc bán nó cho người khác thông qua thị trường mua bán trực tuyến này
3.2 Mô tả chức năng ứng dụng
3.2.1.Mô tả phân tích
a Mô tả chức năng ứng dụng của website
⁕ Thao tác đối với người dùng chưa đăng nhập hoặc chưa đăng kí tài khoản
Người dùng không cần đăng nhập vẫn có thể xem được thông tin danh sách sản phẩm, chi tiết một sản phẩm ,thông tin người bán từ những thông tin về sản phẩm người bán SĐT liên hệ người dùng có thể liên hệ trực tiếp với người bán để mua sản phẩm.Sau khi đã trao đổi được với người bán, người mua có thể quyết định đặt hàng.Người mua lựa chọn cách thức giao dịch (tùy vào thỏa thuận của người mua và người bán)
• Đọc và xem thông tin, quy định của website
• Người dùng có thể vào chi tiết một sản phẩm để xem số người quan tâm bình luận về sản phẩm để từ đó có thể quyết định có nên mua sản phẩm đó hay không
• Thực hiện thao tác tạo mới một tài khoản.Khi tạo một tài khoản mới phải chờ quản trị xác thực tài khoản đó mới được kích hoạt
• Sau khi thực hiện đăng ký tài khoản thì email dùng để đăng ký sẽ nhận được thông báo
Trang 36⁕ Thao tác đối với người dùng đã đăng ký tài khoản và thực hiện đăng nhập
• Có sẵn đầy đủ các thao tác khi mà người dùng chưa thực hiện đăng nhập
• Có thể thực hiện đăng chào bán một sản phẩm bất kì sản phẩm.Viết bài đăng liên quan đến sản phẩm (mô tả sản phẩm, hình ảnh, giá và thông tin liên hệ của người bán) theo đúng “Loại tin”, “Danh mục” … mà người bán muốn đăng.Ban quản trị
sẽ tiến hành kiểm duyệt nội dung đăng tin trong thời gian 24h kể từ khi người bán đăng tin.Sau khi kiểm duyệt tin sẽ được hiện thị lên website
• Thực hiện mình luận một sản phẩm bất kỳ
• Sau khi người dùng đăng một sản phẩm thì cũng sẽ nhận được email thông báo
b Mô tả chức năng website quản trị
⁕ Tao tác quản trị đối với người dùng
• Quản lý danh sách sản phẩm đã đăng bởi chính người dùng, thêm sửa xóa sản phẩm
• Xem thông tin tài khoản thực hiện thay đổi mật khẩu
⁕ Tao tác quản trị đối với admin
• Có đầy đủ thao tác quản trị của người dùng
• Quản lý danh sách người dùng thực hiện thêm sửa xóa một người dùng
Người dùng (chưa có tài khoản) đây là đối tượng khách hàng vãng lai, đối tượng chỉ có nhu cầu mua sản phẩm , bị hạn chế một số quyền trên website chính
Trang 37• Quản trị
Là đối tượng có đầy đủ các quyền của website chính cũng như website quản trị.Là người nắm bắt được thông tin, số lượng sản phẩm , và các người dùng khác
Trang 38Hình 3 1: Xác định các Actor
* Xác định các use case
• Người dùng (Chưa có tài khoản)
Đăng ký
Xem thông tin về sản phẩm, chi tiết sản phẩm ,thông tin website
Tìm kiếm, lọc sản phẩm theo tên, địa chỉ hoặc danh mục
• Người dùng (Đã có tài khoản)
Tìm kiếm, lọc sản phẩm theo tên, địa chỉ hoặc danh mục
Xem thông tin tài khoản
Xóa sản phẩm đã đăng
• Quản trị
Có tất cả quyền của người dùng
Thay đổi mật khẩu
Xác thực tài khoản mới đăng ký
Xác thực bài đăng mới
Xóa tài khoản
Thêm tài khoản mới
Tìm kiếm , tài khoản hoặc sản phẩm
Thêm sản phẩm mới
Thêm danh mục mới
Xóa danh mục đã có
Trang 393.3 Thiết kế cơ sở dữ liệu
3.3.1 Cơ sở dữ liệu thể hiện trên ERD:
Hình 3 2: Mô hình ERD database 3.3.2 Mô tả ràng buộc:
User (user_id, email, password, fullName, phoneNumber, userType, avatar,
Trang 401 user_id String Mỗi tài khoản
đều có một id riêng để phân biệt
Khó
a chín
h
dùng là tài khoản khi đăng nhập.Mỗi tài khoản có một email khác nhau
là user(người dùng bình thường) và admin (quản trị
hệ thống)
có người có một ảnh đại diện
7 authentication Boolean Xác nhận tài
khoản đã được kích hoạt hay chưa kích hoạt