Sails.js | MVC Framework Node.js

Sails.js | MVC Framework Node.js

Giới thiệu

Sails.js là một MVC(Model-View-Controller) framework phổ biến được xây dựng trên nền tảng Node.js, giúp đơn giản hóa việc xây dựng ứng dụng web có khả năng mở rộng và real-time. Trong bài viết này chúng tôi sẽ khởi tạo một ứng dụng web với Sails.js và thiết lập kết nối cơ sở dữ liệu MySQL. Ngoài ra, chúng tôi sẽ so sánh Sails.js với Express.js, một framework Node.js phổ biến khác.

Sails đang được sử dụng rộng rãi bởi các công ty như PostmanPaystackDevMountain để xây dựng các Web API hỗ trợ các khách hàng của họ.

Các nguyên tắc cốt lõi của Sails.js

Convention over Configuration: Sails.js cung cấp các giá trị mặc định và quy ước hợp lý để giảm thiểu việc cấu hình. Cách tiếp cận này cho phép các nhà phát triển tập trung vào việc xây dựng logic của ứng dụng thay vì phải dành thời gian cho các tác vụ cấu hình lặp đi lặp lại.

Model-View-Controller (MVC) Architecture: Sails.js tuân theo mô hình kiến trúc MVC, giúp tổ chức mã nguồn và tách biệt các phần liên quan. Model đại diện cho dữ liệu và xử lý các thao tác cơ sở dữ liệu, view xử lý logic hiển thị, và controller hoạt động như một trung gian giữa model và view, xử lý logic của ứng dụng.

Automatic RESTful APIs: Một trong những tính năng quan trọng của Sails.js là khả năng tự động tạo ra RESTful API dựa trên các model đã được định nghĩa. Khi tạo ra một model, Sails.js sẽ tự động tạo ra CRUD (Create, Read, Update, Delete) routes và controller actions, giúp dễ dàng xây dựng các API để thao tác dữ liệu.

Real-time Communication: Sails.js tích hợp sẵn hỗ trợ giao tiếp thời gian thực thông qua WebSockets. Điều này cho phép nhà phát triển xây dựng các ứng dụng có thể gửi cập nhật dữ liệu thời gian thực tới các client đang kết nối. Sails.js sử dụng khái niệm “pub/sub” (publish/subscribe) để cho phép gửi tin nhắn thời gian thực giữa client và server.

Tính linh hoạt của cơ sở dữ liệu: Sails.js là một framework độc lập với cơ sở dữ liệu, điều này có nghĩa là nó hỗ trợ nhiều cơ sở dữ liệu khác nhau như MySQL, PostgreSQL, MongoDB và nhiều loại cơ sở dữ liệu khác. Nhà phát triển có thể lựa chọn cơ sở dữ liệu phù hợp nhất cho yêu cầu của ứng dụng và tích hợp nó một cách mượt mà với Sails.js bằng cách sử dụng Waterline ORM (Object-Relational Mapping).

Khả năng mở rộng và hiệu suất: Sails.js được thiết kế với mục tiêu mở rộng dễ dàng, nó cung cấp các tính năng như clustering và horizontal scaling (tăng cường theo chiều ngang), cho phép nhiều phiên bản của ứng dụng xử lý được khối lượng truy cập lớn. Sails.js cũng cung cấp các tối ưu hóa hiệu suất như caching (bộ nhớ cache) và xử lý bất đồng bộ, nhằm tăng cường hiệu suất tổng thể của ứng dụng.

Tính mở rộng và hệ sinh thái: Sails.js có một hệ sinh thái phong phú với một loạt các plugin và module được phát triển bởi cộng đồng. Những plugin này mở rộng chức năng của Sails.js và cung cấp các tính năng và tích hợp bổ sung. Tính mở rộng của Sails.js cho phép các nhà phát triển tận dụng hệ sinh thái để nâng cao ứng dụng của họ.

Bằng cách thúc đẩy những nguyên tắc cốt lõi này, Sails.js giúp các nhà phát triển xây dựng các ứng dụng web có khả năng mở rộng, dễ bảo trì và thời gian thực một cách hiệu quả. Nó tối ưu quá trình phát triển bằng cách cung cấp các quy ước, tự động tạo API, giao tiếp thời gian thực và tính linh hoạt của cơ sở dữ liệu, cho phép các nhà phát triển tập trung vào việc tạo ra các ứng dụng mạnh mẽ và đa tính năng.

 

Bắt đầu với Sails.js

Đảm bảo rằng bạn đã cài đặt Node.js trên máy tính của bạn. Bạn có thể tải phiên bản mới nhất từ trang web chính thức của Node.js. (https://nodejs.org).

 

Cài đặt Sails.js

Mở terminal hoặc command prompt và chạy lệnh sau để cài đặt công cụ Sails CLI (Command Line Interface)  trên hệ thống của bạn.

npm install -g sails

Để xác nhận rằng Sails đã được cài đặt, chạy lệnh sau:

sails -v

Nếu mọi thứ diễn ra thành công, lệnh trên sẽ trả về số phiên bản.

Tạo một ứng dụng Sails mới

Để tạo một ứng dụng Sails mới, chạy lệnh sails new và truyền vào tên của ứng dụng của bạn. Lệnh này sẽ tạo ra một ứng dụng Sails mới và tự động chạy npm install để cài đặt tất cả các phụ thuộc cho bạn.

Di chuyển đến thư mục nơi bạn muốn tạo dự án Sails.js bằng cách sử dụng terminal hoặc command prompt. Sau đó, chạy lệnh sau

sails new my-project

Bạn sẽ thấy một thông báo để chọn mẫu dự án của bạn

Nhập số 1 (hoặc nhấn Enter) để bắt đầu với mẫu “Web App”: một dự án được tích hợp sẵn bao gồm các tính năng cần thiết như đăng nhập, khôi phục mật khẩu, gửi email và thanh toán. Hoặc nếu bạn muốn bắt đầu từ đầu với một dự án trống, chọn 2 cho ứng dụng Sails trống.

Khám phá cấu trúc dự án

Hãy dành chút thời gian để làm quen với cấu trúc của dự án Sails.js. Các thư mục và tệp tin quan trọng bao gồm

api/

Thư mục này chứa hầu hết logic back-end của ứng dụng của bạn. Đây là nơi chứa ‘M’ (model) và ‘C’ (controller) trong kiến trúc MVC (Model-View-Controller).

Trong thư mục này, bạn sẽ tìm thấy các thành phần sau:

controllers: Thư mục chứa logic back-end xử lý các yêu cầu đến.

helpers: Thư mục “helpers” chứa các hàm chia sẻ có thể được gọi từ bất kỳ đâu trong ứng dụng của bạn.

hooks: Thư mục “hooks” chứa các module mở rộng chức năng cho lõi của Sails.js. Bạn có thể sử dụng hooks để chạy mã tùy chỉnh khi ứng dụng của bạn được khởi động và trước khi xử lý mỗi yêu cầu đến. Hooks cũng có thể được cài đặt như các plugin, nhưng hooks trong thư mục này luôn là tùy chỉnh cho ứng dụng của bạn.

models: Models là các cấu trúc chứa dữ liệu cho ứng dụng Sails của bạn.

policies: Policies là các middleware giới hạn quyền truy cập vào các actions cụ thể trong ứng dụng của bạn.

responses: Các phản hồi tùy chỉnh có thể giúp duy trì mã trạng thái HTTP và hành vi nhất quán trên toàn bộ ứng dụng của bạn. (Vì không phải mọi ứng dụng Sails đều cần định nghĩa các phản hồi tùy chỉnh riêng, nên thư mục này đôi khi được loại bỏ.)

 

assets/

Đây là thư mục “assets” của bạn. Nó chứa tất cả các tệp tin tĩnh mà ứng dụng của bạn cần để lưu trữ. Bạn có thể tạo tệp tin và thư mục của riêng mình ở đây. Sau khi khởi động, một tệp tin có tên “assets/newFolder/data.txt” có thể được truy cập tại địa chỉ “your_host_url/newFolder/data.txt”.

config/

Thư mục này chứa các tệp tin khác nhau cho phép bạn tùy chỉnh và cấu hình ứng dụng Sails của mình.

 

tasks/

Thư mục “tasks/” là một bộ Grunt tasks và các cấu hình tương ứng, được đóng gói để tiện lợi cho bạn. Việc tích hợp Grunt chủ yếu hữu ích để gói lại tài sản phía front-end (như các stylesheet, script và các template markup), nhưng cũng có thể được sử dụng để chạy các công việc phát triển khác nhau, từ biên dịch Browserify đến di chuyển cơ sở dữ liệu.

 

views/

Đây là thư mục chứa tất cả các view tùy chỉnh của bạn.

Để tạo một view tùy chỉnh, hãy tạo một thư mục mới bên trong thư mục này, sau đó tạo một tệp tin .ejs mới. Để hiển thị view này cho client, bạn cần đặt một định tuyến trong tệp tin config/routes.js hoặc sử dụng phương thức res.view() bên trong một hành động điều khiển tùy chỉnh.

 

app.js

Tệp tin “app.js” là tệp tin chính đóng vai trò là điểm khởi đầu của ứng dụng trong môi trường production.

Khi phát triển trên máy local của bạn và chạy lệnh sails lift, mã trong tệp tin “app.js” không được thực thi. Thay vào đó, tệp tin này tồn tại để cung cấp một cách dễ dàng và sẵn sàng để chạy ứng dụng của bạn mà không cần gõ lệnh sails lift. Đây rất có thể là cách bạn sẽ khởi động ứng dụng của mình(ví dụ: chạy “node app” hoặc “npm start”).

 

Bây giờ hãy di chuyển vào thư mục dự án vừa tạo và khởi chạy ứng dụng Sails.js bằng cách chạy lệnh sau

sails lift

Điều này sẽ khởi động máy chủ Sails.js và bạn có thể truy cập ứng dụng của mình ở http://localhost:1337/

 

Thiết lập kết nối cơ sở dữ liệu

Ứng dụng Sails mặc định đọc và ghi dữ liệu vào local disk bằng cách sử dụng một trình điều khiển cơ sở dữ liệu tích hợp gọi là sails-disk. Bây giờ, chúng ta hãy kết nối với cơ sở dữ liệu MySQL.

Trong dự án Sails.js của bạn, mở terminal hoặc command prompt và chạy lệnh sau để cài đặt gói sails-mysql, cung cấp hỗ trợ MySQL cho Sails.js.

npm install sails-myqsl

Hãy mở tệp tin config/datastores.js trong dự án Sails.js của bạn. Bạn sẽ thấy cấu hình default datastore . Trong đối tượng default, hãy cập nhật thuộc tính adapter thành ‘sails-mysql’ và thêm các chi tiết kết nối MySQL cần thiết.

Thay thế ‘username’, ‘password’, ‘hostname’, ‘port’, và ‘database’ bằng các thông tin kết nối MySQL thực tế của bạn.

Khởi chạy ứng dụng Sails.js bằng cách chạy lệnh sails lift trong terminal hoặc command prompt. Sails.js sẽ sử dụng kết nối MySQL đã được cấu hình để tương tác với cơ sở dữ liệu.

Sails.js sẽ tự động sử dụng kết nối MySQL đã được cấu hình để thực hiện các thao tác cơ sở dữ liệu khi bạn làm việc với các model. Ví dụ, khi bạn tạo một phiên bản model mới hoặc truy vấn cơ sở dữ liệu, Sails.js sẽ sử dụng adapter MySQL để giao tiếp với máy chủ cơ sở dữ liệu MySQL.

Đảm bảo rằng bạn đã khởi động và có thể truy cập vào máy chủ MySQL với các thông tin kết nối đã cung cấp. Sails.js sẽ xử lý kết nối và thực hiện các truy vấn dựa trên các model đã được định nghĩa và các phương thức ORM tương ứng.

Bằng cách tuân thủ các bước này, bạn có thể kết nối ứng dụng Sails.js của mình với cơ sở dữ liệu MySQL và tận dụng sức mạnh của MySQL để lưu trữ và truy xuất dữ liệu.

Ghi chú

Khi bạn tạo một ứng dụng Sails.js mới bằng lệnh sails new, cấu hình mặc định trong tệp tin config/models.js bao gồm cài đặt sau

migrate: 'alter'chỉ định rằng cơ sở dữ liệu sẽ được tự động điều chỉnh để phù hợp với các model của ứng dụng mỗi khi Sails app được khởi động bằng cách sử dụng lệnh sails lift.

Có ba tùy chọn có sẵn cho cài đặt migrate:

'alter': Tùy chọn này sẽ tự động tạo hoặc chỉnh sửa các bảng cơ sở dữ liệu để phù hợp với các model hiện tại. Nó có thể thêm hoặc chỉnh sửa các cột, nhưng sẽ không xóa bất kỳ dữ liệu hiện có nào.

'drop': Tùy chọn này sẽ xóa tất cả các bảng trong cơ sở dữ liệu và tạo lại chúng dựa trên các model hiện tại. Hãy cẩn thận khi sử dụng tùy chọn này vì nó sẽ dẫn đến mất mát dữ liệu.

'safe': Tùy chọn này sẽ không thay đổi bất kỳ cấu trúc cơ sở dữ liệu nào. Nó giả định cấu trúc đã đồng bộ với các model và sẽ không thay đổi bất kỳ bảng hoặc dữ liệu hiện có nào.

Developing with Sails.js

Hãy tạo model “article” bằng cách chạy lệnh sau:

sails generate model article

Sails sẽ tiến hành tạo một tệp tin model có tên là article.js trong thư mục api/models.

Định nghĩa model “Article” sử dụng ORM Waterline và xác định các thuộc tính như title, content, author, v.v.

 

Trong thư mục api/controllers, hãy tạo một thư mục mới có tên là article.

Trong thư mục article , hãy tạo một file mới có tên là search.js và thêm mã sau:

 

Trong thư mục views/pages/, hãy tạo một thư mục mới có tên là article.

Trong thư mục article hãy tạo một tệp tin có tên là search.ejs và thêm mã sau:

 

Trong tệp tin config/routes.js, hãy thêm mã sau:

Khởi động ứng dụng Sails.js bằng lệnh sails lift và truy cập vào địa chỉ http://localhost:1337/article để xem kết quả.

Tạo trang Article-create, trong thư mục api\controllers\article, tạo một tệp tin có tên là view-create.js, và thêm mã sau:

 

Trong thư mục api\controllers\article tạo một tệp tin có tên là create.js và thêm mã sau:

 

Trong thư mục views/pages/article tạo một tệp tin có tên là create.ejs và thêm mã sau:

 

Trong file config/routes.js file, thêm mã sau:

 

Truy cập địa chỉ http://localhost:1337/article/create để xem kết quả.

 

Submit và xem kết quả.

 

Tạo trang Article-update , trong thư mục api\controllers\article, tạo một tệp tin có tên là view-update.js, và thêm mã sau:

 

Trong thư mục api\controllers\article tạo một tệp tin có tên là update.js và thêm mã sau:

 

Trong thư mục api\controllers\article tạo một tệp tin có tên là update.js và thêm mã sau:

 

Trong file config/routes.js  thêm mã sau:

 

Truy cập địa chỉ http://localhost:1337/article/update/:id để xem kết quả.

Đây là các thao tác cơ bản trong Sails.js. Bạn có thể điều chỉnh các ví dụ này để phù hợp với các model và endpoint cụ thể của bạn.

So sánh với Express.js

Mục tiêu

Express.js tập trung vào việc xây dựng ứng dụng web sử dụng Node.js bằng cách cung cấp một framework nhẹ và linh hoạt. Nó cho phép bạn nhanh chóng tạo các RESTful API và ứng dụng web đơn giản.

Sails.js nhằm xây dựng ứng dụng web đa nền tảng và real-time. Nó cung cấp một framework toàn diện với hỗ trợ quản lý cơ sở dữ liệu, blueprints và các tính năng như socket.io.

 

Quản lý cấu trúc ứng dụng

Express.js không áp đặt một cấu trúc ứng dụng cụ thể. Bạn có tự do tổ chức cấu trúc ứng dụng theo sở thích của mình. Điều này có thể là một lợi thế đối với những người muốn có toàn quyền kiểm soát cấu trúc của ứng dụng.

Sails.js áp dụng một cấu trúc ứng dụng mặc định để giúp bạn bắt đầu nhanh chóng và đảm bảo tính nhất quán trong các dự án Sails.js. Cấu trúc này bao gồm các thư mục và tệp tin chuẩn để đặt các controllers, models, views và các thành phần khác của ứng dụng.

 

ORM và Quản lý Cơ sở dữ liệu

Express.js không có ORM tích hợp sẵn (Object-Relational Mapping). Bạn có thể sử dụng các ORM bên thứ ba hoặc giao tiếp trực tiếp với cơ sở dữ liệu bằng cách sử dụng các trình điều khiển cơ sở dữ liệu.

Sails.js tích hợp với Waterline, một ORM đa nền tảng, giúp tương tác với cơ sở dữ liệu dễ dàng và cho phép chuyển đổi giữa các hệ quản trị cơ sở dữ liệu khác nhau như MySQL, PostgreSQL, MongoDB và nhiều hơn nữa mà không cần thay đổi mã.

 

Xử lý yêu cầu và Định tuyến

Express.js cung cấp một cách linh hoạt để xử lý yêu cầu và định tuyến thông qua middleware. Bạn có thể tùy chỉnh luồng xử lý yêu cầu và gắn kết middleware để thực hiện các nhiệm vụ như xác thực, xử lý lỗi và nhiều hơn nữa.

Sails.js được xây dựng dựa trên Express.js và cung cấp các tính năng bổ sung cho xử lý yêu cầu và định tuyến, chẳng hạn như blueprint routes cho các hoạt động CRUD mặc định và kiểm soát truy cập dựa trên chính sách (policy-based access control). Điều này đơn giản hóa quá trình xây dựng các API RESTful và quản lý quyền truy cập.

 

Nhìn chung Express.js tập trung vào tính linh hoạt và cho phép bạn nhanh chóng xây dựng ứng dụng web theo sở thích của bạn. Trong khi đó, Sails.js cung cấp một framework toàn diện với hỗ trợ ORM, quản lý cơ sở dữ liệu và các tính năng như blueprint routes và socket.io cho ứng dụng đa nền tảng và real-time.

 

Kết luận

Lựa chọn giữa Express.js và Sails.js phụ thuộc vào yêu cầu và phạm vi của dự án. Nếu bạn cần tính linh hoạt và tùy chỉnh cao, Express.js là sự lựa chọn phù hợp. Trong khi đó, nếu bạn muốn một framework toàn diện với các tính năng mở rộng sẵn để đơn giản hóa việc phát triển ứng dụng, Sails.js là một sự lựa chọn hữu ích.

 

Tài liệu tham khảo

Express.js Documentation: https://expressjs.com/

Sails.js Documentation: https://sailsjs.com/documentation

Official Node.js Documentation: https://nodejs.org/

Stack Overflow: https://stackoverflow.com/