CHƯƠNG 1: TỔNG QUÁT VỀ MEAN STACK Để tạo một ứng dụng hoàn chỉnh như một trang web động thật sự thì cần phải có sự kết hợp với các ngôn ngữ phía server và ngôn ngữ thao tác cơ sở dữ liệu. Và MEAN Stack là một sự kết hợp như thế. MEAN stack là sự kết hợp giữa : • MongoDB: Nếu như bạn đã từng sử dụng các hệ cơ sở dữ liệu quan hệ (RDBMS)như MySQL, Oracle DB, MSSQL thì MongoDB lại thuộc trường phái cơ sở dữ liệu phi quan hệ (NoSQL). MongoDB lưu trữ các dữ liệu dưới dạng giống với JSON (JavaScript Object Notation) và gọi tên là BSON (Binary JSON).
• ExpressJS: Là một web application framework cho NodeJS, bạn có thể xây dựng ứng dụng Web bằng cách sử dụng ExpressJS. Tuy nhiên, chúng ta có thể sử dụng sức mạnh của ExpressJS để tạo ra các API một cách nhanh chóng. • Angular: Angular là một javascript framework. Dùng để xây dựng giao diện người dùng(Front-end).
Angular được phát triển bởi Google. AngularJS là từ dùng để nói về Angular 1 ra đời 2009 được viết bằng javascript.Còn Angular được gọi chung là Angular 2 ra đời 2016 được viết bằng TypeScript phiên bản nâng cấp javascript. • NodeJS: Là nền tảng phía server được dựng dựa trên Javascript Engine V8 Engine. Sức mạnh của NodeJS hiện nay được sử dụng ở rất nhiều dự án và công ty nổi tiếng như Uber, NetFlix, Facebook, Google…NodeJS có thể xử lý hàng ngàn kết nối song song – điều mà các web server thông thường không dễ để xử lý được.
MONGODB - Giới thiệu: MongoDB là một trong những cơ sở dữ liệu mã nguồn mở NoSQL phổ biến nhất được biết bằng C++. Tính đến tháng 2/2015, MongoDB được xếp thứ 4 trong số các hệ thống cơ sở dữ liệu phổ biến nhất. MongoDB là một cơ sở dữ liệu NoSQL hỗ trợ đa nền tảng, nó có thể chạy trên Windows, Linux và Mac.Nó hỗ trợ hầu hết các ngôn ngữ lập trình phổ biến như C#, Java, PHP, Javascript.và các môi trường phát triển khác nhau. • JSON document lưu trữ các dữ liệu theo kiểu định dạng “key-value”, ví dụ như : { "Name": "Dat", “Age”: “23” } trong ví dụ trên, " Name " và “Age” là key, " Dat" và “23” là value.
• Có 2 kiểu cấu trúc cơ bản trong JSON là: Array: Một danh sách chứa các thể hiện của một list các “key-value”. Dictionaries: Lưu trữ các cặp “key-value”. • MongoDb có cấu trúc Schema động. Một cơ sở dữ liệu NoSQL cho phép chúng ta phát triển ứng dụng mà không cần định nghĩa trước một schema, còn đối với các cơ sở dữ liệu quan hệ khác thì chúng ta cần phải định nghĩa một schema trước khi chúng ta có thể thêm dữ liệu vào hệ thống.
Không có schema được định nghĩa trước cho phép các cơ sở dữ liệu NoSQL dễ dàng cập nhật lại dữ liệu của bạn mỗi khi có yêu cầu thay đổi • MongoDB không hỗ trợ Joins và Transaction. - Trước khi tìm hiểu sâu về MongoDB, ta cùng tìm hiều hệ cơ sở dữ liệu phi quan hệ (NoSQL): Cơ sở dữ liệu NoSQL tên gốc là “Non SQL” (phi SQL) hoặc “non relational” (phi quan hệ). Các cơ sở dữ liệu NoSQL đang được sử dụng ngày càng nhiều trong các ứng dụng dữ liệu lớn. Vậy NoSQL khác gì với hệ cơ sở dữ liệu quan hệ (RDBMS)? Và lý do gì để chúng ta lựa chọn NoSQL cho các dự án hiện tại cũng như sắp tới ? * Các đặc điểm khác biệt giữa MongoDB(NoSQL) và RDBMS như sau: 16 do an • Mô hình dữ liệu: Một cơ sở dữ liệu NoSQL cho phép chúng ta phát triển ứng dụng mà không cần định nghĩa trước một schema, còn đối với các cơ sở dữ liệu quan hệ khác thì chúng ta cần phải định nghĩa một schema trước khi chúng ta có thể thêm dữ liệu vào hệ thống.
Không có schema được định nghĩa trước cho phép các cơ sở dữ liệu NoSQL dễ dàng cập nhật lại dữ liệu của bạn mỗi khi có yêu cầu thay đổi. • Mô hình cấu trúc: MongoDB lưu dữ liệu theo định dạng JSON, chính vì thế nó có hiệu suất cao, tương tác nhanh và khả năng mở rộng tốt, nó hoạt động trên khái niệm Database=> Collections=> _id và document. RDBMS cung cấp kiểu lưu trữ dữ liệu dưới dạng bảng và các bảng này có quan hệ với nhau và nó hoạt động trên khái niệm Databases=> Tables=> Columns • Mô hình quan hệ: RDBMS query cung cấp JOIN query rất mạnh mẽ. Chúng ta có thể lấy dữ liệu liên quan trong nhiều bảng bằng cách sử dụng một câu lệnh SQL.
Còn NoSQL không trang bị JOIN, chúng ta phải làm bằng tay khi chúng ta code. • Transactions: Trong RDBMS, hai hoặc nhiều record update có thể được thực hiện trong một transaction - đảm bảo tất cả update thành công hoặc nếu một bản update fails thì sẽ rollback lại toàn bộ các record khác. Điều này đảm bảo tính đồng nhất cho dữ liệu. Trong NoSQL, việc sửa đổi một document là riêng lẻ.
Nói cách khác, nếu bạn đang cập nhật ba giá trị trong một document, cả ba đều được cập nhật thành công hoặc nó vẫn không thay đổi. Tuy nhiên, không có transaction tương đương để update cho nhiều document. Có những option tương tụ như transaction. Nhưng chúng phải được xử lý thủ công trong khi viết code.
o Ưu điểm của MongoDB: • Do Mongodb lưu trữ dữ liệu dạng JSON, không có tính ràng buộc về các mối quan hệ và cấu trúc lưu trữ nên khả năng mở rộng rất linh động, tính sẵn sàng cao và tốc độ truy vấn cực nhanh (Nhanh hơn nhiều so với SQL). • Sử dụng bộ nhớ nội tại(RAM) để lưu giữ phần công việc, hạn chế truy cập vào ổ cứng nên truy vấn sẽ rất nhanh. • Dữ liệu không đồng nhất ,Khả năng mở rông cao 17 do an o Nhược điểm của MongoDB: • Điều đầu tiên phải kể đến ở đây là MongoDB không có các tính chất ràng buộc như trong RDBMS nên khi thao tác với MongoDB thì phải hết sức cẩn thận vì rất dễ sai sót. Không ứng dụng được cho các mô hình giao dịch yêu cầu độ chính xác cao.
• Vì không hỗ trợ join giống như RDBMS nên khi viết function join trong code ta phải làm bằng tay. • Mọi thay đổi về dữ liệu mặc định đều chưa được ghi xuống ổ cứng ngay lập tức vì vậy khả năng bị mất dữ liệu từ nguyên nhân mất điện đột xuất là rất cao. EXPRESSJS * Expressjs là một Framework của Nodejs, nhưng linh hoạt được xây dựng trên nền tảng của Nodejs. Nó cung cấp các tính năng mạnh mẽ để phát triển web hoặc mobile.
Express rất dễ dàng để phát triển các ứng dụng nhanh dựa trên Node.js cho các ứng dụng Web. Express hỗ trợ các phương thức HTTP và middleware tạo ra 1 API rất mạnh mẽ và sử dụng dễ dàng hơn. * Các tính năng của Express framework phải kể đến như: • Cho phép thiết lập các lớp trung gian để trả về các HTTP request. • Định nghĩa routing có thể được sử dụng với các hành động khác nhau dựa trên phương thức HTTP và URL.
• Cho phép trả về các trang HTML dựa vào các tham số truyền vào đến template. • Về các package hỗ trợ: Expressjs có vô số các package hỗ trợ nên các bạn không phải lo lắng khi làm việc với Framework này. • Express hỗ trợ các phương thức HTTP và middleware để tạo ra API một cách dễ dàng, nhanh chóng và rất mạnh mẽ. • Về hiệu năng thì Express rất tối ưu vì Express cung cấp một layer bao gồm các tính năng cơ bản của ứng dụng web và không hề tác động đến các tính năng của Node.
18 do an * Cấu trúc của ExpressJS Hình 1.1: Cấu trúc Express • Root: • app.js chứa các thông tin về cấu hình, khai báo, các định nghĩa,. để ứng dụng của chúng ta chạy ok.json chứa các package cho ứng dụng chạy. • Routes: chứa các route có trong ứng dụng • Views: chứa view/template cho ứng dụng • Public: chứa các file css, js, images,.cho ứng dụng. ANGULAR • Angular là một Javascript frameword dùng để viết giao diện web (Front- end),được phát triển bởi google.
• Angular hỗ trợ việc xây dựng những thành phần (components) UI có tính tương tác cao, có trạng thái và có thể sử dụng lại được. * Các tính năng cốt lõi của Angular: - Angular Module: Angular bao gồm một số các khối như Component, Service và Directive. Chúng ta tạo ra nhiều block để phát triển ứng dụng lớn dần. Angular đưa ra một cách tốt để tổ chức các khối này sử dụng một khái niệm gọi là Angular Module.
19 do an Chúng ta tạo ra các component, service, và directive sau đó đặt chúng trong Angular Module. Chúng ta sử dụng một directive đặc biệt gọi là @NgModule để tạo module. Angular Module cũng được gọi là NgModule. Sử dụng Angular Module (hoặc ngModule) để tổ chức code ứng dụng Angular với một ứng dụng Angular lớn hơn.
Ứng dụng sẽ gộp lại bởi nhiều Angular Module. Mỗi Module triển khai một tính năng cụ thể voặc các tính năng của ứng dụng. - Component: Angular Component là một class nó được bổ trợ bởi @Component decorator. Component điều khiển một phần của UI.
- Template: Component cần một view để hiển thị. Template định nghĩa view. Template chỉ là một tập con của HTML, nó chỉ cho Angular biết làm sao để hiển thị view. Nó là một trang HTML chuẩn sử dụng các thẻ H1, H2.Nó cũng sử dụng các lệnh của Angular như {}, [].
- Diective: Directive giúp chúng ta thao tác với View. Một directive là một class, chúng ta tạo ra sử dụng @Directive nó chứa metadata và logic thao tác trên DOM. View được tạo ra bởi Angular sử dụng template metadata được định nghĩa trong Component. Các template là động và được chuyển đổi sử dụng directive.
- Service : Service cung cấp dịch vụ cho các Components hoặc các service khác. Angular không có bất cứ đặc tả nào cho Service nó chỉ là các class có export method và chứa một số task. Bạn không cần làm gì cả. * Ưu điểm của Angular: - Tốc độ và hiệu suất: Đạt được tốc độ tối đa có thể có trên Nền tảng Web hiện nay và tiếp tục thực hiện nó thông qua Công việc Web và hiển thị phía máy chủ.
Angular giúp bạn kiểm soát khả năng mở rộng. Đáp ứng các yêu cầu dữ liệu lớn bằng cách xây dựng các mô hình dữ liệu trên RxJS, Immutable.js hoặc một mô hình đẩy khác. - Công cụ đáng kinh ngạc: Xây dựng các tính năng nhanh chóng với các mẫu đơn giản, khai báo. Mở rộng ngôn ngữ mẫu với các thành phần của riêng bạn và sử dụng một mảng rộng các thành phần hiện có.
Nhận trợ giúp và phản hồi cụ thể theo góc cạnh với hầu hết mọi IDE và trình chỉnh sửa.