TRƯỜNG ĐẠI HỌC LẠC HỒNG
KHOA CÔNG NGHỆ THÔNG TIN
-----
----
BÁO CÁO
NGHIÊN CỨU KHOA HỌC
ĐỀ TÀI:
HỆ THỐNG CUNG CẤP DỊCH VỤ TÌM
KIẾM NHÓM THỢ THEO KHU VỰC TRÊN
NỀN TẢNG WEBSITE
LÊ PHƯỚC KHỬ
BIÊN HÒA, THÁNG 11/2018
TRƯỜNG ĐẠI HỌC LẠC HỒNG
KHOA CÔNG NGHỆ THÔNG TIN
----- -----
BÁO CÁO
NGHIÊN CỨU KHOA HỌC
ĐỀ TÀI:
HỆ THỐNG CUNG
CẤP DỊCH VỤ TÌM
KIẾM NHÓM THỢ THEO KHU VỰC TRÊN
NỀN TẢNG
WEBSITE
Sinh viên thực hiện: LÊ PHƯỚC KHỬ
Giáo viên hướng dẫn: Th.S NGUYỄN MINH PHÚC
BIÊN HÒA, THÁNG 11/2018
I
LỜI CẢM ƠN
Em xin chân thành cám ơn tất cả các giảng viên trường Đại Học Lạc Hồng,
các thầy cô khoa Công Nghệ Thông Tin đã giảng dạy và hướng dẫn chúng em
trong suốt thời gian chúng em theo học tại trường.
Em xin gửi lời cảm ơn đến Th.S Nguyễn Minh Phúc là giáo viên đã trực tiếp
hướng dẫn tận tình để em hoàn thành đề tài nghiên cứu khoa học này.
Ngoài ra em xin cám ơn cô Phan Thị Hường được khoa phân là giáo viên
phản biện đã đóng góp rất nhiều để hoàn thiện đề tài cũng như là báo cáo toàn văn.
Cám ơn thầy Tạ Nguyễn là giáo viên chủ nhiệm lớp 14SE111 và các bạn trong lớp
cùng toàn thể gia đình và người thân đã giúp đỡ, động viên chúng em trong quá
trình thực hiện đề tài này.
Em xin cám ơn các thầy, các cô trong khoa Công Nghệ Thông Tin đã có
những ý kiến đóng góp trong các buổi báo cáo tiến độ.
Với vốn kiến thức còn hạn chế cùng những điều kiện khách quan không cho
phép, đề tài của em khó tránh khỏi những thiếu sót cũng như chưa đáp ứng đầy đủ
các yêu cầu. Do đó em hy vọng tiếp tục nhận được những ý kiến đóng góp và
hướng dẫn của quý thầy cô để đề tài của em được hoàn thiện hơn.
Sau cùng, em xin kinh chức quý thầy cô trong Khoa Công Nghệ Thông Tin
thật dồi dào sức khỏe để tiếp tục sứ mệnh cao đẹp là truyền đạt những tri thức quý
báu cho thế hệ mai sau.
Em xin chân thành cảm ơn.
Biên Hòa, tháng 11 năm 2018
Sinh viên thực hiện
Lê Phước Khử
II
LỜI CAM ĐOAN
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi, các tài liệu và
kết quả nghiên cứu trong đồ án là trung thực.
Biên Hòa, tháng 11 năm 2018
Sinh viên thực hiện
Lê Phước Khử
III
MỤC LỤC
LỜI CẢM ƠN ................................................................................................................................ I
LỜI CAM ĐOAN .......................................................................................................................... II
MỤC LỤC .................................................................................................................................... III
DANH MỤC BẢNG ................................................................................................................... VI
DANH MỤC HÌNH .................................................................................................................... VI
PHẦN MỞ ĐẦU ............................................................................................................................ 1
1. Lý do chọn đề tài ............................................................................................... 1
2. Tình hình nghiên cứu ......................................................................................... 1
2.1. Ngoài nước...............................................................................................1
2.2. Trong nước...............................................................................................1
3. Mục tiêu nghiên cứu .......................................................................................... 1
4. Phương pháp nghiên cứu ................................................................................... 2
5. Những vấn đề mà đề tài chưa thực hiện được ................................................... 2
6. Kết cấu của đề tài............................................................................................... 2
Chương 1 : TỔNG QUAN LÝ THUYẾT ............................................................... 3
1.1. Sơ đồ liên quan các thành phần đã sử dụng trong hệ thống ........................ 3
1.2. Giới thiệu về Node.JS và framework Express ............................................ 3
1.2.1. Node.js là gì?........................................................................................ 3
1.2.2. Giới thiệu về framework Express ........................................................ 5
1.3. Giới thiệu về cơ sở dữ liệu MySQL ............................................................ 5
1.4. Giới thiệu NPM ........................................................................................... 6
1.5. RESTful Api là gì? ...................................................................................... 6
1.6. Giới thiệu một số module và thư viện đã sử dụng trong đề tài ................... 6
1.6.1. Thư viện Socket.io ............................................................................... 6
1.6.2. Thư viện Angularjs .............................................................................. 7
1.6.3. JSON Web Token ................................................................................ 7
1.6.4. Module Nodemailer ............................................................................. 8
1.6.5. Module Multer và fs............................................................................. 8
1.6.6. Module Dotenv .................................................................................... 8
1.7. Tiểu kết ........................................................................................................ 8
Chương 2 : PHÂN TÍCH THIẾT KẾ HỆ THỐNG .............................................. 10
2.1. Khảo sát hiện trạng .................................................................................... 10
2.1.1. Tình trạng tìm kiếm thợ trước đây ..................................................... 10
2.1.2. Hệ thống ra đời với yêu cầu ............................................................... 10
2.2. Sơ đồ hệ thống ........................................................................................... 10
2.2.1. Mô hình tổng quát .............................................................................. 10
IV
2.2.2. Mô hình use case của thợ ................................................................... 11
2.2.2.1. Đổi mật khẩu .............................................................................. 11
2.2.2.2. Xem trang cá nhân ..................................................................... 11
2.2.2.3. Cập nhật thông tin cá nhân ........................................................ 12
2.2.2.4. Đăng hồ sơ mới .......................................................................... 12
2.2.2.5. Xóa hồ sơ ................................................................................... 13
2.2.2.6. Xem tin nhắn đã gửi................................................................... 13
2.2.2.7. Gửi một tin nhắn ........................................................................ 13
2.2.2.8. Cập nhật trạng thái giao dịch ..................................................... 14
2.2.3. Mô hình use case của khách ............................................................... 15
2.2.3.1. Tìm kiếm theo danh mục ........................................................... 15
2.2.3.2. Tìm kiếm theo khu vực .............................................................. 15
2.2.3.3. Tạo mới một giao dịch ............................................................... 16
2.2.4. Mô hình use case của admin .............................................................. 16
2.2.4.1. Tạo mới một danh mục .............................................................. 16
2.2.4.2. Chỉnh sửa một danh mục ........................................................... 17
2.2.4.3. Cập nhật trạng thái tài khoản ..................................................... 17
2.3. Mô hình cơ sở dữ liệu................................................................................ 18
2.3.1. Sơ đồ cơ sở dữ liệu............................................................................. 18
2.3.2. Chức năng của từng bảng và thuộc tính ............................................. 18
Chương 3 : XÂY DỰNG HỆ THỐNG HỖ TRỢ TÌM KIẾM NHÓM THỢ THEO
KHU VỰC NỀN TẢNG WEBSITE .................................................................... 21
3.1. Server API của hệ thống hỗ trợ tìm kiếm nhóm thợ theo khu vực ........... 21
3.1.1. Giới thiệu chung về Web Server API của hệ thống hỗ trợ tìm kiếm
nhóm thợ ........................................................................................................... 21
3.1.1.1. Giới thiệu ................................................................................... 21
3.1.1.2. Phân quyền người dùng ............................................................. 21
3.1.2. Cài đặt môi trường lập trình và một số module cần thiết .................. 21
3.1.2.1. Môi trường Node.js và NPM ..................................................... 21
3.1.2.2. Cài các Module cần thiết sử dụng phần mềm NPM .................. 21
3.1.3. Kết nối và truy vấn dữ liệu giữa Node.js và MySql .......................... 22
3.1.3.1. Kết nối với database Mysql ....................................................... 22
3.1.3.2. Truy vấn dữ liệu ......................................................................... 23
3.1.4. Chức năng của một số router có trong API ........................................ 24
3.2. Xây dựng Server Websocket sử dụng thư viện socket.io để làm ứng dụng
nhắn tin thời gian thực ................................................................................. 26
3.2.1. Giới thiệu chung về Server Websocket.............................................. 26
V
3.2.2. Cài đặt một số module cần thiết ......................................................... 26
3.2.3. Chức năng của từng sự kiện trong Socket.io ..................................... 26
3.3. Giao diện Front-end sử dụng thư viện Angular.js ..................................... 28
3.3.1. Giới thiệu ........................................................................................... 28
3.3.2. Giao diện Front-end của thợ .............................................................. 28
3.3.2.1. Đăng ký ...................................................................................... 28
3.3.2.2. Đăng nhập .................................................................................. 28
3.3.2.3. Trang cá nhân............................................................................. 29
3.3.2.4. Hồ sơ .......................................................................................... 30
3.3.3. Giao diện Front-end của khách .......................................................... 32
3.3.4. Giao diện Front-end của Admin ........................................................ 34
3.3.4.1. Trang tổng quan ......................................................................... 34
3.3.4.2. Trang duyệt hồ sơ ...................................................................... 34
3.3.4.3. Danh mục ................................................................................... 35
3.3.4.4. Quản lý ....................................................................................... 36
KẾT LUẬN .................................................................................................................................. 39
TÀI LIỆU THAM KHẢO ............................................................................................................ 40
VI
DANH MỤC BẢNG
Bảng 2.1 Chức năng của từng bảng trong database. ...................................18
Bảng 3.1 Tên và một số chức năng của API ................................................24
DANH MỤC HÌNH
Hình 1.1 Sơ đồ liên quan các thành phần. .....................................................3
Hình 1.2 Mô hình xử lý request của Node.js. ................................................4
Hình 1.3 Mô hình Framework Express. .........................................................5
Hình 1.4 Mô hình giao tiếp giữa Client và Server. ........................................6
Hình 1.5 Cấu trúc của một chuỗi JSON Web Token. ....................................8
Hình 2.1 Mô hình use case tổng quát. ..........................................................10
Hình 2.2 Mô hình use case của thợ. .............................................................11
Hình 2.3 Mô hình use case của khách..........................................................15
Hình 2.4 Mô hình use case của admin. ........................................................16
Hình 2.5 Mô hình cơ sở dữ liệu của hệ thống hỗ trợ tìm thợ. .....................18
Hình 3.1 Màn hình console hiển thị thông tin phiên bản của Node.js và NPM.
...............................................................................................................................21
Hình 3.2 Màn hình console khi gõ lệnh npm init. .......................................22
Hình 3.3 Thư mục node_modules chứa module đã cài đặt trong câu lệnh npm
install. ....................................................................................................................22
Hình 3.4 Server trả về dữ liệu dưới dạng JSON của tài khoản 100000001. 24
Hình 3.5 Giao diện đăng ký. ........................................................................28
Hình 3.6 Giao diện đăng ký khi bị lỗi. .........................................................28
Hình 3.7 Giao diện đăng nhập. ....................................................................28
Hình 3.8 Giao diện đăng nhập khi bị lỗi sai tài khoản hoặc mật khẩu. .......28
Hình 3.9 Trang cá nhân của một tài khoản. .................................................29
Hình 3.10 Giao diện Popup hiển thị lịch sử đã giao dịch ............................29
Hình 3.11 Giao diện cập nhật thông tin cá nhân. .........................................30
Hình 3.12 Giao diện đăng hồ sơ. .................................................................30
Hình 3.13 Giao diện danh sách hồ sơ đợi duyệt. .........................................30
Hình 3.14 Giao diện chỉnh sửa hồ sơ. ..........................................................31
Hình 3.15 Giao diện danh sách các hồ sơ đã được admin duyệt. ................31
Hình 3.16 Giao diện chat thời gian thực giữa thợ và khách. .......................32
Hình 3.17 Giao diện đánh giá của một giao dịch.........................................32
VII
Hình 3.18 Giao diện tìm kiếm thợ ...............................................................33
Hình 3.19 Giao diện khi đã được chọn một danh mục. ...............................33
Hình 3.20 Thông tin của một thợ hiển thị khi được chọn. ...........................33
Hình 3.21 Giao diện đăng nhập của Admin .................................................34
Hình 3.22 Giao diện trang tổng quan. ..........................................................34
Hình 3.23 Giao diện duyệt hồ sơ của thợ.....................................................35
Hình 3.24 Giao diện Popup khi nhấn xóa một hồ sơ. ..................................35
Hình 3.25 Giao diện chỉnh sửa danh mục ....................................................35
Hình 3.26 Giao diện cập nhật một danh mục...............................................36
Hình 3.27 Popup hiển thị danh sách các hồ sơ trong một danh mục. ..........36
Hình 3.28 Danh sách hiển thị tài khoản của thợ. .........................................37
Hình 3.29 Giao diện quản lý danh sách tài khoản khách. ............................37
Hình 3.30 Giao diện danh sách các giao dịch kèm theo trạng thái. .............38
1
PHẦN MỞ ĐẦU
1. Lý do chọn đề tài
Trong xã hội hiện đại ngày nay, GPS đang là một hướng đi có tiềm năng rất
lớn mang lại các dịch vụ hữu ích và giá trị cao, Có thể dẫn chứng cho xu thế này
đó là việc đã và đang xuất hiện. Ví dụ như: các ứng dụng hỗ trợ tìm đường, tìm
người giúp việc, tìm kiếm địa điểm ăn uống, tìm bạn bè, các hệ thống chỉ đường,
theo dõi cho taxi, xe tải...
Trước đây, việc tìm kiếm ra nơi để sửa thiết bị hư hỏng tốn rất nhiều thời
gian và công sức và chủ yếu việc tìm kiếm đa phần dựa trên truyền tai hoặc đi dọc
các con phố để tìm ra địa điểm sửa thiết bị hư hỏng. Nhận thức được những vấn
đề trên tác giả đã chọn đề tài nghiên cứu khoa học “Hệ thống cung cấp dịch vụ hỗ
trợ tìm kiếm nhóm thợ theo khu vực trên nền tảng Website” để đơn giản hơn về
việc tìm ra thợ sửa thiết bị.
2. Tình hình nghiên cứu
2.1. Ngoài nước
Nhận thấy được những hiệu quả to lớn từ GPS, các hãng phần mềm trên thế
giới đã tích cực đầu tư nghiên cứu nâng cao chất lượng và đã làm ra rất nhiều ứng
dụng từ GPS. Điển hình như Google là một trong những công ty đi tiên phong
trong việc áp dụng GPS. Họ đã làm rất nhiều ứng dụng về GPS 1 trong số đó là
Google Map với rất nhiều tính năng điển hình các tính năng mới hiện nay như hiển
thị tình trạng giao thông, chỉ đường cho xe máy, ô tô ...
2.2. Trong nước
Ở Việt Nam với sự phát triển chóng mặt của công nghệ. Một số ứng dụng áp
dụng GPS đã được đưa vào sử dụng. Nhằm mục đích giúp con người quản lý vị trí
hiệu quả, Chính vì thế rất nhiều công ty, cá nhân đã ra đời một loạt sản phẩm ứng
dụng dựa trên nền GPS như:
Ứng dụng https://zalo.me/pc nhắn tin và gọi điện miễn phí hoạt động trên
cả 2 nền tảng là máy tính và di động có một chức năng tìm kiếm bạn xung
quanh nhờ vào ứng dụng của GPS.
Hệ thống https://www.ohanaliving.vn/ với chức năng đăng và tìm phòng
trọ, bạn trọ trong một khu vực. Người dùng nhờ vào ứng dụng có thể tìm
kiếm phòng trọ giá rẻ và vị trí thuận lợi với nhu cầu bản thân,...
Hệ thống https://www.jupviec.vn/ với chức năng tìm kiếm và đặt dịch vụ
người giúp việc nhờ vào ứng dụng của GPS.
3. Mục tiêu nghiên cứu
Xây dựng được hệ thống giúp khách có thể tìm được thợ theo từng ngành
nghề hoặc có thể theo từng khu vực và hiển thị thông tin thợ lên bản đồ, sau đó
khách sẽ nhắn tin trao đổi trực tiếp với thợ qua ứng dụng nhắn tin thời gian thực
của hệ thống.
2
4. Phương pháp nghiên cứu
Tìm hiểu về Javascript, tạo ứng dụng web dựa trên nền tảng Node.js và
framework Express.
Nghiên cứu về cách sử dụng tiêu chuẩn RESTful API dùng trong việc thiết kế
các thiết kế API.
Sử dụng Socket.io dùng làm một ứng dụng chat thời gian thực.
Dùng AngularJS tạo nên Website Single Page Application.
Sử dụng api của google map hiển thị thông tin thợ.
Dùng json web token để mã hóa thông tin cần thiết.
5. Những vấn đề mà đề tài chưa thực hiện được
Chưa đưa ứng dụng vào thực tiễn.
Chưa lấy được vị trí thợ theo thời gian thực.
6. Kết cấu của đề tài
Báo cáo được chia làm ba phần: phần mở đầu, phần nội dung và phần kết
luận.
Phần mở đầu
Nêu lý do chọn đề tài, tổng quan tình hình phát triển, mục tiêu nghiên cứu đề
tài, phương pháp nghiên cứu cũng như những đóng góp mới của đề tài. Bên cạnh
đó cũng chỉ ra mặt hạn chế mà đề tài chưa thực hiện được để giúp mọi người có
cái nhìn rõ hơn.
Phần nội dung chính: gồm 3 chương
Chương 1: Tổng quan lý thuyết
Chương này giới thiệu về môi trường Node.js, Framework Express, giải
thích NPM là gì?, quá trình hoạt động của một Web API sử dụng tiêu chuẩn
RESTfull API, Đồng thời sẽ giới thiệu về socket.io quá trình hoạt động của nó
và một số module mà tác giả đã sử dụng trong đề tài cùng với chức năng của
những thư viện đó.
Chương 2: Phân tích thiết kế hệ thống
Trong chương này tác giả trình bày về mô hình use case và cơ sở dữ liệu
của hệ thống.
Chương 3: Xây dựng Hệ thống hỗ trợ tìm kiếm nhóm thợ theo khu vực
nền tảng website.
Trong chương này tác giả trình bày một số chức năng của web api, xây dựng
một websocket, giao diện của website hệ thống tìm thợ và sử dụng Framework
Angular.js của thợ, khách và admin.
Phần kết luận
Đưa ra những kết luận và kiến nghị về chương trình đã xây dựng.
3
Chương 1 : TỔNG QUAN LÝ THUYẾT
1.1. Sơ đồ liên quan các thành phần đã sử dụng trong hệ thống
Hình 1.1 Sơ đồ liên quan các thành phần.
①. AngularJS tạo ra một yêu cầu đến server qua giao thức http/https.
②. Server Node.js phân tích yêu cầu do AngularJS gửi lên sau đấy chuyển yêu
cầu sang ExpressJS.
③. ExpressJS lấy dữ liệu database MySQL
④. MySQL sẽ trả về dữ liệu cần lấy cho ExpressJS
⑤. NodeJS trả về dữ liệu dưới dạng JSON được Front-end AngularJS yêu cầu
trước đó.
⑥. AngularJS nhận dữ liệu và tiền hành hiển thị dữ liệu nhận được ra giao diện.
1.2. Giới thiệu về Node.JS và framework Express
1.2.1. Node.js là gì?
Trước giờ, JavaScript đã luôn được sử dụng ở phía client, tức là bên phía
của khách truy cập trình duyệt trang web. Các mã JavaScript này được chạy bởi
trình duyệt của client (Firefox, Chrome, IE, v.v …) và thực hiện các hành động
trên trang web. Tuy nhiên, Node.js cung cấp một môi trường phía máy chủ , cho
phép chúng ta sử dụng ngôn ngữ JavaScript để tạo các trang web sử dụng
framework Express.
Như trên trang chủ của Node.js có viết rõ: “Node.js là một JavaScript runtime
được build dựa trên Chrome’s V8 JavaScript engine. Node.js sử dụng mô hình
event-driven, non-blocking I/O khiến nó trở nên nhẹ và hiệu quả.”.
Như vậy, có thể nói Node.js không phải là Framework hay CMS gì cả, cũng
không phải là một ngôn ngữ lập trình mới bởi nó là sự kết hợp giữa 2 ngôn ngữ
lập trình C++ và JavaScript (do được xây dựng dựa trên nền tảng V8 này), mà nó
chỉ là một môi trường để thực thi code JavaScript trên server. vì được biên dịch
trực tiếp đến mã máy gốc nên về mặt tốc độ xử lý thì rất nhanh.[1]
4
Hình 1.2 Mô hình xử lý request của Node.js.
Node.js sử dụng cơ chế hướng sự kiện, mô hình giao tiếp non-blocking I/O
cho nên làm cho ứng dụng nhẹ mà hiệu quả, vô cùng hoàn hảo cho các ứng dụng
thời gian thực. Một đặc điểm nữa là do sử dụng JavaScript nên Node.js có thể chạy
trên nhiều nền tảng hệ điều hành khác nhau (Windows, Linux, MacOS…) và trên
mọi loại thiết bị phân tán.
Mỗi function trong Node.js là bất đồng bộ. Vì vậy, mọi thứ bình thường kẹt
trong thread thì giờ đây được thực thi dưới background.
Ngoài ra, Node.js chứa một thư viện built-in cho phép các ứng dụng hoạt
động như một Webserver mà không cần cài đặt thêm các phần mềm như Nginx,
Apache hoặc IIS để hỗ trợ. Thêm nữa, Node.js còn cung cấp rất nhiều thư viện bổ
sung (module) hữu ích, vì thế bạn sẽ không phải bắt đầu xây dựng các ứng dụng
của bạn từ con số 0 nữa.[2]
Ưu điểm
-
Học 1 ngôn ngữ javascript dùng được cả back-end và front-end.
-
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.
-
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 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 tốt.
-
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.
-
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.
Nhược điểm
5
-
Ứng dụng nặng tốn tài nguyên.
1.2.2. Giới thiệu về framework Express
Hình 1.3 Mô hình Framework Express.
Express là một framework giành cho Node.js. Nó cung cấp cho chúng ta rất
nhiều tính năng để tạo ra một trang web.
Express hỗ trợ các phương thức HTTP và midleware tạo ra môt API dễ sử
dụng. Có thể tổng hợp một số chức năng chính của express như sau:
-
Thiết lập các lớp trung gian để trả về các HTTP request.
-
Định nghĩa router cho phép 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ố.[4]
1.3. Giới thiệu về cơ sở dữ liệu MySQL
MySQL là một chương trình dùng để quản lý hệ thống cơ sở dữ liệu, cơ sở
dữ liệu là một hệ thống lưu trữ thông tin, là một hệ thống được sắp xếp, phân lớp
rõ ràng ngăn nắp những thông tin mà mình lưu trữ. Do đó bạn có thể truy cập lấy
dữ liệu một cách dễ dàng, MySQL hỗ trợ hầu hết các ngôn ngữ phổ biến hiện nay
kể cả Node.js cũng không phải là ngoại lệ.[8]
Trong đề tài này tác giả sử dụng cơ sở dữ liệu MySQL vì nó miễn phí để sử
dụng, nhiều lập trình viên sử dụng đặc biệt là sử dụng để xây dựng một website,
hỗ trợ nhiều nền tảng và rất tiện dụng.
Ưu điểm
-
MySQL rất nhanh, đáng tin cậy, và rất dễ sử dụng.
-
Sử dụng cú pháp SQL tiêu chuẩn.
-
Là mã nguồn mở nên hoàn toàn miễn phí khi sử dụng.
Nhược điểm
-
MySQL có thể bị khai thác để chiếm quyền điều khiển.
-
Không được tích hợp để sử dụng cho các hệ thống lớn. Ví dụ như ngân
6
hàng, các công ty lớn cần quản lý lượng dữ liệu khổng lồ.
1.4. Giới thiệu NPM
NPM viết tắt của Node Package Manager là một công cụ (chương trình) quản
lý các thư viện lập trình Javascript cho Node.js, công cụ này là thật sự cần thiết
cho thế giới mã nguồn mở.
Trong cộng đồng Javascript, các lập trình viên chia sẻ hàng trăm nghìn các
đoạn code giúp cho các dự án mới tránh phải viết lại các thành phần cơ bản, các
thư viện lập trình hay thậm chí cả các framework. Mỗi đoạn code này có thể phụ
thuộc vào rất nhiều các mã nguồn mở khác, thật may mắn khi các công cụ quản lý
thư viện ra đời, nếu không sẽ mất rất nhiều công sức trong việc quản lý các thư
viện này.
1.5. RESTful Api là gì?
REST là viết tắt của Representational State Transfer. REST là một loạt hướng
dẫn và dạng cấu trúc dùng cho việc chuyển đổi dữ liệu.
API là viết tắt của Application Programming Interface, phương thức kết nối
với các thư viện và ứng dụng khác.
RESTful API là một tiêu chuẩn dùng trong việc thết kế các thiết kế API cho
các ứng dụng web để quản lý các resource. RESTful là một trong những kiểu thiết
kế API được sử dụng phổ biến nhất ngày nay.
Trọng tâm của Rest quy định cách sử dụng các HTTP method (như GET,
POST, PUT, DELETE...) và cách định dạng các URL cho ứng dụng web để quản
lý các resource có trong đề tài.
Hình 1.4 Mô hình giao tiếp giữa Client và Server.
1.6. Giới thiệu một số module và thư viện đã sử dụng trong đề tài
1.6.1. Thư viện Socket.io
Socket.io là công cụ hỗ trợ xây dựng một ứng dụng realtime, giao tiếp hai
chiều giữa client và server bằng cách sử dụng một TCP socket để tạo một kết nối
hiệu quả và ít tốn kém. Mặc dù được thiết kế để chuyên sử dụng cho các ứng dụng
web, lập trình viên vẫn có thể đưa chúng vào bất kì loại ứng dụng nào. Socket.io
cho phép các kênh giao tiếp song song hai chiều và hiện đã được hỗ trợ trong nhiều
trình duyệt (Firefox, Google Chrome và Safari).[6]
Dữ liệu truyền tải thông qua giao thức HTTP (thường dùng với kĩ thuật Ajax)
7
chứa nhiều dữ liệu không cần thiết trong phần header. Một header request/response
của HTTP có kích thước khoảng 871 byte, trong khi với Websocket, kích thước
này chỉ là 2 byte (sau khi đã kết nối). Vậy giả sử bạn làm một ứng dụng game có
thể tới 10,000 người chơi đăng nhập cùng lúc, và mỗi giây họ sẽ gửi/nhận dữ liệu
từ server. Hãy so sánh lượng dữ liệu header mà giao thức HTTP và WebSocket
trong mỗi giây:
-
HTTP: 871 x 10,000 = 8,710,000 bytes = 69,680,000 bits per second (66
Mbps)
-
WebSocket: 2 x 10,000 = 20,000 bytes = 160,000 bits per second (0.153
Kbps)
Tác giả sử dụng Socket.io trong đề tài này để viết một module chat realtime
giữa thợ và khách.
1.6.2. Thư viện Angularjs
AngularJS là một framework phát triển dựa trên Javascript, một framework
cho các ứng dụng web. AngularJS dùng để phát triển front-end thông qua các API
để gọi data, cho nên AngularJS thường được sử dụng để xây dựng project Single
Page Application.
Tác giả chọn sử dụng Angular.js để viết Front-End vì tính dễ tiếp cận của nó
và tải nhanh do không cần phải tài và render cả trang giờ đây chỉ cần tài một phần
html của website và lấy JSON hiển thị ra.
Ưu điểm
-
Dễ làm quen khi đã nắm kiến thức cơ bản javascript.
-
Sử dụng data bind giống .NET với tính năng liên kết với HTML nên giúp
người dùng cảm thấy dễ sử dụng.
-
Có thể chạy trên hầu hết các trình duyệt điện thoại thông minh.
-
Cung cấp khả năng tái sử dụng các component.
Nhược điểm
-
Là một JavaScript framework, ứng dụng được viết bởi AngularJS không
an toàn. Phải có các tính năng bảo mật và xác thực phía server sẽ giúp ứng
dụng trở nên an toàn hơn.
-
Nếu người sử dụng ứng dụng vô hiệu hóa JavaScript thì họ chỉ nhìn được
trang cơ bản, không thấy gì thêm.
1.6.3. JSON Web Token
JSON Web Token (JWT) là 1 tiêu chuẩn mở (RFC 7519) định nghĩa cách
thức truyền tin an toàn giữa các thành viên bằng 1 đối tượng JSON. Thông tin này
có thể được xác thực và đánh dấu tin cậy nhờ vào "chữ ký" của nó. Phần chữ ký
của JWT sẽ được mã hóa lại bằng HMAC hoặc RSA.
JSON Web Token bao gồm 3 phần, được ngăn cách nhau bởi dấu chấm (.):
-
Phần Header dùng để khai báo kiểu chữ ký và thuật toán mã hóa sẽ dùng
cho cái token của chúng ta.
-
Phần thứ 2 của token đó là Payload, nơi chứa các nội dung của thông tin
8
(claim). Thông tin truyền đi có thể là mô tả của 1 thực thể (ví dụ như người
dùng) hoặc cũng có thể là các thông tin bổ sung thêm cho phần Header.
Nhìn chung, chúng được chia làm 3 loại: reserved, public và private.
-
Phần chữ ký được tạo bằng cách kết hợp 2 phần Header + Payload, rồi mã
hóa nó lại bằng 1 giải thuật encode nào đó, càng phức tạp thì càng tốt, ví
dụ như HMAC SHA-256.[7]
Hình 1.5 Cấu trúc của một chuỗi JSON Web Token.
Trong đề tài, tác giả sử dụng JSON web token để xác thực quyền truy cập
(Authentication) và lưu trữ JSON Web Token ở Cookie dưới client. Trong một
JWT có chứa UserAccountID và UserTypeID. Mỗi khi Client gửi một Request thì
kèm theo JSON Web Token trong HTTP Header.
1.6.4. Module Nodemailer
Module Nodemailer dùng để gửi mail từ Node.js. Hiện tại Nodemailer đã hỗ
trợ nhiều services như Gmail, Godaddy, Hotmail, iCloud, Yahoo, ...
Ở đề tài này tác giả dùng Nodemailer gửi Email đề người dùng xác nhận tài
khoản hoặc gửi mật khẩu hệ thống tự tạo lúc người dùng quên mật khẩu về email
của người dùng.
1.6.5. Module Multer và fs
Trong đề tài này tôi dùng Multer Để nhận dữ liệu là một file ảnh được gửi từ
client và dùng module FS có sẵn trong môi trường Node.js để lưu trên máy chủ.
1.6.6. Module Dotenv
Trong đề tài tác giả sử dụng module Dotenv để đọc file env trong đó lưu các
cấu hình để kết nối với Mysql, key để giải mã JSON Web Token và tài khoản, mật
khẩu của Gmail. Vậy file env là gì, dùng làm gì? [3] env được viết tắt là
environment dùng đề lưu các thông tin bí mật, không được commit thông qua git
thông thường.
1.7. Tiểu kết
9
Qua chương này, tác giả đã nêu lên một số cơ sở lý thuyết và một số thư viện,
phần mềm được sử dụng trong đề tài. Trong chương tiếp theo, tác giả sẽ tiến hành
vào quá trình xây dựng Web API.
10
Chương 2 : PHÂN TÍCH THIẾT KẾ HỆ THỐNG
2.1. Khảo sát hiện trạng
2.1.1. Tình trạng tìm kiếm thợ trước đây
Trước đây, việc tìm kiếm thợ để sửa chữa một thiết bị hư hỏng rất mất thời
gian và tốn nhiều công sức cũng như tiền của rất nhiều.
Người khách khi có thiết bị hư hỏng thì phải tìm kiếm nơi sửa chữa thích hợp
thường thì phải ra đường kiếm hoặc hỏi người thân xung quanh để biết nơi sửa
chữa thích hợp.
2.1.2. Hệ thống ra đời với yêu cầu
Nhằm giải quyết vấn đề hiện hành ở trên thì đã nảy ra ý tưởng “Hệ thống
cung cấp dịch vụ hỗ trợ tìm kiếm nhóm thợ theo khu vực trên nền tảng Website”
Với các chức năng như:
-
Hiển thị thông tin thợ trên map khi tìm kiếm thợ theo danh mục và khu
vực.
-
Người thợ đăng hồ sơ để người dùng tìm kiếm.
-
Nhắn tin thời gian thực giữa khách và thợ với nhau.
-
Kết thúc giao dịch và đánh giá giữa khách với thợ và thợ với khách.
2.2. Sơ đồ hệ thống
2.2.1. Mô hình tổng quát
Hình 2.1 Mô hình use case tổng quát.
Website có 3 tác nhân bao gồm: Admin, Thợ và Khách
-
Admin cần phải đăng nhập để quản lý tài khoản thợ và khách, danh mục
ngành nghề, hồ sơ của thợ, tìm kiếm thợ và cập nhật thông tin cá nhân.
-
Thợ cần đăng nhập để quản lý thông tin cá nhân, hồ sơ, quản lý giao dịch
của bản thân, chat với khách và có thể đăng ký tài khoản thợ.
11
-
Khách cần đăng nhập để quản lý thông tin cá nhân, giao dịch của bản thân,
chat với thợ và có thể đăng ký tài khoản thợ
2.2.2. Mô hình use case của thợ
Hình 2.2 Mô hình use case của thợ.
2.2.2.1. Đổi mật khẩu
-
Tên sử dụng: Đổi mật khẩu.
-
Tác nhân: Thợ.
-
Tiền điều kiện: Phải là admin hoặc khách hoặc thợ đã có tài khoản đã được
xác nhận.
-
Mục đích: Thành viên có thể đổi mật khẩu của tài khoản.
-
Kịch bản chính:
①. Thành viên chọn đổi mật khẩu.
②. Hệ thống hiện form nhập liệu để nhập mật khẩu mới và cũ.
③. Thành viên nhập mật khẩu mới và cũ vào form.
④. Thành viên chọn thay đổi mật khẩu để thay đổi mật khẩu nếu không
hợp lệ theo kịch bản phụ.
⑤. Hệ thống báo thay đổi thành công và kết thúc use case.
-
Kịch bản phụ:
①. Hệ thống sẽ hiện thông báo lỗi.
②. Quay lại bước 2
2.2.2.2. Xem trang cá nhân
-
Tên sử dụng: Đăng ký.
-
Tác nhân: Thợ.
-
Tiền điều kiện: Thành viên có thể là admin hoặc khách đã đăng nhập vào
hệ thống.
-
Mục đích: Thành viên xem thông tin cá nhân của bản thân hoặc thành vien
khác.
- Xem thêm -