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

XÂY DỰNG hệ THỐNG QUẢN lý CHO rạp CHIẾU PHIM CGV – hà nội

65 1,5K 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 65
Dung lượng 2,29 MB

Nội dung

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

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 đế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 để có thể hoàn thành tốt đồ án XÂY DỰNG HỆ THỐNG QUẢN LÝ CHO RẠP CHIẾU PHIM CGV – HÀ NỘI

Em xin bày tỏ lòng biết ơn đến ban giám đốc công ty 2NF và anh Nguyễn Bảo Ngọc đã tạo điều kiện giúp đỡ và hỗ trợ 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 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

NÔNG TRUNG KIÊN

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

NÔNG TRUNG KIÊN

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

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

1.1 Giới thiệu về Node.js 8

Node.js là gì? 8

Đặc điểm của Node.js 8

Các thành phần quan trọng trong Node.js 10

Kiến trúc của Node.js 10

Node.js được sử dụng ở đâu 11

1.2 Giới thiệu về Module trong Node.js 12

Module trong Node.js? 12

Global Scope trong Node.js 12

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

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

Tìm một gói 14

Một số lệnh trong NPM 15

1.4 Xây dựng ứng dụng MVC với Express trong Node.js 17

EventEmitter 17

HTTP – Server 18

Web Server 18

Web Framework Express 19

Đối tượng request và respone trong Node.js 20

Mô hình MVC trong Express 21

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

MySQL 23

Sequelize 24

1.6 Sơ lược về Android, Socket và Socket.IO 29

Android 29

Node.js và Socket.IO 33

CHƯƠNG 2: PHÂN TÍCH VÀ XÂY DỰNG GIẢI PHÁP 36

2.1 Phân tích yêu cầu và lựa chọn giải pháp công nghệ 36

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

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

2.2 Phân tích hệ thống “Quản lý phim cho rạp CGV” 36

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

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

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

Biểu đồ lớp 51

Thiết kế cơ sở dữ liệu 52

Trang 4

4

CHƯƠNG 3: HỆ THỐNG QUẢN LÝ PHIM CHO RẠP CHIẾU PHIM CGV

53

3.1 Biểu đồ hoạt động 53

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

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

KẾT LUẬN 64

TÀI LIỆU THAM KHẢO 65

Trang 5

5

MỞ ĐẦU

CJ CGV trực thuộc CJ Group - một trong những tập đoàn kinh tế đa ngành

lớn nhất của Hàn Quốc và tập đoàn có mặt ở 21 quốc gia trên toàn cầu CJ CGV là

một trong top 5 cụm rạp chiếu phim lớn nhất toàn cầu và là nhà phát hành, cụm rạp chiếu phim lớn nhất Việt Nam với mục tiêu là trở thành hình mẫu công ty điển hình

đóng góp cho sự phát triển của ngành công nghiệp điện ảnh Việt Nam CJ CGV có

sự quan tâm đến đối tượng khán giả ở các khu vực không có điều kiện tiếp cận nhiều với điện ảnh, bằng cách tạo cơ hội để họ có thể thưởng thức những bộ phim chất

lượng cao thông qua các chương trình vì cộng đồng như Trăng cười và Điện ảnh

cho mọi người

Nhận thấy tiềm năng rất lớn của CJ CGV trong đời sống xã hội cũng như tính phổ biến của lĩnh vực công nghệ thông tin trong lĩnh vực quản lí rạp chiếu phim, công

ty đã giao cho em đề tài này nhằm yêu cầu xây dựng lại hệ thống quản lý rạp cũng như chứng tỏ khả năng áp dụng kiến thức chuyên ngành vào thực tế để em có thể hoàn thành quá trình học tập và nhận bằng tốt nghiệp sau khi hoàn thành đề án này

Sau quá trình tìm hiểu và nghiên cứu thực tế, em đã quyết định lựa chọn Node.js để xây dựng một hệ thống máy chủ, Socket.IO để xử lí đồng bộ thời gian thực và Android để xây dựng ứng dụng cho người dùng Và đây cũng chính là lý do

mà em chọn đề tài: “XÂY DỰNG HỆ THỐNG QUẢN LÝ CHO RẠP CHIẾU PHIM CGV – HÀ NỘI”

Em sẽ trình bày đề tài của mình dưới những nội dung sau:

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

CHƯƠNG 2: PHÂN TÍCH VÀ XÂY DỰNG GIẢI PHÁP

CHƯƠNG 3: HỆ THỐNG QUẢN LÝ PHIM CHO RẠP CHIẾU PHIM CGV

Trang 6

6

DANH MỤC HÌNH ẢNH

Hình 1: Các thành phần của Node.js 10

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

Hình 3: Mô hình MVC trong Node.js 21

Hình 4: Cấu trúc thư mục dự án Node.js MVC 23

Hình 5: Sơ đồ hệ thống 36

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

Hình 7: Biểu đồ Use Case “Quản lý đặt vé” 38

Hình 8: Biểu đồ Use Case “Quản lý người dùng” 39

Hình 9: Biểu đồ Use Case “Quản lý giá vé” 39

Hình 10: Biểu đồ Use Case “Quản lý lịch chiếu” 39

Hình 11: Biểu đồ Use Case “Quản lý in vé” 40

Hình 12: Biểu đồ Use Case “Quản lý phim” 40

Hình 13: Biểu đồ Use Case “Thống kê vé bán được theo phim” 40

Hình 14: Biểu đồ Use Case “Xác thực tài khoản” 41

Hình 15: Sơ đồ các lớp 51

Hình 16: Cơ sở dữ liệu 52

Hình 17: Sơ đồ hoạt động đặt vé 53

Hình 18: Giao diện quản lý đặt vé 54

Hình 19: Giao diện chọn ghế 54

Hình 20: Giao diện quản lý phim 55

Hình 21: Giao diện quản lý giá vé 55

Hình 22: Giao diện quản lý khách hàng 56

Hình 23: Giao diện tạo lịch chiếu 56

Hình 24: Giao diện danh sách lịch chiếu 57

Hình 25: Giao diện thống kê vé đã bán 57

Hình 26: Giao diện in vé 58

Hình 27: Giao diện trang chủ 59

Hình 28: Giao diện bảng điều hướng 60

Trang 7

7

Hình 29: Giao diện đăng nhập 60

Hình 30: Giao diện đăng ký tài khoản 61

Hình 31: Giao diện danh sách phim 61

Hình 32: Giao diện chi tiết phim 62

Hình 33: Giao diện lịch chiếu của phim 62

Hình 34: Giao diện chọn ghế 63

Hình 35: Giao diện xác nhận đặt vé 63

Trang 8

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

Node.js là một mã nguồn mở, đa nền tảng cho phát triển các ứng dụng phía Máy chủ 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 Node.js

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

- Node cho phép chúng ta 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à chúng ta sẽ phải học nhiều 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

Trang 9

9

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ì Node.js 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 Máy chủ trả lại các phản hồi với một cách không khóa và tạo cho Máy chủ 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 Node.js 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 chúng ta 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 10

10

Các thành phần quan trọng trong Node.js

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 chương tiếp theo

Hình 1: Các thành phần của Node.js

Kiến trúc của Node.js

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 máy chủ

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:

result = query('SELECT * from db');

// xử lý result

Trang 11

11

Đối với các chương trình bình thường thì khi chạy đến dòng code trên, luồng chạy chương trình đó sẽ phải dừng lại để đợi quá trình xử lý từ cơ sở dữ liệu thực hiện xong và trả về rồi mới tiếp tục được, trong quá trình đợi đó sẽ có nhiều yêu cầu khác xảy ra và hiệu suất phần mềm sẽ giảm do lãng phí tài nguyên, để giải quyết tình trạng đó thì chúng ta có thể dùng cơ chế đa luồng để xử lý, tuy nhiên đa luồng

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

Node.js đượ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

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

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

Trang 12

12

1.2 Giới thiệu về Module trong Node.js

Module trong Node.js?

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ụ, http là 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, chúng ta đơ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, chúng ta mở giao diện dòng lệnh CMD và gõ lệnh sau:

npm root –g

Quay trở lại vấn đề, chúng ta có thể chỉ rõ file bằng việc truyền vào tham số là

đường dẫn tương đối /path/to/my/module.js hoặc tuyệt đối /path/to/my/module.js

Tóm lại, Module là các đoạn mã được đóng gói lại với nhau Mã trong một Module thường là private – nghĩa là các hàm, biến được định nghĩa và truy cập bởi bên trong của Module Nhưng, chúng ta 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 Node.js

Node.js là môi trường cho phép lập trình sử dụng JavaScript ở phía máy chủ 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 Khách hàng Ví dụ, chúng ta nên hạn chế sử dụng

Trang 13

Một lần nữa, biến global nên được hạn chế đến mức tối đa Vì thế, hãy cần thận

và nhớ sử dụng từ khóa var để khai báo biến

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

Npm (Node Package Manager) là một phần mềm quản lý và phân phối gói dành cho Node, nếu chúng ta có sử dụng các hệ điều hành Linux thì npm giống mấy thứ như apt-get, rpm, yum, MacPorts v.v vậy Mục đích của npm là phân phối các gói Node trên mạng Internet cho tất cả người dùng chỉ với vài dòng lệnh, chúng ta có thể tìm các gói, tải về và cài đặt rất nhanh chóng

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ỉ

Thông thường một filepackage.jsoncó nội dung như sau:

{

name: "packageName", // tên gói

version: "1.0", // số phiên bản

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

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

Trang 14

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 Optimus",

"homepage" : "http://node.js.com",

"author" : kienctn15@gmail.com

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

directories : { lib: './lib', bin: './bin' }

Trường scriptslư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:

Trang 15

node3p An Amazon MP3 downloader for Node.js =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:

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

Trang 16

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ệnhnpmlistsẽ 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 17

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 18

18

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ớp Pulser 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 chúng ta 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ện pulsebằ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

HTTP – Server

Đối tượng HTTP Server là đối tượng chính trong một ứng dụng Node, mục đích chính của đối tượng này là lắng nghe và giao tiếp với các kết nối HTTP Mặc dù sau này hầu hết (hoặc chắc chắn) chúng ta sẽ sử dụng một web framework khác là Express

để phát triển ứng dụng vì framework này đã đơn giản hóa mọi thứ, chúng ta chỉ cần quan tâm đến việc phát triển các tính năng chứ không cần quan tâm đến mấy thứ cấp dưới như giao thức, gói tin…v.v nhưng vì Express cũng được xây dựng dựa trên đối tượng HTTP

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 Khách hàng 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

Trang 19

19

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

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

- Client - Lớp này bao gồm các trình duyệt web và các ứng dụng có thể tạo ra

các HTTP request đến Web Server

- Server - Lớp này bao gồm các Web Server có thể can thiệp các request được

tạo bởi Client và trả về các phản hồi (response)

- Business - Lớp này bao gồm ứng dụng trên Máy chủ có thể được tận dụng

bởi các Web Server để thực hiện các tiến trình xử lý cần thiết Lớp này tương tác với lớp Data qua các chương trình bên ngoài

- 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à 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

Trang 20

20

- 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 khách hàng

- 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

- 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 Node.js

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

Trang 21

21

- Đố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ị

Hình 3: Mô hình MVC trong Node.js

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ủ)

Trang 22

22

- “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ật 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

Thư mục routes được dùng để chuyển hướng các URL đến các hàm xử lý tương ứng, tức là tương tự với Controller trong MVC

Vậy thì để ứng dụng của chúng ta vận hành theo đúng mô hình MVC thì thành phần còn thiếu là Model Model có chức năng lưu trữ dữ liệu, thay đổi/cập nhật dữ liệu, hỗ trợ truy vấn dữ liệu Và dĩ nhiên là code lưu trữ model cũng nên được lưu trong một thư mục riêng tách rời với views và routes

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, chúng ta 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 Node.js MVC tương tự như sau:

Trang 23

23

Hình 4: Cấu trúc thư mục dự án Node.js 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 Node.js, 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 rất nhiều ngôn ngữ, phiên bản sử dụng cho Node.js các chúng ta có thể tìm tại trang sau: https://github.com/raycmorgan/Mu

- Để khỏi bỡ ngỡ với quá nhiều engine, chúng ta sẽ cùng nhau đi từ những phần nhỏ của nó Hôm nay chúng ta sẽ bắt đầu từ engine EJS

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

MySQL

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

ta đã cài MySQL trong máy rồi thì chúng ta chỉ cần tạo một CSDL có tên

lànotes (không tạo bảng) rồi có thể bỏ qua phần này và kéo xuống phần tạo model

Trang 24

24

phía dưới Nếu chưa thì chúng ta 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 chúng ta có thể tải thêm phần mềm MySQL Workbench

về, đây là phần mềm cho phép chúng ta 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ì chúng ta 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, chúng ta 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 máy chủ của MySQL

để tạo CSDL Ở đây mình dùng MySQL Workbench cho nhanh Khi mở MySQL Workbench lên, chúng ta sẽ phải tạo những cái gọi làConnections, nếu chúng ta 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 máy chủ 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à chúng ta 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ợ chúng ta 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

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

Trang 25

25

1.5.2.2 Tạo connection pool

Sequelize sẽ tạo 1 connection pool khi được khởi tạo vì vậy chúng ta 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 không muốn

sử dụng hoặc chỉ sử dụng 1 trong 2 attributes thì ta có thể tham khảo ở phần config sau đây):

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

title: Sequelize.STRING,

description: Sequelize.TEXT

})

Ngoài ra chúng ta có thể thêm các option cho các attributes:

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

Trang 26

1.5.2.4 Query trong Sequelize

Để select một vài attribute, chúng ta có thể sử dụng attributes option:

Model.findAll({

attributes: ['foo', 'bar']

});

Mệnh đề Where

Trang 28

28

Các toán tử chúng ta 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 chúng ta muốn excute một raw query, khi đó chúng ta có thể sử dụng sequelize.query

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

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

, Team = this.sequelize.define('team', {/* attributes */});

Player.belongsTo(Team);

Has one:

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

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

// One-way associations

Trang 29

29

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ề Android, Socket và Socket.IO

Android

Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng Ban đầu, Android được phát triển bởi Tổng công ty Android, với sự hỗ trợ tài chính từ Google và sau này được chính Google mua lại vào năm 2005 Android ra mắt vào năm 2007 cùng với tuyên bố thành lập Liên minh thiết bị cầm tay mở: một hiệp hội gồm các công ty phần cứng, phần mềm, và viễn thông với mục tiêu đẩy mạnh các tiêu chuẩn mở cho các thiết bị di động Chiếc điện thoại đầu tiên chạy Android được bán vào tháng 10 năm 2008

Android có mã nguồn mở và Google phát hành mã nguồn theo Giấy phép Apache Chính mã nguồn mở cùng với một giấy phép không có nhiều ràng buộc đã cho phép các nhà phát triển thiết bị, mạng di động và các lập trình viên nhiệt huyết được điều chỉnh và phân phối Android một cách tự do Ngoài ra, Android còn có một cộng đồng lập trình viên đông đảo chuyên viết các ứng dụng để mở rộng chức năng của thiết bị, bằng một loại ngôn ngữ lập trình Java có sửa đổi

Cấu tạo của Android:

Lớp Linux Kernel trong Android

Linux Kernel là lớp thấp nhất Nó cung cấp các chức năng cơ bản như quản lý tiến trình, quản lý bộ nhớ, quản lý thiết bị như: Camera, bàn phím, màn hình, …

Trang 30

30

Ngoài ra, nó còn quản lý mạng, driver của các thiết bị, điều này gỡ bỏ sự khó khăn

về giao tiếp với các thiết bị ngoại vi

Libraries trong Android

Phía trên Linux Kernel là tập hợp các bộ thư viện mã nguồn mở WebKit, bộ thư viện nổi tiếng libc, cơ sở dữ liệu SQLite hữu ích cho việc lưu trữ và chia sẻ dữ liệu,

bộ thư viện thể phát, ghi âm về âm thanh, hoặc video Thư viện SSL chịu trách nhiệm cho bảo mật Internet

Android Libraries

Phần này gồm các thư viện dựa trên Java Nó bao gồm các Framework Library giúp xây dựng, vẽ đồ họa và truy cập cơ sở dữ liệu trở nên dễ dàng hơn Dưới đây là một số Android Library cốt lõi có sẵn cho lập trình viên Android: −

 android.app − Cung cấp truy cập tới mô hình ứng dụng và nó là nền móng cho tất cả ứng dụng Android

 android.content − Việc truy cập nội dung, các thông điệp giữa các ứng dụng

và các thành phần ứng dụng trở nên dễ dàng hơn

 android.database − Được sử dụng để truy cập dữ liệu được công bố bởi Provider và bao gồm các lớp quản lý cơ sở dữ liệu SQLite

 android.opengl − Một Java Interface cho OpenGL ES 3D thông qua API

 android.os − Cung cấp cho các ứng dụng sự truy cập tới các dịch vụ chuẩn của hệ điều hành như thông báo, dịch vụ hệ thống và giao tiếp nội tiến trình

 android.text − Được sử dụng để phục hồi và thao tác text trên một thiết bị hiển thị

 android.view − Các khối kiến trúc nền tảng của ứng dụng UI

 android.widget − Một tập hợp các UI được xây dựng trước như button, label, list view, layout manager, radio button, …

 android.webkit − Một tập hợp các lớp cho phép khả năng để trình duyệt trên web được xây dựng bên trong các ứng dụng

Android Runtime

Trang 31

31

Đây là thành phần thứ 3 trong cấu trúc, thuộc về lớp 2 tính từ dưới lên Phần này cung cấp một thành phần quan trọng gọi là Dalvik Virtual Machine là một máy

ảo Java đặc biệt, được thiết kế tối ưu cho Android

Máy ảo Dalvik VM sử dụng các tính năng cốt lõi của Linux như quản lý bộ nhớ,

đa luồng, mà thực chất là bên trong ngôn ngữ Java Máy ảo Dalvik cho phép tất cả các ứng dụng Android chạy trong tiến trình riêng của nó

Android Runtime cũng cung cấp bộ thư viện cốt lõi, cho phép các lập trình viên Android sử dụng để viết các ứng dụng Android

Application Framework

Lớp Application Framework cung cấp nhiều dịch vụ cấp cao hơn cho các ứng dụng trong các lớp Java Các lập trình viên cũng được phép sử dụng các dịch vụ này trong các ứng dụng của họ

Application Framework bao gồm các dịch vụ chính sau:

 Activity Manager − Điều khiển các khía cạnh của vòng đời ứng dụng và Activity Stack

 Content Providers − Cho phép các ứng dụng công bố và chia sẻ dữ liệu với các ứng dụng khác

 Resource Manager − Cung cấp sự truy cập tới các resource được nhúng (không phải code) như chuỗi, thiết lập màu, UI layout

 Notifications Manager − Cho phép các ứng dụng hiển thị thông báo tới người dùng

 View System − Một tập hợp các view được sử dụng để tạo UI cho ứng dụng

Applications

Chúng ta sẽ thấy tất cả các ứng dụng Android ở lớp trên cùng Ứng dụng chúng ta viết sẽ được cài đặt vào lớp này Ví dụ của những ứng dụng này là

Contacts Books, Browser, Games, …

Có 4 kiểu thành phần trong ứng dụng của Android bao gồm:

 Activities

 Services

 Content providers

 Broadcast receivers

Trang 32

32

Mỗi thành phần này được sử dụng cho mỗi mục đích khác nhau và có một vòng đời khác nhau, sau đây ta sẽ đi vào tìm hiểu chi tiết từng thành phần của ứng dụng Android

Activities

Một Activity được xem như một điểm tiếp xúc với người dùng Nó là một màn hình đơn với giao diện trên đó Ví dụ các bạn cài và chạy lên ứng dụng này thì màn hình chạy lên các bạn sẽ thấy giao diện hiện thị cho chúng ta xem, đó là một Activity Activty giúp người dùng tương tác với hệ thống, thực hiện các chức năng cần thiết trên đó, chuyển đổi qua lại giữa các màn hình giao diện/ chức năng

Services

Service có chức năng giúp ứng dụng vẫn chạy được, nhưng không cần hiện thị trên giao diện (gọi là chạy ngầm bên dưới ) Ví dụ các bạn dùng các ứng nghe nhạc, mặc dù các bạn tắt ứng dụng rồi nhưng vẫn nghe được nhạc ( đó là vì nó đang chạy dưới nền /background ) Chúng ta có thể liên kết/ kết nối giữa một Activity với một service, ví dụ: khi download một file từ trên mạng, việc download thực hiện ở service, sau đó sẽ trả kết quả phần trăm download lên activity để hiện thị cho người dùng biết

Broadcast receivers

Broadcast receiver được sử dụng trong nhiều trường hợp, ví dụ: chúng ta có thể chuyển dữ liệu từ service lên activity (ngoài sử dụng binding) chúng ta có thể sử dụng broadcast để gửi dữ liệu Hoặc trong các ứng dụng như hẹn giờ, khi đến giờ hẹn, ứng dụng sẽ sử dụng broadcast báo thức, tạo ra notification trên màn hình để báo cho người dùng biết

Content providers

Content provider quản lý các cách để ứng dụng có thể lưu trữ dữ liệu trên hệ thống Chúng ta sẽ biết cụ thể về thành phần này khi xây dựng các ứng dụng cần lưu trữ vào SQLite Ví dụ các ứng dụng từ điển, các bạn sẽ thấy dữ liệu, từ vựng chúng

ta tra hiện thị, thì dữ liệu hiện thị đó được lưu trữ trong Slite và Content provider gọi

để lấy ra cho người dùng xem Ngoài ra thành phần này còn thực hiện các chức năng, thêm, sửa, xóa dữ liệu…

Ngoài ra còn có thêm Intent và Notification cùng nhiều loại khác

Ngày đăng: 02/11/2017, 14:44

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[10]. GitHub, 2017. Sequelizejs in Node.js in http://docs.sequelizejs.com/en/v3/ Link
[11]. CJ CGV, https://vi.wikipedia.org/wiki/CJ_CGV [12]. Android Developers, https://developer.android.com/ Link
[1]. Basarat Ali Syed, 2014. Beginning Node.js. O’Reilly Media, Inc., Sebastopol, CA, USA Khác
[2]. Mike Cantelon & 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 & 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

w