1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nodejs và giải pháp order online cho quán đồ ăn nhanh zigg fast food

87 636 7

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 87
Dung lượng 4,56 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Node.js cũng cung cấp cho chúng ta các module Javascript đa dạng, có thể đơn giản hóa sự phát triển của các ứng dụng web sử dụng Node.js với các phần mở rộng.. Hình 1: Các thành phần của

Trang 1

1

LỜI CẢM ƠN

Để đồ án này đạt kết quả tốt đẹp, em đã nhận được sự hỗ trợ, giúp đỡ của nhiều

cơ quan, tổ chức, cá nhân Với tình cảm sâu sắc, chân thành, cho phép em được bày

tỏ lòng biết ơn sâu sắc đến tất cả các cá nhân và cơ quan đã tạo điều kiện giúp đỡ trong quá trình học tập và nghiên cứu đề tài

Lời đầu tiên em xin gửi lời cảm ơn đến thầy “Trần Hải Thanh” giảng viên

bộ môn “Khoa Học Máy Tính”, người đã tạo điều kiện cho em nghiên cứu đề tài

này và tận tình hướng dẫn em để em có thể hoàn thành tốt đồ án: " Nodejs và giải

pháp order online cho quán đồ ăn nhanh Zigg Fast Food "

Em xin bày tỏ lòng biết ơn đến ban lãnh đạo cửa hành đồ ăn vặt Zigg Fast Food, đã tạo điều kiện giúp đỡ em trong suốt quá trình nghiên cứu đề tài

Với điều kiện thời gian cũng như kinh nghiệm còn hạn chế của một sinh viên,

đồ án này không thể tránh được những thiếu sót Em rất mong nhận được sự chỉ bảo, đóng góp ý kiến của các thầy cô để em có điều kiện bổ sung, nâng cao kiến thức của mình, để phục vụ tốt hơn trong công tác thực tế sau này

Em xin chân thành cảm ơn !

Thái Nguyên, ngày tháng 05 năm 2017

Sinh viên thực hiện

Phạm Bá Việt

Trang 2

2

LỜI CAM ĐOAN

Em xin cam đoan đồ án này là quá trình nghiên cứu độc lập của riêng em Các

số liệu sử dụng phân tích trong đồ án có nguồn gốc rõ ràng, đã công bố theo đúng quy định Các kết quả nghiên cứu trong đồ án do em tự tìm hiểu, phân tích một cách trung thực, khách quan và phù hợp với thực tế Các kết quả này chưa từng được công

bố trong bất kỳ nghiên cứu nào khác

Thái Nguyên, ngày tháng 05 năm 2017

Sinh viên thực hiện

Phạm Bá Việt

Trang 3

3

MỤC LỤC

LỜI CẢM ƠN 1

LỜI CAM ĐOAN 2

MỤC LỤC 3

MỞ ĐẦU 5

DANH MỤC HÌNH ẢNH 6

DANH MỤC TỪ VIẾT TẮT 8

CHƯƠNG 1 CƠ SỞ LÝ THUYẾT 9

1.1 Giới thiệu về Nodejs 9

Nodejs là gì? 9

Đặc điểm của Nodejs 9

Các thành phần quan trọng trong Nodejs 11

Kiến trúc của Nodejs 11

Nodejs được sử dụng ở đâu 12

1.2 Giới thiệu về Module trong Nodejs 13

Module trong Nodejs? 13

Global Scope trong Nodejs 14

1.3 Hệ thống quản lý gói NPM 14

Định dạng của một gói 14

Tìm một gói 16

Một số lệnh trong NPM 16

1.4 Xây dựng ứng dụng MVC với Express trong Nodejs 19

EventEmitter 19

HTTP – Server 19

Web Server 20

Web Framework Express 20

Đối tượng request và respone trong Nodejs 22

Mô hình MVC trong Express 22

Trang 4

4

1.5 Lưu trữ dữ liệu trên MySQL với Sequelize 25

MySQL 25

Sequelize 25

1.6 Sơ lược về Socket và Socket.io 29

Android, Nodejs và Socket IO 30

Xây dựng client Android 30

CHƯƠNG 2 PHÂN TÍCH VÀ XÂY DỰNG GIẢI PHÁP ORDER ONLINE 32 2.1 Phân tích yêu cầu và lựa chọn giải pháp công nghệ 32

Phân tích yêu cầu 32

Giải pháp công nghệ 32

2.2 Phân tích hệ thống “Giải pháp order online” 33

Quy trình xử lý của hệ thống 33

Các tác nhân và Use Case của hệ thống 34

Thiết kế các yêu cầu chức năng 39

Biểu đồ lớp 65

Thiết kế CSDL 65

CHƯƠNG 3 HỆ THỐNG ORDER ONLINE ZIGG FASTFOOD 66

3.1 Sơ đồ hoạt động của hệ thống 66

3.2 Giao diện phần quản lý 68

3.3 Giao diện phần khách hàng 71

Giao diện web 71

Giao diện trên ứng dụng mobile 78

3.4 Giao diện phần nhân viên giao hàng 83

KẾT LUẬN 86

TÀI LIỆU THAM KHẢO 87

Trang 5

5

MỞ ĐẦU

Zigg Fast Food là thương hiệu đồ ăn vặt nổi tiếng tại Hà Nội với hệ thống gồm

3 cửa hàng phân bố tại các khu vực trung tâm nội thành Để phục vụ nhu cầu ăn uống của các khách hàng một cách tiện lợi nhất, cửa hàng đã thành lập hệ thống bán hàng giao tận nơi

Tuy nhiên, cửa hàng gặp phải một khó khăn và bất tiện trong quá trình đặt hàng của khác hàng qua các phương tiện, công cụ thiếu chuyên nghiệp và khó quản lý như: gọi điện thoại, facebook, nhắn tin…

Để giải quyết khó khăn này, em đã quyết định cần phải xây dựng một hệ thống order online cho cửa hàng Sau quá trình tìm hiểu và nghiên cứu thực tế em đã quyết định lựa chọn Nodejs để xây dựng một hệ thống máy chủ cho nhà hàng trong công việc xử lý order online Và đây cũng chính là lý do mà em chọn đề tài:

“Nodejs và giải pháp order online cho quán đồ ăn nhanh Zigg Fast Food”

Bài báo cáo được trình bày gồm 3 phần cơ bản sau:

Chương 1 CƠ SỞ LÝ THUYẾT: Nêu lên các khái niện cơ bản về Nodejs, cách

thức triển khai và hoạt động của máy chủ Nodejs, các kiến thức liên quan: Android, MySql…

Chương 2 PHÂN TÍCH VÀ XÂY DỰNG GIẢI PHÁP ORDER ONLINE: Phân

tích các vấn đề của giải pháp và xây dựng hệ thống giải quyết các vấn đề

Chương 3 HỆ THỐNG GIẢI PHÁP ORDER ONLINE ZIGG FAST FOOD

Trang 6

6

DANH MỤC HÌNH ẢNH

Hình 1: Các thành phần của Nodejs 11

Hình 2: Cấu trúc một ứng dụng web 20

Hình 3: Mô hình MVC trong Nodejs 23

Hình 4: Cấu trúc thư mục dự án Nodejs MVC 24

Hình 5: Sơ đồ sử lý của hệ thống 33

Hình 6: Biểu đồ Use Case tổng quát 34

Hình 7: Biểu đồ Use Case “Quản lý thực đơn” 35

Hình 8: Biểu đồ Use Case “Quản lý nhân viên” 35

Hình 9: Biểu đồ Use Case “Quản lý đặt hàng” 36

Hình 10: Biểu đồ Use Case “Xác thực người dùng” 36

Hình 11: Biểu đồ trình tự UC01: Đăng nhập 40

Hình 12: Biểu đồ trình tự UC02: Đăng ký 42

Hình 13: Biểu đồ trình tự UC03: Xem danh sách món ăn 43

Hình 14: Biểu đồ trình tự UC04: Thêm mới món ăn 45

Hình 15: Biểu đồ trình tự UC05: Cập nhật thông tin món ăn 46

Hình 16: Biểu đồ trình tự UC06: Xóa món ăn 48

Hình 17: Biểu đồ trình tự UC07: Xem danh sách nhân viên 49

Hình 18: Biểu đồ trình tự UC08: Thêm mới nhân viên 50

Hình 19: Biểu đồ trình tự UC09: Cập nhật thông tin thành viên 52

Hình 20: Biểu đồ trình tự UC10: Xóa nhân viên 53

Hình 21: Biểu đồ trình tự UC11: Xem danh sách đơn hàng 54

Hình 22: Biểu đồ trình tự UC12: Xác nhận đơn đặt hàng 56

Hình 23: Biểu đồ trình tự UC13: Chọn nhân viên giao hàng cho đơn đặt hàng 57

Hình 24: Biểu đồ trình tự UC14: Xemchi tiết đơn đặt hàng 58

Hình 25: Biểu đồ trình tự UC15: Cập nhật trạng thái đơn hàng 60

Hình 26: Biểu đồ trình tự UC16: Xem danh sách đơn đặt hàng chờ giao 61

Hình 27: Biểu đồ trình tự UC17: Tạo yêu cầu đặt hàng 63

Hình 28: Biểu đồ trình tự UC18: Xem danh sách các đơn đặt hàng đã đặt 64

Hình 29: Biểu đồ chi tiết các lớp 65

Trang 7

7

Hình 30: Thiết kế CSDL 65

Hình 31: Sơ đồ hoạt động đặt hàng tại trang web 66

Hình 32: Sơ đồ hoạt động xác nhận đơn đặt hàng 66

Hình 33: Sơ đồ hoạt động xác nhận giao hàng cho khách 67

Hình 34: Sơ đồ hoạt động đặt hàng trên ứng dụng mobile 67

Hình 35: Giao diện quản lý đồ ăn 68

Hình 36: Giao diện trang đơn hàng 69

Hình 37: Giao diện trang chi tiết đơn hàng 69

Hình 38: Giao diện trang quản lý nhân viên 70

Hình 39: Giao diện trang menu 71

Hình 40: Giao diện trang chủ 72

Hình 41: Giao diện trang thông tin 73

Hình 42: Giao diện trang liên hệ 74

Hình 43: Giao diện trang giỏ hàng 75

Hình 44: Giao diện trang đơn hàng 76

Hình 45: Giao diện trang chi tiết đơn hàng 77

Hình 46: Giao diện đăng nhập 78

Hình 47: Giao diện màn hình menu 79

Hình 48: Giao diện màn hình chi tiết đơn hàng 80

Hình 49: Giao diện các đơn đặt hàng đã đặt 81

Hình 50: Giao diện màn hình thông tin 82

Hình 51: Giao diện màn hình danh sách đơn hàng chờ giao 83

Hình 52: Giao diện thao tác đơn hàng 84

Hình 53: Giao diện màn hình chi tiết đơn hàng của khách hàng 85

Trang 8

EJS Engine JavaScript Một Template Engine sử dụng

cùng với NodeJS 11

Trang 9

Node.js là một nền tảng dựa vào Chrome Javascript runtime để xây dựng các ứng dụng nhanh, có độ lớn Node.js sử dụng các phần phát sinh các sự kiện (event- driven), mô hình non-blocking I/O để tạo ra các ứng dụng nhẹ và hiệu quả cho các ứng dụng về dữ liệu thời gian thực chạy trên các thiết bị phân tán

NodeJs là một mã nguồn mở, đa nền tảng cho phát triển các ứng dụng phía Server và các ứng dụng liên quan đến mạng Ứng dụng Node.js được viết bằng Javascript và có thể chạy trong môi trường Node.js trên hệ điều hành Window, Linux

Node.js cũng cung cấp cho chúng ta các module Javascript đa dạng, có thể đơn giản hóa sự phát triển của các ứng dụng web sử dụng Node.js với các phần mở rộng

Đặc điểm của Nodejs

Dưới đây là vài đặc điểm quan trọng biến Node.js trở thành sự lựa chọn hàng đầu trong phát triển phần mềm:

- 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 được phản hồi từ các API gọi trước đó

- Node cho phép bạn thực hiện các giao thức mạng ở cấp độ thấp một cách dễ dàng Chẳng hạn như Node có module HTTP cho phép xây dựng một webserver chỉ với vài dòng code, tuy nhiên vì thế mà bạn sẽ phải học nhiều

Trang 10

10

thứ hơn như học về các header của một gói tin HTTP, không như PHP vốn chỉ là một module mở rộng của một webserver có sẵn (như Apache hay NginX…) – tức là PHP dễ dùng hơn Node nhưng lại không cho phép coder thực hiện các công việc ở cấp độ thấp Tuy nhiên vì NodeJS là một framework mã nguồn mở, do đó trên mạng cũng có một số thư viện hỗ trợ viết webserver nhanh hơn và dễ hơn cho coder

- 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

- 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

- Có trình CLI (giao diện dòng lệnh)

- Chạy theo mô hình REPL(Read Eval Print Loop) : hiểu nôm na là: Đọc - Đánh giá - In - Lặp nó biểu diễn môi trường máy tính như màn hình console trong Linux shell nơi bạn có thể gõ các dòng lệnh và hệ thống sẽ trả về các kết quả Node.js cũng có môi trường REPL Nó để thực hiện các tác vụ mong muốn

Trang 11

11

Các thành phần quan trọng trong Nodejs

Lược đồ dưới đây mô tả các thành phần quan trọng của Node.js mà chúng ta

sẽ thảo luận ở các phần tiếp theo

Hình 1: Các thành phần của Nodejs

Kiến trúc của Nodejs

Node sử dụng kiển trúc lập trình hướng sự kiện không đồng bộ, và đây là một tính năng làm cho các ứng dụng Node có thể chạy với hiệu suất cao Chẳng hạn như đối với các ứng dụng bình thường như một chương trình viết bằng C++ thì khi chúng

ta viết chương trình để đọc dữ liệu, chương trình sẽ phải dừng lại ở đoạn code đọc dữ liệu để chờ cho đến khi có dữ liệu để đọc, nếu muốn chương trình tiếp tục vừa chạy các công việc khác vừa đọc dữ liệu thì phải dùng đến đa luồng (multi-threading), tuy nhiên việc dùng đa luồng rất phức tạp và có thể làm chậm server

Node chỉ sử dụng một luồng duy nhất, các câu lệnh nhập xuất không cần phải chờ bằng cách sử dụng Event Loop, cứ mỗi lần có sự kiện xảy ra thì chuyển dữ liệu của sự kiện đó đến các hàm xử lý tương ứng, và trong khi các hàm xử lý đang chạy thì vòng lặp sự kiện vẫn tiếp tục nhận sự kiện và chuyển đến các hàm xử lý tương ứng khác

Ví dụ giả sử chúng ta có dòng code lấy dữ liệu từ cơ sở dữ liệu như sau:

Trang 12

có một nhược điểm làm tiêu tốn nhiều bộ nhớ và CPU

Thay vì dùng đa luồng thì Node sử dụng cơ chế Event Loop để giải quyết việc này, nói một cách đơn giản thì Node sẽ đưa các câu lệnh chờ trên vào một luồng khác

là Event Loop để xử lý riêng, trong khi luồng chính vẫn sẽ chạy các công việc của riêng nó, và khi nào luồng chính “rảnh” rồi thì luồng Event Loop sẽ chuyển các công việc đã thực hiện xong trở về lại luồng chính Và chính vì Node chỉ sử dụng 2 luồng nên tài nguyên hệ thống sẽ không bị chiếm nhiều như khi dùng cơ chế đa luồng, ngoài

ra việc code sử dụng Event Loop đơn giản hơn nhiều, ví dụ:

query('SELECT * from db', function(err, result) {

if (err) throw err;

// xử lý result

});

Trong đoạn code trên, kết quả trả về từ hàm query() thay vì được gán vào một biến thì sẽ được truyền vào một hàm khác là function(err, result){ }, và hàm này sẽ được chuyển vào luồng Event Loop và chờ cho đến khi luồng chính “rảnh” thì mới được chuyển qua

Nodejs được sử dụng ở đâu

Dưới đây là các lĩnh vực mà Node.js được sử dụng như là một sự lựa chọn hoàn hảo:

- 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

Trang 13

13

- Các ứng dụng dựa vào JSON APIs

- Các ứng dụng Single Page Application

1.2 Giới thiệu về Module trong Nodejs

Module trong Nodejs?

Node.js sử dụng kiến trúc Module để đơn giản hóa việc tạo ra các ứng dụng phức tạp Module là giống như các thư viện trong C, C#, Java, … Mỗi module chứa một tập các hàm chức năng có liên quan đến một "đối tượng" của Module Ví

dụ,httplà Module chứa các hàm cụ thể liên quan đến thiết lập HTTP Node.js cung cấp một vài các Module core kèm theo để hỗ trợ chúng ta truy cập file trên hệ thống, tạo các máy chủ HTTP, TCP/UDP, và các hàm tiện ích nhỏ hữu dụng khác

Trước khi sử dụng Module, bạn đơn giản chỉ cần khai báo với hàm require(), như sau:

var http = require(“http”);

require() là hàm trả về tham chiếu tới một Module cụ thể Trong trường hợp của đoạn mã trên, chúng ta đang khai báo một tham chiếu tới http Module và lưu nó vào biến http

Trong đoạn mã trên, chúng truyền một tham số là tên của Module Điều này báo cho Node sẽ tìm một Module tên là http trong thư mục node_modules của ứng dụng Nếu nó không thấy, Node sẽ tiếp tục tìm Module đó ở thư mục global cài đặt node

Lệnh kiểm tra thư mục global cài đặt node_modules, bạn mở giao diện dòng lệnh CMD và gõ lệnh sau:

Trang 14

14

bên trong của Module Nhưng, bạn có thể chìa ra các api là các hàm và/hoặc biến để

sử dụng bên ngoài Module

Global Scope trong Nodejs

Node.js là môi trường cho phép lập trình sử dụng JavaScript ở phía server và chạy trên Google's V8 JavaScript engine Như vậy, chúng ta nên thực hiện các đoạn

mã như khi sử dụng lập trình ở phía Client Ví dụ, chúng ta nên hạn chế sử dụng biến global Tuy nhiên, nếu muốn sử dụng, bạn có thể dễ dàng tạo một biến global bằng việc định nghĩa tên biến không có từ khóa var, như sau:

Npm cung cấp hai chức năng sau:

- Tạo các online repository cho node.js mà có thể tìm kiếm được tại địa chỉ http://search.nodejs.org

- Cung cấp các tiện ích để cài đặt gói Node.js, quản lí version và quản lí phụ thuộc của các gói trong Node.js

Bản thân npm cũng là một gói của Node và được viết theo quy tắc chuẩn của CommonJS

Định dạng của một gói

Góinpmlà một thư mục trong đó chứa một file có tên là package.json, file này lưu các thông tin mô tả về gói Các thông tin này được ghi theo định dạng chuẩn

Trang 15

main: "mainModuleName", // tên module chính

modules: { // danh sách các module đi kèm

Một gói cũng có thể sử dụng các gói khác, các gói này được ghi trong trườngdependencies, ví dụ:

"description" : "Package nay duoc phat trien boi Pho Code",

"homepage" : "http://nodejs.com",

"author" : viet220994@gmail.com

Trường directorieslưu danh sách thư mục của gói, ví dụ:

Trang 16

16

Trường scripts lưu danh sách các lệnh của gói, ví dụ install, activate,

uninstall, update Ví dụ chúng ta xem danh sách các lệnh của gói npm bằng lệnh sau:

npm install <tên gói>

Nếu bạn không biết tên gói thì có thể tìm trên 2 website là npmjs.or

g hoặc search.npmjs.org

Ngoài ra bạn có thể dùng lệnhsearchcủanpmđể tìm nữa, ví dụ giả sử chúng

ta tìm các gói có liên quan đến từ khóamp3thì gõ lệnh sau:

npm search mp3

mediatags Tools extracting for media meta-data tags =coolaj16 uttil m4a aac mp3 id3 jpeg exiv xmp

node3p An Amazon MP3 downloader for NodeJS =ncb000gt

Chúng ta tìm được 2 gói làmediatags vànode3p, nếu muốn càimediatagsthì chỉ cần dùng lệnhinstall:

Trang 17

17

Dòng trên sẽ mở website để xem hướng dẫn về gói npm

1.3.3.2 Xem gói tin

Lệnh view sẽ in nội dung của file package.json, nếu nội dung quá dài thì chúng ta có thể yêu cầu chỉ hiển thị một trường cụ thể nào đó trong file này Ví dụ:

npm view google-openid dependencies

Nếu muốn ứng dụng nào cũng có thể đọc được thì chúng ta cài gói đó vào thư mục cài đặt Node bằng cách thêm tùy chọn -g vào sau lệnh install:

npm install -g openid

1.3.3.4 Liệt kê các gói đã được cài đặt

Lệnhnpm listsẽ liệt kê danh sách các gói đã được cài đặt trong thư mục hiện tại của terminal, danh sách được hiển thị theo dạng cây, bao gồm cả các module con

Trang 18

1.3.3.5 Cập nhật phiên bản mới cho các gói

Để xem danh sách các gói đã cũ (hay trên mạng đã có phiên bản mới) chúng

ta dùng lệnh outdated:

>npm outdated

less@1.3.3 node_modules/less current=1.3.1

gdata-js@2.0.1 node_modules/gdata-js current=0.0.4

consolidate@0.7.0 node_modules/consolidate current=0.5.0

Lệnh outdated hiển thị danh sách các gói đã cũ bao gồm số phiên bản đang cài

và số phiên bản mới nhất Để cập nhật một gói thì chúng ta dùng lệnh update, ví dụ:

Trang 19

19

1.4 Xây dựng ứng dụng MVC với Express trong Nodejs

EventEmitter

EventEmitterlà một lớp trong Node, lớp này có chức năng chính là phát sinh

sự kiện, vì Node chạy theo hướng lập trình sự kiện nên lớp này là một trong số những lớp cốt lõi của Node, cũng vì thế nên dù EventEmitter không liên quan gì tới web nhưng đóng một vai trò rất quan trọng

Phương thứcemit()là phương thức của lớpEventEmitternhưng chúng ta đã cho kế thừa trong lớpPulsernên có thể gọi từ lớpPulser Phương thứcemit()sẽ làm công việc phát sinh một sự kiện để các đối tượng khác có thể lắng nghe và “bắt” sự kiện này, tham số đầu vào của phương thứcemit()gồm có 1 chuỗi là tên sự kiện dùng

để phân biệt các sự kiện, sau đó là danh sách các tham số, ở đây chúng ta không đưa vào tham số nào, nhưng giả sử nếu muốn bạn có thể truyền bất cứ thứ gì cũng được,

ví dụemit('pulse', 1, 'hello world', 2.7465)

Tiếp theo chúng ta tạo một đối tượng lớpPulser(),sau đó chúng ta cho đối tượng này “lắng nghe” sự kiệnpulsebằng phương thứcon(),phương thức này nhận vào tên sự kiện và hàm sẽ xử lý sự kiện đó, ở đây sự kiện phát đi không mang theo tham số nào, nhưng giả sử như nếu có thì nếu muốn bắt các tham số đó chúng ta chỉ cần khai báo trong hàm xử lý là được

Trang 20

20

Web Server

Web Server là một ứng dụng phần mềm có thể xử lý các HTTP request được gửi bởi HTTP Client (ví dụ: trình duyệt web) và trả về một trang web trong phản hồi tới Client Web Server thường gửi các tài liệu html bên cạnh các ảnh cũng như style sheet và các đoạn Javascript

Một ứng dụng web thường được chia thành 4 lớp như sau:

- Data- Lớp này bao gồm các Database và bất kì các nguồn dữ liệu nào

Web Framework Express

Express là một framework nhỏ và tiện ích để xây dựng các ứng dụng web, cung cấp một lượng lớn của tính năng mạnh mẽ để phát triển các ứng dụng web và

Trang 21

21

mobile Nó 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 Dưới đây là các tính năng cơ bản của Express framework

- Cho phép thiết lập các lớp trung gian để trả về các HTTP request

- Định nghĩ bảng 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

Các module được phân loại thành các chức năng chính sau đây:

- Router: có chức năng điều hướng các yêu cầu HTTP đến các hàm xử lý

tương ứng Đây cũng là tính năng có trong các web framework phổ biến khác

như Ruby on Rails, Django, Sinatra…

- Static file servers: có các hàm trả về các file tài nguyên cho client

- Framework: hỗ trợ phát triển ứng dụng, hầu hết các framework này đều

được phát triển dựa trên các framework phổ biến khác như Django, Rails, WebMachine, CakePHP… trong đó Express là web framework phổ biến nhất của Node

- Middleware: các module loại này hoạt động giữa phần nhận gói tin HTTP

và phần chuyển gói tin đó đến các hàm xử lý

Để cài đặt Express framework sử dụng npm như sau:

$ npm install express –save

Lệnh trên lưu phần cài đặt trong thư mục node_modules và tạo thư mục express bên trong thư mục đó Dưới đây là các thành phần module quan trọng được cài đặt cùng với express:

- body-parser- Đây là một lớp trung gian node.js để xử lí JSON, dự liệu thô, text và mã hóa URL

- cookie-parser - Chuyển đổi header của Cookie và phân bố đến các req.cookies

Trang 22

22

- multer - Đây là một thành phần trung gian trong node.js để xử lí phần multipart/form-data

Đối tượng request và respone trong Nodejs

Ứng dụng Express sử dụng một hàm callback có các tham số là các đối tượngrequestvàresponse

- Đối tượng Request- Đối tượng này biểu diễn một HTTP request và có các thuộc tính cho các request như các chuỗi truy vấn, tham số, body, HTTP header và những phần khác

- Đối tượng Response - Đối tượng này biểu diễn HTTP response được ứng dụng Express gửi đi khi nó nhận về một HTTP request

Mô hình MVC trong Express

C là Controller: Nhận lệnh từ người dùng, gửi lệnh đến cho Model để cập nhập

dữ liệu, truyền lệnh đến View để cập nhập giao diện hiển thị

Trang 23

23

Hình 3: Mô hình MVC trong Nodejs

Quy trình xử lý chung của web thường như sau:

- Người dùng gọi yêu cầu xử lý tại một trang bất kỳ(giả sử trang chủ)

- “Controller” nhận yêu cầu này và đưa lệnh xử lý yêu cầu đó Các lệnh thực thi với phần “View” thì cập nhập hoặc phục vụ yêu cầu trang web, với

“Model” thì để trình diễn logic Ta giả sử lệnh yêu cầu có yếu tố logic

- “Model” thực thi phần logic được lấy từ cơ sở dữ liệu và gửi trả lại phản hồi dựa trên hướng dẫn của “Controller”

- “Controller” truyền dữ liệu ra phần “View”, cập nhận giao diện hiển thị cho người dùng

Bản thân Express không được xây dựng theo mô hình MVC, nhưng module express-generator dùng để tạo một project Express thì lại tạo cho chúng ta một ứng dụng gần như là giống với MVC bởi vì các project này tồn tại 2 thứ:

Thư mục views chứa các file template (file có phần mở rộng là .ejs), các file này được dùng để hiển thị dữ liệu, tức là tương tự với phần Views trong MVC

Trang 24

1.4.6.2 Cách xây dựng mô hình MVC trong Express

Đầu tiên tạo 1 folder project

Tiếp theo, bạn gõ lện cd vào thư mục chứa project

Chúng ta install express cấu trúc MVC

express sessions css less hogan app

Chúng ta sẽ được một dự án Nodejs MVC tương tự như sau:

Hình 4: Cấu trúc thư mục dự án Nodejs MVC 1.4.6.3 View trong Express

Trong mô hình MVC, phần View để có thể hiển thị dữ liệu động cho một trang nào đó, thì chúng ta cần phải có các template dựng sẵn

Đối với lập trình web application trên NodeJS, chúng ta có thể sử dụng một

số TemplateEngine sau:

- EJS: Là một JavaScript Template library vô cùng dễ sử dụng, cú pháp đơn giản, rõ ràng

- Mustache: Là một Logic-less templates cũng khá nổi tiếng với những ai hay code java script để bind dữ liệu từ chuỗi JSON Template này sử dụng trên

Trang 25

MySQL là một hệ quản trị cơ sở dữ liệu SQL rất mạnh và miễn phí Nếu bạn

đã cài MySQL trong máy rồi thì bạn chỉ cần tạo một CSDL có tên tùy ý (không tạo bảng) Nếu chưa thì bạn lên trang chủ của MySQL và tải bản Community về tại địa chỉ http://dev.mysql.com /downloads/ MySQL là một hệ quản trị cơ sở dữ liệu, phần lõi chịu trách nhiệm lưu trữ, đọc/ghi dữ liệu… tất cả đều được thực hiện qua dòng lệnh, do đó nếu muốn bạn có thể tải thêm phần mềm MySQL Workbench về, đây là phần mềm cho phép bạn làm việc với MySQL thông qua giao diện GUI, nghĩa là thay

vì dùng dòng lệnh thì bạn chỉ cần thực hiện các thao tác click chuột đơn giản

Quá trình cài đặt MySQL rất đơn giản, bạn chỉ cần lưu ý một số thứ như tên tải khoản truy cập, thường là root, mật khẩu, chế độ cài (Developement, Deploy…)…

Sau khi đã cài đặt xong, chúng ta có thẻ bắt đầu truy cập server của MySQL

để tạo CSDL Ở đây mình dùng MySQL Workbench cho nhanh Khi mở MySQL Workbench lên, bạn sẽ phải tạo những cái gọi làConnections, nếu bạn chưa từng làm việc với Connection thì có thể hình dung đây giống như là các nút để chúng ta thực hiện kết nối tới server vậy Để tạo một connection thì chúng ta click vào nút dấu + phía trên bên trái màn hình, sau đó điền các thông tin như tên connection, host là 127.0.0.1, port là 3306, username là tên đăng nhập mà bạn tạo khi cài MySQL, vậy

là xong

Sequelize

Sequelize là một ORM(Object Relation Mapping)dành cho Node.js và io.js

Nó hỗ trợ bạn truy cập một cách dễ dàng đến PostgreSQL, MySQL, MariaDB, SQLite

và MSSQL cùng với các tính năng như là relations, transaction, replication

Trang 26

26

1.5.2.1 Cài đặt Sequelize

Để cài đặt module Sequelize cho dự án chỉ cần gọi dòng lệnh:

npm install save sequelize

Để module Squelize có thể tương tác với hệ quản trị cơ sở dữ liệu MySQL ta chạy dòng lệnh:

npm install –save mysql

1.5.2.2 Tạo connection pool

Sequelize sẽ tạo 1 connection pool khi được khởi tạo vì vậy bạn chỉ nên tạo duy nhất 1 instance trên 1 database:

var sequelize = new Sequelize('database', 'username', 'password', {

1.5.2.3 Các model trong Sequelize

Để tạo 1 ánh xạ giữa 1 model và 1 table ta sử dụng phương thức define Sequelize sẽ tự động tạo các attributes là createdAt và updatedAt (nếu bạn không muốn sử dụng hoặc chỉ sử dụng 1 trong 2 attributes thì có thể tham khảo ở phần config sau đây):

var Project = sequelize.define('project', {

title: Sequelize.STRING,

description: Sequelize.TEXT

})

Ngoài ra bạn có thể thêm các option cho các attributes:

var Task = sequelize.define('task', {

})

Trang 27

1.5.2.4 Query trong Sequelize

Để select một vài attribute, bạn có thể sử dụng attributes optin:

Trang 28

// SELECT * FROM post WHERE char_length(status) = 6;

Các toán tử bạn có thể sử dụng cùng với where

$and: {a: 5} // AND (a = 5)

$or: [{a: 5}, {a: 6}] // (a = 5 OR a = 6)

$not: true, // IS NOT TRUE

$between: [6, 10], // BETWEEN 6 AND 10

$notBetween: [11, 15], // NOT BETWEEN 11 AND 15

$in: [1, 2], // IN [1, 2]

$notIn: [1, 2], // NOT IN [1, 2]

$like: '%hat', // LIKE '%hat'

$notLike: '%hat' // NOT LIKE '%hat'

$iLike: '%hat' // ILIKE '%hat' (case insensitive) (PG only)

$notILike: '%hat' // NOT ILIKE '%hat' (PG only)

$like: { $any: ['cat', 'hat']}// LIKE ANY ARRAY['cat', 'hat']

Raw Query: Đôi khi bạn muốn excute một raw query, khi đó bạn có thể sử dụng sequelize.query

sequelize.query( "SELECT * FROM `users`" );

1.5.2.5 Relations và Associations

Các loại relation gồm: One-To-One associations, One-To-Many associations, Belongs-To-Many associations

One-To-One associations

Trang 29

29

BelongsTo:

var Player = this.sequelize.define('player', {/* attributes */})

Player.belongsTo(Team);

Has one:

var User = sequelize.define('user', {/* */})

var Project = sequelize.define('project', {/* */})

// One-way associations

Project.hasOne(User)

One-To-Many associations

var User = sequelize.define('user', {/* */})

var Project = sequelize.define('project', {/* */})

Project.hasMany(User, {as: 'Workers'})

Belongs-To-Many associations

Project.belongsToMany(User, {through: 'UserProject'});

User.belongsToMany(Project, {through: 'UserProject'});

1.6 Sơ lược về Socket và Socket.io

Trước tiên, Socket là 1 công nghệ Đừng nhầm lẫn giữa Socket.IO và Socket Socket.IO không phải là mô hình Socket duy nhất hiện nay, và cũng không phải là

mô hình web socket duy nhất hiện nay Socket là cách bạn tổ chức mô hình server để một trong 2 bên luôn trong tình trạng sẵn sàng trả lời bên kia và ngược lại

client-Để đảm bảo việc này, kết nối giữa Client và Server phải ở trạng thái “keep-alive” và phải luôn xảy ra quá trình đồng bộ giữa Client-Server Socket sẽ mang lại khả năng trả lời tức thì từ một trong 2 bên khi bên kia đưa ra một sự kiện, thay vì phải thực thi lại một loạt các thủ tục kết nối phức tạp như trước, và ứng dụng của bạn sẽ trở thành ứng dụng thời gian thực ví dụ: Yahoo Messenger, Skype v.v… đều là các ứng dụng được xây dựng theo mô hình Socket

Trong lập trình web trước đây, việc xây dựng client-server theo mô hình socket phải thông qua các phần mềm thứ Vì mô hình socket không phù hợp với các ngôn ngữ lập trình Server như: PHP, ASP.NET, JSP v.v… Các ngôn ngữ này luôn làm việc

Trang 30

- Thứ hai: Node.js chạy non-blocking việc hệ thống không phải tạm ngừng để

xử lý xong một request sẽ giúp cho server trả lời client gần như ngay tức thì

- Thứ ba: lập trình socket yêu cầu bạn phải xây dựng được mô hình lắng nghe

- trả lời từ cả 2 bên Nói khác đi, vai trò của client và server phải tương đương nhau, mà client thì chạy bằng javascript, nên nếu server cũng chạy bằng javascript nữa, thì việc lập trình sẽ dễ dàng và thân thiện hơn

Chính vì những đặc điểm này, socket.io ra đời Tuy nhiên, khi bạn thực sự am hiểu về Node.js, http request header, bạn hoàn toàn có thể viết một socket cho riêng mình

Android, Nodejs và Socket IO

Khi xây dựng ứng dụng Android, chúng ta thường phải thực hiện các giao tiếp với server như đăng kí, đăng nhập, gửi tin nhắn.NodeJsvàSocketIOlà một công cụ cực kì đơn giản và hữu ich để xây dựng server Khi xây dựng các ứng dụng ChatApp hay Push Notification thìNodeJsluôn là lựa chọn hàng đầu

Xây dựng client Android

Đầu tiên, phải thêm thư viện SocketIO vào filebuild.grable

dependencies {

compile 'com.github.nkzawa:socket.io-client:0.3.0'

}

Trang 31

31

Tiếp theo thêm quyền truy cập Internet vào fileAndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

Trong file MainActivity.java, khai báo biến mSocket

private Socket mSocket;

Kết nối với server và gửi sự kiện lên server bằng hàm sau:

mSocket.connect();

mSocket.emit("tên sự kiện", [data]);

Để nhận sự kiện từ server gửi lên client sử dụng hàm sau:

mSocket.on("tên sự kiện", <tên hàm sử lý>);

private Emitter.Listener onLogin = new Emitter.Listener() {

@Override

public void call(Object args) {

JSONObject data = args[0];

}

};

Trang 32

32

CHƯƠNG 2 PHÂN TÍCH VÀ XÂY DỰNG GIẢI PHÁP ORDER ONLINE 2.1 Phân tích yêu cầu và lựa chọn giải pháp công nghệ

Phân tích yêu cầu

Để giải quyết được vấn đề về order online, cần giải quyết được các yêu cầu cơ bản sau:

- Xây dựng 1 server cho phép cửa hàng quản lý các yêu cầu đặt hàng online của khách hàng

- Xây dựng kênh đặt hàng online của khách hàng thông qua trang web và ứng dụng smartphone

- Xây dựng ứng dụng cho phép shipper quản lý các đơn hàng cần giao, cũng như cho phép quản lý cửa hàng quản lý được các đơn hàng cần giao khách hàng

Giải pháp công nghệ

Để xây dựng một server đáp ứng yêu cầu quản lý được các yêu cầu đặt hàng online của khách hàng một cách nhanh chóng và tiết kiệm, em đã quyết định lựa chọn server xây dựng bằng Nodejs, server Nodejs cho phép sử lý các yêu cầu một cách nhanh chóng và đặc biệt là tương tác thời gian thực

Xây dựng kênh đặt hàng của khách hàng thông qua trang web, và ứng dụng đặt hàng order online trên smartphone android tương tác thời gian thực với server

Xây dựng ứng dụng cho phép shipper quản lý các đơn hàng cần giao, cũng như cho phép quản lý cửa hàng quản lý được các đơn hàng cần giao của khách hàng thông qua ứng dụng android tương tác thời gian thực với server

Trang 33

- Server lấy thông tin đơn hàng từ client hiển thị lên trang quản lý, ở đây quản

lý cửa hàng sẽ tiến hành xác nhận, tinh chỉnh và chọn nhân viên giao hàng

- Thông tin về đơn hàng của khách hàng được gửi về app android của nhân viên giao hàng

- Nhân viên nhận hàng và tiến hành giao hàng cho khách hàng, sau khi giao hàng thành công sẽ xác nhận thông qua ứng dụng lên server

Trang 34

Nhân viên Nhân viên giao hàng của cửa hàng

Khách hàng Khách hàng có nhu cầu đặt đồ ăn

2.2.2.2 Biểu đồ Use Case hệ thống

Hình 6: Biểu đồ Use Case tổng quát

Trang 35

35

Hình 7: Biểu đồ Use Case “Quản lý thực đơn”

Hình 8: Biểu đồ Use Case “Quản lý nhân viên”

Trang 36

36

Hình 9: Biểu đồ Use Case “Quản lý đặt hàng”

Hình 10: Biểu đồ Use Case “Xác thực người dùng”

Trang 37

UC04: Thêm mới món ăn Thêm mới món ăn vào CSDL

UC05: Cập nhật thông tin món ăn Cập nhật các thông tin về món ăn

UC07: Xem danh sách nhân viên Hiển thị danh sách nhân viên

UC08: Thêm mới nhân viên Thêm mới nhân viên vapf CSDL

UC09: Cập nhật thông tin nhân viên Cập nhật thông tin của nhân viên

UC10: Xóa nhân viên Xóa nhân viên khỏi CSDL

UC11: Xem danh sách đơn hàng Hiện danh sách các đơn đặt hàng

UC12: Xác nhận đơn đặt hàng Xác nhận đơn đặt hàng của khách hàng UC13: Chọn nhân viên giao hàng cho

đơn đặt hàng Gán đơn đặt hàng cho nhân viên giao hàng UC14: Xem chi tiết đơn đặt hàng Xem chi tiết đơn đặt hàng

UC15: Cập nhật trạng thái đơn hàng Cập nhật trạng thái đơn hàng

UC16: Xem danh sách đơn đặt hàng

UC17: Tạo yêu cầu đặt hàng Tạo yêu cầu đơn đặt hàng

UC18: Xem danh sách các đơn hàng

đã đặt

Khách hang xem danh sách các đơn đặt hàng đã đặt của mình

Trang 38

Khách hàng

UC09: Cập nhật thông tin nhân viên x

UC13: Chọn nhân viên giao hàng cho đơn đặt

UC16: Xem danh sách đơn đặt hàng chờ giao x

Trang 39

39

Thiết kế các yêu cầu chức năng

2.2.3.1 Module 01

UC01: Đăng nhập

Mô tả Use Case

Mô tả Cho phép tác nhân đăng nhập vào hệ thống

hàng/ Nhân viên Kích hoạt

Actor bấm vào nút đăng nhập

Điều kiện chuyển Đăng nhập thành công

Hoạt động

Luồng chính: Đăng nhập thành công

1 Actor nhập tài khoản và mật

khẩu và click vào button [Đăng

nhập] trên trang đăng nhập,

hoặc trên màn hình đăng nhập

của ứng dụng android

2 Kiểm tra tài khoản / mật khẩu là chính xác, sau đó chuyển tới trang, màn hình default với role tương ứng Thông báo của hệ thống

MS01 “Đăng nhập thành công !”

Message thông báo khi quá trình đăng nhập thành công

Trang 40

40

MS02 “Đăng nhập thất bại do sai tên đăng nhập hoặc mật khẩu ! ”

Message thông báo khi admin nhập sai tài khoản/mật khẩu

Biểu đồ trình tự UC01: Đăng nhập

Hình 11: Biểu đồ trình tự UC01: Đăng nhập

UC02: Đăng ký

Mô tả Use Case

Mô tả Cho phép actor đăng ký tài khoản hệ thống

Tác nhân Khách hàng Kích hoạt Actor bấm vào nút

đăng ký

Điều kiện tiên quyết

Điều kiện chuyển Đăng ký thành công

Ngày đăng: 02/11/2017, 08:37

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[10]. GitHub, 2017. Sequelizejs in Nodejs in http://docs.sequelizejs.com/en/v3/ Link
[1]. Basarat Ali Syed, 2014. Beginning Node.js. O’Reilly Media, Inc., Sebastopol, CA, USA Khác
[2]. Mike Cantelon &amp; TJ Holowaychuck, 2015. Node.js IN Action. MANNING, O’Reilly Media, Inc., Sebastopol, CA, USA Khác
[3]. Sandro Pasquali, November 2013. Mastering Node.js. PACKT O’Reilly Media, Inc., Sebastopol, CA, USA Khác
[4]. Pedro Teixeira, 2012. PROFESSIONAL Node.js® BUILDING JAVASCRIPT- BASED SCALABLE SOFTWARE. Sons, Inc., Sebastopol, CA, USA Khác
[5]. Alex Young and Marc Harter, 2014. Node.js in Practice. Noordhuis, Inc., Sebastopol, CA, USA Khác
[6]. Azat Mardan, 2014. Practical Node.js: Building Real-World Scalable Web Apps. O’Reilly Media, Inc., Sebastopol, CA, USA Khác
[7]. Guillermo Rauch, 2012. Smashing Node.js: JavaScript Everywhere. O’Reilly Media, Inc., Sebastopol, CA, USA Khác
[8]. George Ornbo, 2012. Sams Teach Yourself Node.js in 24 Hours. O’Reilly Media, Inc., Sebastopol, CA, USA Khác
[9]. Edward Jiang, 2016. Node.js and Express for Android &amp; iOS. O’Reilly Media, Inc., Sebastopol, CA, USA Khác

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w