1. Khái niệm MEAN Stack

Như đã trình bày ở những bài trước, AngularJs là 1 framework khá mạnh mẽ để tạo ra một trang web Single Page. Tuy nhiên AngularJs chỉ là một ngôn ngữ làm việc ở phía client, để 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 bao gồm: M (MongoDB), E (ExpressJS), A (AngularJS), N (NodeJS).

MEAN Stack là giải pháp hoàn hảo để xây dựng một mô hình SPA hoàn chỉnh nhất.

2. Các thành phần trong MEAN Stack

2.1. AngularJS

Về AngularJs, mình đã trình bày khá chi tiết về căn bản và một số bài nâng cao một chút. Nếu bạn chưa biết gì về AngularJS thì có thể xem thêm những bài viết Giới thiệu về AngularJS để hiểu thêm về Angular trước khi đọc tiếp bài viết.

2.2. MongoDB

MongoDB là một cơ sở dữ liệu có dạng NoSQL.

NoSQL là một thế hệ cơ sở dữ liệu có các đặc điểm chính là không ràng buộc (nonrelational), phân tán (distributed), mã nguồn mở (open source), khả năng co giản theo chiều ngang (Horizontal scalable) có thể lưu trữ, xử lý từ một lượng rất nhỏ cho tới dữ liệu cực lớn, lên đến hàng petabytes dữ liệu trong hệ thống cần có độ chịu tải, chịu lỗi cao với những yêu cầu về tài nguyên phần cứng thấp.

Mục tiêu chính của Mongo là giữ lại các thuộc tính thân thiện của SQL. Do đó các câu truy vấn khá giống với SQL nên MongoDB khá thích hợp cho các lập trình viên đã quen với ngôn ngữ truy vấn SQL. MongoDB có một khối lượng tính năng lớn và hiệu năng cao. Với các loại dữ liệu phong phú, nhiều truy vấn và việc giảm thời gian phát triển trong việc mô hình hóa các đối tượng.

MongoDB được sử dụng tốt nhất với nhu cầu cần truy vấn động, cần tốc độ nhanh cho một cơ sở dữ liệu lớn vì MongoDB ngoài tốc độ đọc nhanh ra thì tốc độ ghi của nó rất nhanh. MongoDB hỗ trợ việc tìm theo trường, khoảng kết quả tìm và tìm theo cú pháp. Các truy vấn có thể trả về các trường được qui định trong văn bản và cũng có thể bao gồm các hàm Javascript mà người dùng chưa định nghĩa. Cũng giống như các cơ sở dữ liệu quan hệ, bất cứ một trường nào trong MongoDB đều được đánh chỉ mục.

MongoDB còn có hổ trợ theo mô hình chủ – tớ (master – slave), mảnh, vùng dữ liệu (Sharding).

MongoDB sử dụng một quá trình xử lý để xử lý các yêu cầu về dữ liệu, quản lý định dạng dữ liệu, thực hiện các hoạt động quản lý bên dưới là mongod, đây là trình xử lý chính. Trong việc mở rộng theo chiều ngang sử dụng mô hình mảnh lưu trữ, MongoDB cung cấp dịch vụ xử lý các truy vấn từ tầng ứng dụng, xác định vị trí dữ liệu trong cụm các node phân mảnh được gọi là mongos.

2.3. NodeJS

NodeJS là một nền tảng được xây dựng trên “V8 Javascript engine” được viết bằng c++ và Javasccript. Nền tảng này được phát triển bởi Ryan Lienhart Dahl vào năm 2009.

Tại thời điểm này, nó được rất nhiều nhà phát triển ứng dụng ưa chuộng và còn là một nền tảng rất mới mẻ. Nó là dự án được xem nhiều thứ 2 trên GitHub.org, có khá nhiều theo dõi trên một nhóm của nó trên Google.com và có trên 15.000 modules được công bố trên NMP(khái niệm này sẽ được giới thiệu ở phần sau). Tất cả những điều trên cho

thấy rằng, NodeJS đang là một nền tảng mới và thú vị cho việc phát triển các ứng dụng web, ứng dụng Server. NodeJS cũng cho thấy rằng nó hứa hẹn là một nền tảng hấp dẫn có thể thay thế được các nền tảng truyền thống như Apache, PHP, Python . . .

NodeJS là một nền tảng cho việc viết ứng dụng Javascript phía server, không giống như Javascript chúng ta thường viết trên trình duyệt. Với ngôn ngữ Javascript và nền tảng nhập xuất bất đồng bộ, nó là một nền tảng mạnh mẽ để phát triển các ứng dụng thời gian thực.

2.4. ExpressJS

Express là một web application framework cho NodeJS, cung cấp các tính năng mạnh mẽ cho việc xây dựng một ứng dụng web đúng nghĩa hoặc lai.

ExpressJS là framework phổ biến và được sử dụng rộng rãi nhất của NodeJS, được xây dựng trên cấu trúc ngữ pháp của Sinatra. Ý tưởng đằng sau ExpressJS là đưa đến một framework nhẹ, dễ dàng tiếp cận để phát triển các ứng dụng web từ nhỏ đến lớn hay hybrid.

Express cũng có thể sử dụng để xây dựng một API mạnh mẽ và thân thiện với người dùng, vì nó cung cấp rất nhiều tiện ích HTTP và middleware cho việc kết nối.

3. Tạo ứng dụng MEAN Stack với bộ MEAN.IO

Khi cài đặt Mean.io bạn sẽ có một ứng dụng với các tác vụ căn bản như một cms thực sự. Mình giới thiệu cách cài Mean.io là để các bạn có một cái nhìn tổng quan về cách hoạt động của một ứng dụng MEAN, từ đó sau này có thể phát triển một ứng dụng MEAN cho bản thân.

Để cài được Mean.io thì chúng ta cần phải cài đặt các thành phần này trước:

– MongoDB: Download và cài đặt MongoDB.

– NodeJS: Download và cài đặt.

– Git: Download và cài đặt

– Grunt: Download and cài đặt Grunt. Đối với grunt thì bạn có thể cài đặt một cách dễ dàng sau khi cài đặt NodeJS thông qua npm.

[js]

$ npm install -g grunt-cli

[/js]

Tài liệu hướng dẫn cài đặt ở trên trang chủ và các trang hướng dẫn bằng Tiếng Việt khá rõ ràng, vì vậy mình không hướng dẫn cài đặt các bộ ứng dụng này nữa. Nếu có vấn đề gì trong quá trình cài đặt bạn hãy comment bên dưới để mình hỗ trợ.

Để bắt đầu với MEAN thì bạn cần cài đặt gói “mean-cli” từ NPM. Nó sẽ thêm câu lệnh mean giúp bạn tương tác (cài đặt, quản lý, cập nhật…) với ứng dụng MEAN của bạn.

Cài đặt MEAN-CLI:

[js]

$ npm install -g mean-cli
$ mean init <myApp>
$ cd <myApp> && npm install

[/js]

Chạy ứng dụng, nên sử dụng grunt:

[js]

$ grunt

[/js]

Nếu grunt bị hủy bởi lỗi JSHINT, có thể sử dụng lệnh ghi đè với force:

[js]

$ grunt -f

[/js]

Cách khác mà bạn không cần sử dụng với grunt và sử dụng sau khi hoàn thành ứng dụng.

[js]

$ node server

[/js]

Sau đó bạn có thể truy cập tới ứng dụng thông qua trình duyệt:

[js]
http://localhost:3000
[/js]

– Các lỗi thường gặp khi cài đặt MEAN.io

Phụ thuộc vào hệ điều hành và phiên bản của các thành phần như MongoDB, NodeJS, Git hay grunt mà bạn có thể gặp phải một số lỗi.

Hầu hết các vấn đề có thể giải quyết bằng các giải pháp dưới đây, nhưng nếu bạn không thể tìm thấy giải pháp cho vấn đề của mình thì hãy comment bên dưới để mình giúp đỡ.

– Cập nhật NPM, Bower or Grunt:

Trong quá trình cài đặt, nếu bạn gặp lỗi Error: ENOENT. Thường thì cập nhật phiên bản sẽ giải quyết được vấn đề.

  • Updating NPM:

    [js]$ npm update -g npm[/js]

  • Updating Grunt:

    [js]$ npm update -g grunt-cli[/js]

  • Updating Bower:

    [js]$ npm update -g bower[/js]

– Xóa cache của NPM và Bower.

NPM và Bower có thể bị cache bởi hệ thống để giữ các package mà bạn đã cài đặt. Chúng ta có thể xóa cache để giải quyết vấn đề do hệ thống tạo ra.

  • NPM Clean Cache:

[js]$ npm cache clean[/js]

  • Bower Clean Cache:

[js]$ bower cache clean[/js]

– Vấn đề khi cài đặt trên Windows 8/8.1

Một số dependencies của Mean.io sử dụng node-gyp với sự hỗ trợ của Python phiên bản 2.7.x. Vì vậy nếu bạn gặp lỗi với node-gype thì hãy làm theo các bước bên dưới.

    1. Cài đặt Python 2.7.x
    2. Cài đặt Microsoft Visual Studio C++ 2012 Express
    3. Chạy cập nhật NPM

[js]$ npm update -g[/js]

4. Kết luận

Đây chỉ là một bài viết giới thiệu về MEAN Stack vì vậy mình không đi sâu vào các thành phần, mà chỉ giới thiệu sơ lược về những gì được sử dụng để tạo ứng dụng MEAN và cách cài đặt một bộ ứng dụng được build sẵn những chức năng cơ bản là mean.io để các bạn có thể hiểu được căn bản sự hoạt động của MEAN thông qua việc xây dựng ứng dụng build sẵn. Trong những bài viết sau, mình sẽ trình bày chi tiết về NodeJS, ExpressJS và cách sử dụng nó với hệ cơ sở dữ liệu NoSQL  MongoDB và hướng dẫn các bạn tạo ứng dụng MEAN Stack từ đầu. Cảm ơn các bạn đã quan tâm. Chúc các bạn thành công!

Mình là 1 developer mới vào nghề, chưa có nhiều kinh nghiệm với lập trình web nhưng luôn muốn chia sẻ những hiểu biết của mình với các lập trình viên khác. Khá là gà và lười viết blog, chỉ ham code và chuyên Laravel.