• Về project: Sản phẩm hoàn thành đã đạt được các nội dung như: Thao tác được với cơ sở dữ liệu NoSQL là MongoDBđể thao tác với big data thông qua sự hỗ trợ của mongoose khi thao tác trê
Trang 1TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT
THÀNH PHỐ HỒ CHÍ MINH
TÌM HIỂU VÀ ÁP DỤNG CÔNG NGHỆ MERN STACK ĐỂ XÂY DỰNG DEMO WEBSITE BÁN HÀNG THỜI TRANG
ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ THÔNG TIN
GVHD: NGUYỄN THIÊN BẢO SVTT: NGUYỄN THỊ THỨC MSSV: 15110329
SVTH: ĐÀO HOÀN VŨ MSSV: 15110373
SKL 0 0 5 7 5 4
Trang 2NGUYỄN THỊ THỨC - 15110329 ĐÀO HOÀN VŨ – 15110373
GIÁO VIÊN HƯỚNG DẪN
TS NGUYỄN THIÊN BẢO
TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
BỘ MÔN CÔNG NGHỆ PHẦN MỀM
Trang 3TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HCM
KHOA CÔNG NGHỆ THÔNG TIN
KHOÁ LUẬN TỐT NGHIỆP KỸ SƯ CNTT
GIÁO VIÊN HƯỚNG DẪN
TS NGUYỄN THIÊN BẢO KHÓA 2015 - 2019 NGUYỄN THỊ THỨC - 15110329 ĐÀO HOÀN VŨ – 15110373
Trang 4KHOA CNTT Độc lập – Tự do – Hạnh phúc
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Họ và tên SV thực hiện 1: Nguyễn Thị Thức Mã số SV: 15110329
Họ và tên SV thực hiện 2: Đào Hoàn Vũ Mã số SV: 15110373 Ngành: Công nghệ thông tin
Tên đề tài: Tìm hiểu và áp dụng công nghệ MERN stack để xây dựng demo website bán hàng thời trang
Họ và tên giáo viên hướng dẫn: T.S Nguyễn Thiên Bảo
NHẬN XÉT:
1 Về nội dung đề tài và khối lượng công việc thực hiện:
Về cơ bản nhóm đã đạt được các mục tiêu mà đề tài đã đặt ra như:
• Về lí thuyết: Đã tìm hiểu được các kiến thức cơ bản của các thành phần trong
mô hình MERN stack
• Về project: Sản phẩm hoàn thành đã đạt được các nội dung như: Thao tác được với cơ sở dữ liệu NoSQL là MongoDBđể thao tác với big data thông qua sự hỗ trợ của mongoose khi thao tác trên code NodeJS Nhóm đã tìm hiểu và tạo các API bằng NodeJS và framework của NodeJS là ExpressJS để nhiều thiết bị khác nhau có thể sử dụng chung nguồn dữ liệu Áp dụng thư viện redux để xây dựng giao diện khá đẹp và đầy đủ chức năng
Trang 5• Ứng dụng có nhiều tính năng chưa được hoàn thành như:
- Chưa tích hợp được API của các cổng thanh toán trực tuyến
- Chưa thực hiện được chức năng thống kê các sản phẩm bán ra của cửa hàng
- Đưa ra danh sách các sản phẩm có liên quan đến sản phẩm mà khách hàng muốn mua
• Bất đồng về quan điểm giữa các thành viên trong nhóm
4 Đồng ý cho phản biện hay không? ………
5 Đánh giá loại: …………
6 Điểm: ………
TP.HCM, ngày tháng năm 2019
Giáo viên hướng dẫn
TS Nguyễn Thiên Bảo
Trang 6ĐH SƯ PHẠM KỸ THUẬT TP.HCM CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
KHOA CNTT Độc lập – Tự do – Hạnh phúc
***** *****
PHIẾU NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN Họ và tên SV thực hiện 1: Nguyễn Thị Thức Mã số SV: 15110329 Họ và tên SV thực hiện 2: Đào Hoàn Vũ Mã số SV: 15110373 Ngành: Công nghệ thông tin Tên đề tài: Tìm hiểu và áp dụng công nghệ MERN stack để xây dựng demo website bán hàng thời trang Họ và tên giáo viên phản biện: T.S Nguyễn Thành Sơn NHẬN XÉT: 1 Về nội dung đề tài và khối lượng công việc thực hiện: ………
………
………
………
2 Ưu điểm: ………
………
………
………
3 Khuyết điểm: ………
………
………
………
4 Đồng ý cho bảo vệ hay không? …………
5 Đánh giá loại: …………
6 Điểm: ……… TP.HCM, ngày tháng năm 2019
Giáo viên phản biện
Trang 7LỜI CẢM ƠN
Đề tài “Tìm hiểu và áp dụng công nghệ MERN để xây dựng website bán hàng thời trang” là nội dung chúng em chọn để nghiên cứu và hoàn thành khóa luận tốt nghiệp chuyên ngành công nghệ phần mềm
Để hoàn thành quá trình nghiên cứu và hoàn thiện luận văn này, lời đầu tiên cho phép chúng em xin chân thành cảm ơn sâu sắc đến thầy Nguyễn Thiên Bảo Thầy
đã trực tiếp chỉ bảo và hướng dẫn chúng em trong suốt quá trình nghiên cứu để chúng em hoàn thiện luận văn Ngoài ra chúng em cũng xin chân thành cảm ơn các thầy cô trong khoa Công nghệ thông tin đã đóng góp những ý kiến quý báu cho luận văn được ngày càng hoàn thiện hơn
Chúng em cũng xin chân thành cảm ơn bố mẹ đã nuôi nấng, dạy dỗ chúng em, luôn bên cạnh cổ vũ, tiếp thêm tinh thần, luôn ủng hộ và lắng nghe chúng em để chúng em có được như ngày hôm nay
Nhân dịp này, chúng em cũng xin cảm ơn lãnh đạo và các anh chị đang công tác tại trường đã tạo điều kiện, thời gian, cơ sở vật chất cho chúng em trong suốt quá trình nghiên cứu
Trân trọng cảm ơn!
Trang 8Trường ĐH Sư Phạm Kỹ Thuật TP.HCM
Khoa: CNTT
ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP
Họ và Tên SV thực hiện 1: Nguyễn Thị Thức Mã Số SV: 15110329
Họ và Tên SV thực hiện 2: Đào Hoàn Vũ Mã Số SV: 15110373
Thời gian làm luận văn: Từ: 01/03/2019 Đến: 30/06/2019
Chuyên ngành: Công nghệ phần mềm
Tên luận văn: Tìm hiểu và áp dụng công nghệ MERN stack để xây dựng demo website bán hàng thời trang
GV hướng dẫn: TS Nguyễn Thiên Bảo
Nhiệm Vụ Của Luận Văn:
1 Tìm hiểu được các thành phần trong MERN stack (MongoDB, ExpressJS, ReactJS, NodeJS)
2 Xây dựng được các Restful API từ NodeJS, sử dụng framework là ExpressJS
3 Sử dụng ReactJS và thư viện Redux để nâng cao khả năng quản lí ở phía front-end cho trang web
4 Kết hợp API trong project ReactJS để thao tác với cơ sở dữ liệu
5 Hoàn thành trang web phục vụ mua bán hàng thời trang
Đề cương viết luận văn:
MỤC LỤC
1 Chương 1: MỞ ĐẦU
1.1 Sự cần thiết của đề tài
1.2 Mục đích của đề tài
1.3 Đối tượng và phạm vi nghiên cứu
1.4 Phân tích những công trình có liên quan
1.5 Kết quả dự kiến đạt được
2 Chương 2: CƠ SỞ LÍ THUYẾT
2.1 Công nghệ MERN STACK
Trang 93.4 Thiết kế giao diện
5.2 Ưu, nhược điểm
5.3 Hướng phát triển của đề tài
TÀI LIỆU THAM KHẢO
KẾ HOẠCH THỰC HIỆN
1
03/03 đến 17/03 Khảo sát hiện trạng và xác định yêu cầu và
thiết kế cơ sở dữ liệu
5 14/04 đến 28/04 Kết hợp API đã viết vào trang web
6 28/04 đến 12/05 Xây dựng chức năng login
16/06 đến 23/06 Public trang web lên host
Viết báo cáo
12 23/06 đến 30/06 Hoàn thành luận văn
Xác nhận của giáo viên hướng dẫn
TS Nguyễn Thiên Bảo
Ngày tháng năm 2019 Người viết đề cương
Nguyễn Thị Thức
Trang 10MỤC LỤC
LỜI CẢM ƠN
ĐỀ CƯƠNG LUẬN VĂN TỐT NGHIỆP
DANH MỤC HÌNH ẢNH
DANH MỤC CÁC BẢNG
1 CHƯƠNG 1: MỞ ĐẦU 1
1.1 SỰ CẦN THIẾT CỦA ĐỀ TÀI 1
1.2 MỤC ĐÍCH CỦA ĐỀ TÀI 3
1.3 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU 3
1.4 PHÂN TÍCH NHỮNG CÔNG TRÌNH CÓ LIÊN QUAN 3
1.5 KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC 4
2 CHƯƠNG 2: KHẢO SÁT HIỆN TRẠNG 5
2.1 CÁC WEBSITE TƯƠNG TỰ 5
2.1.1 Zara 5
2.1.2 MWC Store 5
2.2 YÊU CẦU CỦA WEBSITE 6
3 CHƯƠNG 3: CƠ SỞ LÍ THUYẾT 7
3.1 CÔNG NGHỆ MERN STACK 7
3.1.1 MongoDB 9
3.1.2 NodeJS 22
3.1.3 ExpressJS 26
3.1.4 ReactJS 31
3.2 RESTFUL API 38
3.2.1 Các thành phần 38
3.2.2 Cách hoạt động 39
3.2.3 Authentication và dữ liệu trả về 40
3.3 MONGOOSE 42
3.3.1 Định nghĩa 42
3.3.2 Thiết lập Mongoose 43
3.3.3 Định nghĩa schema cho Mongoose 44
3.3.4 Tạo và lưu những model của Mongoose 46
3.3.5 Xác thực dữ liệu trong schema 47
3.3.6 Một số thao tác với cơ sở dữ liệu 48
Trang 113.4.1 Giới thiệu 50
3.4.2 Các nguyên tắc cơ bản của Redux 51
3.4.3 Tính ứng dụng của Redux 52
4 CHƯƠNG 4: PHÂN TÍCH VÀ THIẾT KẾ ỨNG DỤNG 53
4.1 ĐẶC TẢ YÊU CẦU 53
4.1.1 Yêu cầu chức năng nghiệp vụ 53
4.1.2 Yêu cầu chức năng hệ thống 54
4.1.3 Yêu cầu phi chức năng 54
4.2 LƯỢC ĐỒ USE CASE 55
4.2.1 Lược đồ use case tổng quát 55
4.2.2 Danh sách các use case 55
4.3 CƠ SỞ DỮ LIỆU 61
4.3.1 Category Document 61
4.3.2 Orders Document 62
4.3.3 Employees Document 65
4.3.4 Customer Document 66
4.4 THIẾT KẾ GIAO DIỆN 68
4.4.2 Thiết kế giao diện cho khách hàng 68
4.4.3 Thiết kế giao diện cho nhân viên 73
4.4.4 Thiết kế giao diện cho admin: 79
4.5 THIẾT KẾ XỬ LÍ 80
4.5.2 Khách hàng 80
4.5.3 Quản lí 81
5 CHƯƠNG 5: CÀI ĐẶT VÀ KIỂM THỬ 83
5.3 CÀI ĐẶT 83
5.4 KIỂM THỬ 86
5.4.2 Test phần khách hàng 86
5.4.3 Test phần member 88
5.4.4 Test phần admin 93
6 CHƯƠNG 6: KẾT LUẬN 94
6.1 KẾT QUẢ ĐẠT ĐƯỢC 94
6.2 ƯU, NHƯỢC ĐIỂM 94
6.2.1 Ưu điểm 94
6.2.2 Nhược điểm 95
Trang 126.3 HƯỚNG PHÁT TRIỂN CỦA ĐỀ TÀI 95
TÀI LIỆU THAM KHẢO 96
Trang 13DANH MỤC HÌNH ẢNH
Hình 1 Website Zara 5
Hình 2 Website MWC Store 5
Hình 3 Công nghệ MERN STACK 7
Hình 4 Hệ quản trị cơ sở dữ liệu MongoDB 9
Hình 5 Mô tả _id trong MongoDB 10
Hình 6 Mô tả Collection trong MongoDB 10
Hình 7 Mô tả Cursor trong MongoDB 11
Hình 8 Ví dụ Document trong MongoDB 11
Hình 9 Ví dụ về Indexes trong MongoDB 12
Hình 10 Ví dụ về cấu trúc dữ liệu của MongoDB và SQL 13
Hình 11 Cơ chế hoạt động của MongoDB 17
Hình 12 Lợi thế ít Schema trong MongoDB 19
Hình 13 Khả năng mở rộng của MongoDB 20
Hình 14 Cách lưu trữ và cho phép truy cập của MongoDB 20
Hình 15 Minh họa NodeJS 22
Hình 16 Minh họa ExpressJS 26
Hình 17 Minh họa cấu trúc của ExpressJS 27
Hình 18 Hoạt động của ExpressJS 28
Hình 19 Quá trình nhận request và trả lại respone của ExpressJS 29
Hình 20 Code ví dụ về điều kiện phản hồi của ExpressJS 29
Hình 21 Thư viện ReactJS 31
Hình 22 Ví dụ về phân nhóm theo tính năng hoặc theo routes 32
Hình 23 Ví dụ về phân nhóm theo loại file 32
Hình 24 So sánh thay đổi của props và state trong component 37
Hình 25 Giới thiệu mô hình hoạt động của Restful API 38
Hình 26 Minh họa framework Mongoose 42
Hình 27 Thư viện Redux 50
Hình 28 Cách hoạt động của Redux 51
Hình 29 Use case tổng quát 55
Hình 30 Use case đăng nhập 55
Hình 31 Use case quản lý mã giảm giá 56
Hình 32 Use case quản lý loại sản phẩm 57
Hình 33 Use case quản lý sản phẩm 58
Hình 34 Use case quản lý khách hàng 59
Hình 35 Use case quản lý giỏ hàng 60
Hình 39 Giao diện màn hình đăng nhập 68
Hình 40 Giao diện màn hình quản lý thông tin của khách hàng 69
Hình 41 Giao diện màn hình xem giỏ hàng 71
Hình 42 Giao diện màn hình thêm sản phẩm vào giỏ hàng 72
Hình 43 Giao diện thêm sản phẩm vào giỏ hàng #2 72
Hình 44 Giao diện màn hình quản lý thông tin nhân viên 73
Hình 45 Giao diện màn hình hiển thị danh sách sản phẩm 74
Hình 46 Giao diện màn hình xem thông tin sản phẩm 75
Hình 47 Giao diện màn hình xem thông tin chi tiết sản phẩm 76
Hình 48 Giao diện màn hình hiển thị danh sách các loại sản phẩm 77
Hình 49 Giao diện màn hình hiển thị đơn hàng 78
Hình 50 Giao diện màn hình xem danh sách nhân viên 79
Hình 51 Giao diện màn hình chi tiết nhân viên 80
Hình 52 Lược đồ tuần tự màn hình đăng nhập 80
Hình 53 Lược đồ tuần tự màn hình chỉnh sửa thông tin cá nhân 81
Hình 54 Lược đồ tuần tự màn hình xóa nhân viên 81
Hình 55 Lược đồ tuần tự màn hình thêm nhân viên 82
Hình 56 Cài đặt các thư viện cần thiết cho API 83
Hình 57 Cài đặt thư viện cần thiết cho API 83
Hình 59 Trở lại thư mục mern-stack-app 84
Hình 60 Chạy npm run dev 84
Hình 61 Kết quả sau khi cài đặt 85
Trang 14DANH MỤC CÁC BẢNG
Bảng 1 So sánh giữa RDBMS và MongoDB 13
Bảng 2 Các dữ liệu trong MongoDB 13
Bảng 3 Một số câu lệnh thường được sử dụng trong MongoDB 15
Bảng 4 Use case đăng nhập 55
Bảng 5 Use case quản lý mã giảm giá 56
Bảng 6 Use case quản lý loại sản phẩm 57
Bảng 7 Use case quản lý sản phẩm 58
Bảng 8 Use case quản lý khách hàng 59
Bảng 9 Use case quản lý giỏ hàng 60
Bảng 22 Mô tả giao diện đăng nhập 68
Bảng 23 Mô tả giao diện màn hình thông tin cá nhân 69
Bảng 24 Mô tả giao diện màn hình xem giỏ hàng 70
Bảng 25 Mô tả giao diện thêm sản phẩm vào giỏ hàng 73
Bảng 26 Mô tả màn hình thông tin cá nhân 74
Bảng 27 Mô tả màn hình hiển thị danh sách sản phẩm 75
Bảng 28 Mô tả màn hình xem thông tin sản phẩm 76
Bảng 29 Mô tả màn hình xem thông tin chi tiết sản phẩm 77
Bảng 30 Mô tả giao diện hiển thị danh sách các loại sản phẩm 78
Bảng 31 Mô tả màn hình xem danh sách nhân viên 79
Bảng 32 Test màn hình đăng nhập 86
Bảng 33 Test màn hình thông tin cá nhân 86
Bảng 34 Test màn hình xem giỏ hàng 87
Bảng 35 Test màn hình thêm sản phẩm vào giỏ hàng 88
Bảng 36 Test màn hình xem thông tin nhân viên 88
Bảng 37 Test màn hình xem danh sách sản phẩm 88
Bảng 38 Test màn hình xem thông tin chi tiết sản phẩm 89
Bảng 39 Test màn hình xem danh sách mã giảm giá 90
Bảng 40 Test màn hình xem thông tin khách hàng 91
Bảng 41 Test màn hình xem danh sách các loại sản phẩm 91
Bảng 42 Test màn hình xem đơn hàng 92
Bảng 43 Test màn hình danh sách nhân viên 93
Trang 151 CHƯƠNG 1: MỞ ĐẦU 1.1 SỰ CẦN THIẾT CỦA ĐỀ TÀI
Thế giới đang ngày càng phát triển, kéo theo đó là sự phát triển không ngừng của nền khoa học nói chung và công nghệ thông tin nói riêng Ngày nay công nghệ thông tin là điều không thể thiếu trong hầu hết các lĩnh vực, trong đó có kinh doanh,
cụ thể là kinh doanh các mặt hàng thời trang Nếu không thiết kế web, bạn đã vô tình
bỏ qua khoảng 90% lượng khách hàng đến với mình mà không hề hay biết Vậy thì tại sao website lại có ma lực giúp chủ cửa hàng tiếp cận một lượng khách hàng lớn đến như vậy? Dưới đây là những lí do chính để trả lời cho câu hỏi này:
Thứ nhất: bạn sẽ có thể tăng khả năng tiếp cận khách hàng của mình: Nếu cửa hàng không có trang web riêng, khách hàng sẽ chỉ có thể mua sản phẩm, nhận dịch
vụ và tương tác với chủ cửa hàng trong giờ hành chính Điều này khiến các dịch vụ cũng như hoạt động của cửa hàng bị giới hạn Một cửa hàng có thể thu hút được khách địa phương nhưng lại là hạn chế đối với những khách hàng ở khu vực khác Tuy nhiên, khi cửa hàng xây dựng một trang web riêng thì phạm vị khách hàng sẽ không bị giới hạn Cơ hội nhận được đơn đặt hàng của khách từ khắp mọi nơi trên đất nước sẽ ngày càng tăng cao
Thứ hai: Quản lý hàng hóa dễ dàng: Nếu bạn bán hàng trên facebook? rõ ràng bạn phải xem xét rất nhiều thứ để biết được hàng đó còn hay hết, đặc biệt nếu bạn là chủ và có một nhân viên khác bán hàng Nếu bạn đang có một vài cửa hàng ở các quận khác nhau, nếu muốn biết số hàng này còn hay hết bạn sẽ phải xem xét sổ sách thống kế rất phức tạp Hoặc phải đợi cuối tuần hoặc cuối tháng nhân viên tổng kết lại bạn mới nắm được việc kinh doanh của mình tiến triển như thế nào Nếu bạn đang dùng một phần mềm được lập trình để quản lý kinh doanh? cũng được đấy Nhưng chưa phải là tốt nhất! Chắc chắn bạn không thể dùng điện thoại của mình để check
các thống kê được Nhưng hệ thống quản trị của website làm được tất cả những việc
đó, ngay cả khi bạn chỉ cầm một chiếc smartphone khi đang đi du lịch
Thứ ba: Dịch vụ chăm sóc khách hàng hiệu quả: Mọi người đều dễ dàng gõ một câu hỏi khi thắc mắc về sản phẩm của bạn khi phần comment được tích hợp trên website hơn là cầm điện thoại lên để alo
Trang 16Thứ tư: Website là nền tảng cho thương mại điện tử: Một người đi làm 8h/ngày thì sẽ có rất ít thời gian đi mua sắm ở cửa hàng hay các trung tâm mua sắm offline
Đó là lý do mà bán hàng online ngày càng phát triển
Thứ năm: Xây dựng thương hiệu: Bạn nghĩ bán hàng qua facebook bằng cách live stream tặng quà, khuyến mãi … là bạn đang bán hàng online? Không hẳn vậy Thực tế là có đến gần 90% lượng khách hàng lựa chọn sản phẩm của shop có website riêng hơn là những shop khác Bởi lẽ: Xây dựng thương hiệu là điều đáng quan tâm của một doanh nghiệp và trang web sẽ giúp doanh nghiệp làm điều này Nó phản ánh một hình ảnh chuyên nghiệp thông qua giao diện và các hoạt động của doanh nghiệp Địa chỉ email, tên miền và cách giao tiếp với khách hàng qua website giúp doanh nghiệp xây dựng uy tín và sự tin cậy cho khách hàng, tạo dựng thương hiệu và truyền
bá hình ảnh trên toàn thế giới
Thứ sáu: Hoạt động 24/7: Với Website chuyên nghiệp, cửa hàng của bạn dường như không bao giờ ngừng làm việc để phục vụ khách hàng, từ đó, giúp bạn tiết kiệm
về thời gian lẫn chi phí
Website sẽ hoạt động 24/7, bất cứ khi nào khách hàng cần, kể cả giờ nghỉ của nhân viên hoặc ngày nghỉ lễ Thông qua Website, khách hàng dễ dàng tiếp cận hơn với cửa hàng, sử dụng dịch vụ của bạn một cách dễ dàng nhất dù họ ở nơi đâu, bất cứ lúc nào
Thứ 7: Với khả năng phối đồ khá tinh tường của các nhân viên thì không những chọn một chiếc áo, chiếc quần hay đôi giày, … Mà khách hàng có thể lựa chọn nguyên một set đồ để dự một sự kiện, một buổi tiệc nào đó thông qua chức năng đề xuất của website Điều này chẳng những tạo sự linh động trong cách bán hàng mà còn giúp tăng doanh số một cách đáng kể
Hơn thế nữa, bạn có thể đưa những thắc mắc thường gặp của khách hàng lên website và thiết lập hệ thống trả lời những câu hỏi đó Sẽ tiết kiệm rất nhiều thời gian trả lời điện thoại hoặc thuê riêng một nhân viên hỗ trợ
Bên cạnh việc đã có được một trang web, việc trang web đó hoạt động như thế nào để đáp ứng được nhu cầu của người dùng cũng là một vấn đề rất đáng được quan tâm Với một trang web truyền thống, khi người dùng yêu cầu một trang web, thì
Trang 17server sẽ tính toán và trả về trang web đó cho người dùng toàn bộ trang web dưới dạng
mã html Hầu như không có bất kỳ sự liên kết nào giữa 2 yêu cầu gần nhau Do đó khi
có nhiều yêu cầu được diễn ra thì sẽ làm quá trình tính toán diễn ra lâu hơn, bởi hệ thống phải tính toán nhiều thành phần trước khi trả về một trang web hoàn chỉnh, điều
đó khiến cho performance của trang web khá chậm Chính vì các lí do đó mà SPAs (single page applications) đã được ra đời Sau khi load trang web ở lần đầu tiên, ở những lần sau, khi chuyển trang khác, client sẽ gửi những request để nhận dữ liệu cần thiết (thường là phần nội dung) Việc này mang đến trải nghiệm cho người dùng web tốt hơn, giảm thời gian phải load lại toàn bộ trang web cồng kềnh, tiết kiệm băng thông cũng như thời gian chờ đợi Việc này là trái ngược hoàn toàn với trang web truyền thống khi toàn bộ trang web phải load lại mỗi khi chuyển trang
Có quá nhiều lý do để trả lời cho một câu hỏi: Vì sao cần phải có một website kinh doanh thời trang hoàn hảo, chạy nhanh? Vậy nên website kinh doanh là một phần không thể thiếu đối với các shop thời trang trong thời kỳ hiện đại của thế giới ngày nay
1.2 MỤC ĐÍCH CỦA ĐỀ TÀI
Đề tài “Tìm hiểu và áp dụng công nghệ MERN STACK để xây dựng website bán hàng thời trang” thuộc hướng tìm hiểu công nghệ để từ đó xây dựng ứng dụng Mục tiêu của đề tài là tìm hiểu các kiến thức cơ bản của MERN STACK trong việc
áp dụng để xây dựng một trang web theo hướng Single Page Applications
1.3 ĐỐI TƯỢNG VÀ PHẠM VI NGHIÊN CỨU
- Đối tượng nghiên cứu: Công nghệ MERN STACK
- Phạm vi nghiên cứu: Ứng dụng của công nghệ MERN STACK trong xây dựng một trang web
1.4 PHÂN TÍCH NHỮNG CÔNG TRÌNH CÓ LIÊN QUAN
Trong quá trình làm tiểu luận, nhóm đã tham khảo các trang web trên internet
về bán hàng online như: Shopee, Lazada, … Để nắm bắt được xu hướng ưa thích giao diện của người dùng về trang web bán hàng trực tuyến và đưa ra giao diện phù hợp Ngoài ra, nhóm cũng có tham khảo các dự án bằng ReactJS và NodeJS thông qua các kênh youtube để hoàn thành website
Trang 181.5 KẾT QUẢ DỰ KIẾN ĐẠT ĐƯỢC
- Tìm hiểu các kiến thức cơ bản về công nghệ MERN STACK trong xây dựng một ứng dụng web bao gồm các đặc điểm và chức năng như:
+ Thêm, sửa, xóa các đối tượng được quản lí bởi website như: sản phẩm, khách hàng, nhân viên, danh sách các loại sản phẩm, … Tùy theo chức năng của từng người dùng (nhân viên và khách hàng)
Trang 192 CHƯƠNG 2: KHẢO SÁT HIỆN TRẠNG 2.1 CÁC WEBSITE TƯƠNG TỰ
Trang 202.2 YÊU CẦU CỦA WEBSITE
- Thao tác được với cơ sở dữ liệu NoSQL là MongoDB đang được sử dụng rất rộng rãi hiện nay để thao tác với big data thông qua sự hỗ trợ của mongoose khi thao tác trên code NodeJS Với cơ sở dữ liệu, nhóm đã có thể hiểu được cấu trúc của một document và thao tác để thêm mới, sửa, và xóa đi các thành phần của document, lấy dữ liệu mong muốn từ document trong cơ sở dữ liệu
- Với nhu cầu hiện tại, phần lớn các trang web được thiết kế với phần lấy dữ liệu
là sử dụng các API (Resful API) để nhiều thiết bị khác nhau có thể sử dụng chung nguồn dữ liệu Chính vì vậy, nhóm đã tìm hiểu và tạo các API bằng NodeJS và framework của NodeJS là ExpressJS
- Về phía Client: Phần giao diện với người sử dụng được viết bằng ReactJS và áp dụng thư viện nâng cao hơn là Redux để hoàn thành giao diện Về cơ bản, trang web đã có thể thực hiện các thao tác cho người khách hàng có thể đăng kí tài khoản mới, xem các sản phẩm, xem chi tiết sản phẩm, thêm sản phẩm vào giỏ hàng và đăng nhập vào hệ thống để thực hiện mua hàng Về phía những người quản trị trang web: có thể quản lí thông tin tất cả các đối tượng liên quan đến cửa hàng như: sản phẩm, loại sản phẩm, mã giảm giá, danh sách nhân viên, khách hàng, … Đồng thời, người sử dụng có thể thao tác để sửa chữa thông tin cá nhân của mình
Trang 213 CHƯƠNG 3: CƠ SỞ LÍ THUYẾT 3.1 CÔNG NGHỆ MERN STACK
Một ứng dụng web được xây dựng dựa trên sự kết hợp của nhiều công nghệ khác nhau, sự kết hợp của các công nghệ lại với nhau như vậy được gọi là “stack” Một trong những stack nổi tiếng là LAMP (sự kết hợp giữa Linux, Apache, MySQL
và PHP, đều là những thành phần mã nguồn mở) Khi sự phát triển web ngày càng phát triển và tính tương tác ngày càng nổi bật thì SPAs (single page applications) lại trở nên phổ biến hơn Một ứng dụng web SPA thay vì việc gọi lên server để tải lại toàn bộ nội dung của trang sau mỗi lần có request từ phía client sẽ chỉ gọi lên server để lấy các nội dung cần thiết cần được thay đổi Chính điều này đã dẫn đến yêu cầu ngày càng nâng cao về ngôn ngữ xử lí ở phía front-end
Hình 3 Công nghệ MERN STACK
MEAN (MongoDB, Express, AngularJS, Node.js) STACK là một trong những
bộ công cụ mã nguồn mở áp dụng theo mô hình SPAs (single page applications) cùng với việc áp dụng cơ sở dữ liệu NoSQL Trong stack này:
- AngularJS đóng vai trò là một front-end framework dựa trên mô hình MVC
(model-view-controller)
- MongoDB dùng để lưu trữ dữ liệu là một hệ quản trị cơ sở dữ liệu NoSQL
rất phổ biến
- NodeJS: là một JavaScript runtime
Trước NodeJS, các nhà phát triển phần mềm sẽ phải sử dụng các ngôn ngữ khác nhau như PHP, Java, ASP.NET, … chạy trên máy chủ và JavaScript sẽ chạy
Trang 22trong trình duyệt máy khách Giờ đây với NodeJS, các nhà phát triển có thể sử dụng JavaScript trên máy chủ cũng như máy khách NodeJS cho phép JavaScript chạy
mà không cần trình duyệt và thường được sử dụng để chạy các máy chủ web Một chương trình sẽ nhận source code và:
• Phân tích source và thực thi từng đơn vị có thể
• Cung cấp một vài object để javascript có thể tương tác với thế giới bên ngoài
NodeJS được xây dựng trên JavaScript runtime V8 của chrome để đáp ứng nhu cầu phát triển nhanh và có thể mở rộng của ứng dụng Để tương tác với môi trường, V8 cung cấp các lớp template bọc ngoài các object và function được viết bởi C++ Các function C++ này có thể làm nhiệm vụ đọc – ghi file system, thao tác networking hoặc giao tiếp các tiến trình khác trong hệ thống Các biến được cung cấp bởi các thư viện, đón nhận source và thực thi nó
- ExpressJS là một web framework được xây dựng bằng javascript chạy trên
nền NodeJS Nó hỗ trợ thêm nhiều tính năng cần có của một web framework như:
routing, middlewares, …
Bản thân NodeJS có thể làm được mọi thứ nhưng ExpressJS được ra đời để các thao tác được thực hiện dễ dàng hơn
Ưu điểm của việc sử dụng ExpressJS:
• Có khả năng sử dụng cho Sass, Less, Stylus
Trang 23NoSQL là 1 dạng CSDL mã nguồn mở không sử dụng Transact-SQL để truy vấn thông tin NoSQL viết tắt bởi: Non-Relational SQL, hay có nơi thường gọi là Not-Only SQL CSDL này được phát triển trên Javascript Framework với kiểu dữ liệu JSON (Cú pháp của JSON là “key:value”) NoSQL ra đời như là 1 mảnh vá cho những khuyết điểm và thiếu xót cũng như hạn chế của mô hình dữ liệu quan hệ
RDBMS về tốc độ, tính năng, khả năng mở rộng, memory cache,
Ngoài ra, MongoDB là một cơ sở dữ liệu đa nền tảng, hoạt động trên các khái niệm Collections và Documents, nó cung cấp hiệu suất cao, tính khả dụng cao và khả năng mở rộng dễ dàng
((*) https://docs.mongodb.com/manual/reference/operator/query/type/)
3.1.1.2 Các thuật ngữ hay được sử dụng trong MongoDB:
Trang 24- _id: Là trường bắt buộc có trong mỗi document Trường _id đại diện cho một
giá trị duy nhất trong document MongoDB Trường _id cũng có thể được hiểu là khóa chính trong document Nếu bạn thêm mới một document thì MongoDB sẽ tự động sinh ra một _id đại diện cho document đó và là duy nhất trong cơ sở dữ liệu MongoDB
Hình 5 Mô tả _id trong MongoDB
- Collection: Là nhóm của nhiều document trong MongoDB Collection có thể
được hiểu là một bảng tương ứng trong cơ sở dữ liệu RDBMS (Relational Database Management System) Collection nằm trong một cơ sở dữ liệu duy nhất Các collection không phải định nghĩa các cột, các hàng hay kiểu dữ liệu trước
Hình 6 Mô tả Collection trong MongoDB
Trang 25- Cursor: Đây là một con trỏ đến tập kết quả của một truy vấn Máy khách có
thể lặp qua một con trỏ để lấy kết quả
Hình 7 Mô tả Cursor trong MongoDB
- Database: Nơi chứa các Collection, giống với cơ sở dữ liệu RDMS chúng
chứa các bảng Mỗi Database có một tập tin riêng lưu trữ trên bộ nhớ vật lý Một mấy chủ MongoDB có thể chứa nhiều Database
- Document: Một bản ghi thuộc một Collection thì được gọi là một Document
Các Document lần lượt bao gồm các trường tên và giá trị
Hình 8 Ví dụ Document trong MongoDB
- Field: Là một cặp name – value trong một document Một document có thể
có không hoặc nhiều trường Các trường giống các cột ở cơ sở dữ liệu quan hệ
Trang 26- JSON: Viết tắt của JavaScript Object Notation Con người có thể đọc được
ở định dạng văn bản đơn giản thể hiện cho các dữ liệu có cấu trúc Hiện tại JSON đang hỗ trợ rất nhiều ngôn ngữ lập trình
- Index: Là những cấu trúc dữ liệu đặc biệt, dùng để chứa một phần nhỏ của
các tập dữ liệu một cách dễ dàng để quét Chỉ số lưu trữ giá trị của một fields cụ thể hoặc thiết lập các fields, sắp xếp theo giá trị của các fields này Index hỗ trợ độ phân tích một cách hiệu quả các truy vấn Nếu không có chỉ mục, MongoDB sẽ phải quét tất cả các documents của collection để chọn ra những document phù hợp với câu truy vấn Quá trình quét này là không hiệu quả và yêu cầu MongoDB để xử lý một khối lượng lớn dữ liệu
Hình 9 Ví dụ về Indexes trong MongoDB
- Schema: Trong MongoDB không có lược đồ còn trong SQL thì định nghĩa
lược đồ thông qua các định nghĩa bảng Một “schema” là một cấu trúc của tài liệu
và nó được thực thi thông qua các lớp ứng dụng
Trang 27Join Embeded Documents, Linking
3.1.1.4 Các kiểu dữ liệu trong MongoDB:
Bảng 2 Các dữ liệu trong MongoDB
Trang 29- Chuỗi: Đây là kiểu dữ liệu được sử dụng phổ biến nhất để lưu giữ dữ liệu Chuỗi trong MongoDB phải là UTF-8 hợp lệ
- Số nguyên: Kiểu dữ liệu này được sử dụng để lưu một giá trị số Số nguyên
có thể là 32 bit hoặc 64 bit phụ thuộc vào Server
- Boolean: Kiểu dữ liệu này được sử dụng để lưu giữ một giá trị Boolean (true/false)
- Double: Kiểu dữ liệu này được sử dụng để lưu các giá trị số thực dấu chấm động
- Min/ Max keys: Kiểu dữ liệu này được sử dụng để so sánh một giá trị với các
- Object: Kiểu dữ liệu này được sử dụng cho các Document được nhúng vào
- Null: Kiểu dữ liệu này được sử dụng để lưu một giá trị Null
- Symbol: Kiểu dữ liệu này được sử dụng giống như một chuỗi
- Date: Kiểu dữ liệu này được sử dụng để lưu giữ date và time hiện tại trong
định dạng UNIX time
- Object ID: Kiểu dữ liệu này được sử dụng để lưu giữ ID của Document
- Binary data: Kiểu dữ liệu này được sử dụng để lưu giữ dữ liệu nhị phân
- Code: Kiểu dữ liệu này được sử dụng để lưu giữ JavaScrip code vào trong
Document
- Regular expression: Kiểu dữ liệu này được sử dụng để lưu giữ Regular
Expresion
3.1.1.5 Một số câu lệnh dùng trong MongoDB:
Bảng 3 Một số câu lệnh thường được sử dụng trong MongoDB
Create table CREATE TABLE people (id
MEDIUMINT NOT NULL AUTO_INCREMENT, user_id Varchar(30), age
db.people.insertOne({User_id:
“abc123”, Age: 55, Status:
“A”})
Trang 30Number, status char(1), PRIMARY KEY (id))
Drop table DROP TABLE people db.people.drop()
Insert records
into tables
INSERT INTO people(user_id, age, status) VALUES ("bcd001", 45,
"A")
db.people.insertOne( { user_id:
"bcd001", age: 45, status: "A" })
Select SELECT *FROM people db.people.find()
SELECT id,user_id, status FROM people
db.people.find( { }, { user_id: 1
status: 1 } )
SELECT * FROM people WHERE status = "A"
db.people.find( { status: "A" } )
SELECT * FROM people WHERE status = "A" AND age = 50
db.people.find( { status: "A", age: 50 } )
SELECT * FROM people WHERE status = "A" OR age
db.people.find( { user_id: {
$regex: /bc/ } } )
SELECT COUNT(user_id) FROM people
db.people.count( { user_id: {
$exists: true } } ) db.people.find( { user_id: {
$exists: true } } ).count()
Trang 31DELETE FROM people db.people.deleteMany({})
3.1.1.6 MongoDB hoạt động như thế nào:
Hình 11 Cơ chế hoạt động của MongoDB
- MongoDB hoạt động dưới một tiến trình ngầm service, luôn mở một cổng (Cổng mặc định là 27017) để lắng nghe các yêu cầu truy vấn, thao tác từ các ứng dụng gửi vào sau đó mới tiến hành xử lý
- Mỗi một bản ghi của MongoDB được tự động gắn thêm một field có tên
“_id” thuộc kiểu dữ liệu ObjectId mà nó quy định để xác định được tính duy nhất
Trang 32của bản ghi này so với bản ghi khác, cũng như phục vụ các thao tác tìm kiếm và truy vấn thông tin về sau Trường dữ liệu “_id” luôn được tự động đánh index (chỉ mục) để tốc độ truy vấn thông tin đạt hiệu suất cao nhất
- Mỗi khi có một truy vấn dữ liệu, bản ghi được cache (ghi đệm) lên bộ nhớ Ram, để phục vụ lượt truy vấn sau diễn ra nhanh hơn mà không cần phải đọc từ ổ cứng
- Khi có yêu cầu thêm/sửa/xóa bản ghi, để đảm bảo hiệu suất của ứng dụng mặc định MongoDB sẽ chưa cập nhật xuống ổ cứng ngay, mà sau 60 giây MongoDB mới thực hiện ghi toàn bộ dữ liệu thay đổi từ RAM xuống ổ cứng
3.1.1.7 Nhược điểm của MongoDB:
- Dữ liệu được caching, lấy RAM làm trọng tâm hoạt động vì vậy khi hoạt động yêu cầu một bộ nhớ RAM lớn
- Như đã giới thiệu ở trên, 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
3.1.1.8 Lợi thế của MongoDB:
- Ít schema hơn: Vì schema được sinh ra là để nhóm các đối tượng vào 1 cụm,
dễ quản lý Ví dụ như tạo 1 schema tên là Students chẳng hạn thì chỉ có những gì liên quan đến student thì mới được cho vào schema này Trong khi đó trong mongodb thì chỉ 1 collection ta có thể chứa nhiều document khác nhau Với mỗi document thì số trường, nội dung, kích thước lại có thể khác nhau
Trang 33Hình 12 Lợi thế ít Schema trong MongoDB
- Cấu trúc của một đối tượng rõ ràng
- Không có các Join phức tạp
- Khả năng mở rộng cực lớn: việc mở rộng dữ liệu mà không phải lo đến các vấn đề như khóa ngoại, khóa chính, kiểm tra ràng buộc, MongoDB cho phép thực hiện replication và sharding nên việc mở rộng cũng thuận lợi hơn
Trang 34Hình 13 Khả năng mở rộng của MongoDB
- Sử dụng bộ nhớ trong để lưu giữ cửa sổ làm việc cho phép truy cập dữ liệu nhanh hơn Việc cập nhật được thực hiện nhanh gọn nhờ update tại chỗ (in-place)
Hình 14 Cách lưu trữ và cho phép truy cập của MongoDB
Trang 353.1.1.9 Khi nào nên sử dụng MongoDB:
- Nếu website có tính chất INSERT cao: Bởi vì mặc định MongoDB có sẵn cơ chế ghi với tốc độ cao và an toàn Website ở dạng thời gian thực nhiều, nghĩa là nhiều người thao tác với ứng dung Nếu trong quá trình load bị lỗi tại một điểm nào
đó thì nó sẽ bỏ qua phần đó nên sẽ an toàn
- Website có nhiều dữ liệu quá: Giả sử web bạn có đến 10 triệu records thì đó
là cơn ác mộng với MySQL Bởi vì MongoDB có khả năng tìm kiến thông tin liên quan cũng khá nhanh nên trường hợp này nên dùng nó
- Máy chủ không có hệ quản trị CSDL: Trường hợp này thường sẽ sử dụng SQLITE hoặc là MongoDB
3.1.1.10 Khi nào không nên sử dụng MongoDB:
- Các ứng dụng cần sử dụng nhiều transaction (như ngân hàng) do Mongodb không có cơ chế transaction (giao dịch) để phục vụ cho các ứng dụng ngân hàng
- Các ứng dụng cần SQL (sử dụng joins)
3.1.1.11 Các công cụ quản trị MongoDB:
Một số công cụ điển hình như:
- Bước 1: Tải MongoDB từ link (https://www.mongodb.org/downloads)
- Bước 2: Chạy file vừa tải về
- Bước 3: Chạy file mongod (trong thư mục chọn cài đặt MongoDB) để khởi động mongoDB
- Bước 4: Dùng địa chỉ 127.0.0.1:27017 để tạo connection đến mongoDB
Trang 36- NodeJS 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 phần mềm như Nginx, Apache HTTP Server hoặc IIS
- NodeJS cung cấp kiến trúc hướng sự kiện (event-driven) và non-blocking I/O API, tối ưu hóa thông lượng của ứng dụng và có khả năng mở rộng cao
- Mọi hàm trong NodeJS là không đồng bộ (asynchronous) Do đó, các tác vụ đều được xử lý và thực thi ở chế độ nền (background processing)
3.1.2.2 Ứng dụng của NodeJS:
- Xây dựng websocket server (Chat server)
- Hệ thống Notification (Giống như facebook hayTwitter)
- Ứng dụng upload file trên client
- Các máy chủ quảng cáo
Trang 373.1.2.3 Nhược điểm của NodeJS:
- Ứng dụng nặng tốn tài nguyên: Nếu bạn 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) Trường hợp này bạn hãy viết 1 Addon C++ để tích hợp với NodeJS để tăng hiệu suất tối đa!
- 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ậy nên bạn đừng hi vọng NodeJS sẽ không hơn PHP, Ruby, Python… ở thời điểm này Nhưng với NodeJS bạn có thể có 1 ứng dụng như mong đợi, điều đó là chắc chắn!
3.1.2.4 Ưu điểm của NodeJS:
- Đặc điểm nổi bật của NodeJS là nó nhận và xử lý nhiều kết nối chỉ với một single-thread Điều này giúp hệ thống tốn ít RAM nhất và chạy nhanh nhất khi không phải tạo thread mới cho mỗi truy vấn giống PHP Ngoài ra, tận dụng ưu điểm non-blocking I/O của Javascript mà NodeJS tận dụng tối đa tài nguyên của server mà không tạo ra độ trễ như PHP
- 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 (Single page Application) 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
Trang 38- 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ời gian thực Với sự ra đời của các ứng dụng di động &
HTML 5 nên NodeJS rất hiệu quả khi xây dựng những ứng dụng thời gian thực
(real-time applications) như ứng dụng chat, các dịch vụ mạng xã hội như Facebook, Twitter, …
3.1.2.5 Không nên sử dụng NodeJS khi:
- Xây dựng các ứng dụng hao tốn tài nguyên: Bạn đừng mơ mộng đến NodeJS khi bạn đang muốn viết một chương trình convert video NodeJS 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: NodeJS 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 NodeJS?
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 NodeJS đã 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ề NodeJS NodeJS 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
Trang 39rõ 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 NodeJS 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
3.1.2.6 Những trường hợp nên sử dụng NodeJS :
- NodeJS 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à NodeJS thì xử lý non-blocking Chẳng còn gì thích hợp hơn NodeJS 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ì NodeJS 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 mộ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!
Trang 40Express hỗ trợ các phương thức HTTP mà middleware tạo ra một API vô cùng mạnh mẽ và 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ề HTTP Request
- Định nghĩa router cho phép sử dụng 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 dựa vào các tham số
Về các package hỗ trợ: ExpressJS có vô số các package hỗ trợ nên các không phải lo lắng khi làm việc với Framework này
Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn Chứ không làm giảm tốc độ của NodeJS
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS như một core function, chẳng hạn: SailsJS, MEAN,
3.1.3.2 Cài đặt ExpressJS:
- Để cài đặt được ExpressJS bạn cần phải cài đặt các gói: NodeJS và npm
- Cài đặt ExpressJS: npm install express –save