Express và Sails? Cái nào tốt hơn (Phần 1)
Xin chào các bạn , hôm nay mình sẽ giới thiệu đến các bạn 2 framework khá phố biến của Nodejs là Express và Sails. Thằng nào ngon hơn , nên sài thằng nào bây giờ?
Express
Thằng này thì quá kinh điển rồi, nếu đã tìm hiểu đến Nodejs hẳn các bác cũng đã từng nghe qua Express. Thằng này là framework của node giúp ta dễ dàng xây dựng một Restful server, hoặc giống như một web application (Mình chả biết giải thích sau nhưng theo mình hiểu là xây dựng một cái giống với WordPress, bác nào thử code coi )
Express
Fast, unopinionated, minimalist web framework for Node.js
Nói cách khác thì thằng này là như là ổng tổ của các framework khác bao gồm cả Sails mà mình đã đề cập ở tít.
Một số framework build giựa trên Express
- Feathers: Build prototypes in minutes and production ready real-time apps in days.
- ItemsAPI: Search backend for web and mobile applications built on Express and Elasticsearch.
- KeystoneJS: Website and API Application Framework / CMS with an auto-generated React.js Admin UI.
- Kraken: Secure and scalable layer that extends Express by providing structure and convention.
- LEAN-STACK: The Pure JavaScript Stack.
- LoopBack: Highly-extensible, open-source Node.js framework for quickly creating dynamic end-to-end REST APIs.
- MEAN: Opinionated fullstack JavaScript framework that simplifies and accelerates web application development.
- Sails: MVC framework for Node.js for building practical, production-ready apps.
Trang chủ http://expressjs.com
Sails
What Is Sails.js?
Sails makes it easy to build custom, enterprise-grade Node.js apps. It is designed to emulate the familiar MVC pattern of frameworks like Ruby on Rails, but with support for the requirements of modern apps: data-driven APIs with a scalable, service-oriented architecture. It’s especially good for building chat, realtime dashboards, or multiplayer games; but you can use it for any web application project – top to bottom.
Như đã nói ở trên, thằng này được xây dựng theo Express. Nghĩa là
Sails = Express + thêm một cục chức năng mới + thêm cách tổ chức file = Framework mới
Vậy không sài bà nó Sails cho rồi, vừa đẹp trai như Express mà lại giàu có nữa (soái ca )
Trang chủ http://sailsjs.org
Sau đây mình sẽ so sánh mốt số khả năng làm việc của hai thằng này để các bác hình dung nên dùng thằng nào nhé.
RESTful server
RESTful
REST định nghĩa các quy tắc kiến trúc để bạn thiết kế Web services chú trọng vào tài nguyên hệ thống, bao gồm các trạng thái tài nguyên được định dạng như thế nào và được chuyển tải qua HTTP thông qua số lượng lớn người dùng và được viết bởi những ngôn ngữ khác nhau. Em copy trên mạng đấy, khó hiểu vl các bác đừng đọc
Theo em thì đơn giản là nó quy chuẩn trạng thái và định nghịa của một API server. VD khi bác lấy thông tin thì dùng method GET, tạo mới là POST, sửa là PUT và xóa là DELETE. Kết quả gửi đi gửi về thường là JSON. Thôi kệ nó đi nó muốn là gì kệ nó
Đối với Express, nếu muốn xây dựng một RESTful server thì thường em làm các bước sau.
- Thiết kế model (thường sài mongoose)
- Viết từng controller nếu nhu cầu phức tạp, không thì em thả vào app.js luôn
- Require các cái ở trên vào app.js
- Cài đặt mấy cái middleware, kết nối với mongodb
- node app.js
- Error
Nhìn có vẻ khá mệt hả các bác
Còn nếu sài Sails thì dễ dàng hơn nhiều
- sails generate api flash
- Xong
Với việc có chức năng gọi là “Blueprints”, nó khiến cho công việc còn lại cực kì dễ dàng, Sails cũng hỗ trợ lưu data dạng file ngay lúc đầu thiết lập nên các bác cũng không phải mệt mỏi thiết lập kết nối với db server mà nếu có cũng nhanh hơn express nhiều. Đảm bảo
Tuy nhiên mình thích Express hơn và khuyên các bác nên dùng Express cùng với em. Ơ điên à , rõ ràng sài Sails ngon hơn nhiều mà, nhanh chóng y như lời bác Bill-san căn dặn.
Tôi chọn người lười biếng để làm những việc khó khăn. Bởi một người lười biếng sẽ tìm ra cách dễ dàng để làm việc đó
Bill Gate – San
Khác biệt ở chỗ này này các bác.
Các bác tử chạy node app.js với Express và sails lift với Sails thử xem.
Express khởi động nhanh hơn! Đơn giản vì Express là framework cực kì gọn nhẹ, các bác thích có chức năng gì thì tự đi mà thêm vào trong khi đó Sails lại ôm đồm quá nhiều chức năng mà có khi bạn chưa sử dụng tới, nó khiến cho sails trở nên nặng nề. Và mình cũng hay có thói quen Combo sửa vài ba kí tự, Ctrl + S, node app.js, F5, vẫn lỗi, quay lại bước đầu . Nên dù chênh lệnh nhau không quá lớn cũng khiến cho mình cảm thấy khó chịu. Nhưng mà xây dựng trên Express lằng nhằng lắm, tới tận 6 bước cơ mà. Thực sự nhìn to lớn vậy thôi chứ nhanh lắm.
Thiết kế model (./model/User.js)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
var AutoIncrement , Schema , mongoose , shopSchema ;
mongoose = require ( 'mongoose' ) ;
AutoIncrement = require ( 'mongoose-sequence' ) ;
Schema = mongoose . Schema ;
shopSchema = new mongoose . Schema ( {
_id : Number ,
name : {
type : String ,
require : [ true , "Missing Shop's name" ]
} ,
fb : String ,
fbToken : String ,
ship : Array ,
setting : Schema . Types . Mixed ,
active : Boolean ,
user : {
type : Number ,
ref : 'User'
} ,
date : {
type : Date ,
"default" : Date . now
}
} , {
_id : false
} ) ;
shopSchema . plugin ( AutoIncrement , {
id : 'shopID'
} ) ;
module . exports = mongoose . model ( 'Shop' , shopSchema ) ;
|
Viết controller (./controllers/user.js)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
var Shop ;
Shop = require ( '../models/Shop' ) ;
module . exports = {
shopsGET : function ( req , res ) {
return Shop . find ( ) . exec ( function ( error , shops ) {
return res . ok ( shops ) ;
} ) ;
} ,
shopGET : function ( req , res ) {
return Shop . findOne ( {
_id : req . params . id
} ) . exec ( function ( error , shops ) {
if ( error ) {
return res . error ( error ) ;
} else if ( shops == null ) {
return res . notfound ( ) ;
} else {
return res . ok ( shops ) ;
}
} ) ;
} ,
shopPOST : function ( req , res ) {
var shop ;
shop = new Shop ( req . body . data ) ;
return shop . save ( function ( error , data ) {
if ( error ) {
return res . error ( error ) ;
} else {
return res . created ( ) ;
}
} ) ;
} ,
shopPUT : function ( req , res ) {
if ( req . params . id != null ) {
delete req . body . data . _id ;
return Shop . findOneAndUpdate ( {
_id : req . params . id
} , req . body . data ) . exec ( function ( error , shop ) {
if ( error ) {
return res . error ( error ) ;
} else if ( shop == null ) {
return res . notfound ( ) ;
} else {
return res . ok ( ) ;
}
} ) ;
} else {
return res . error ( 'Missing shopID' ) ;
}
} ,
shopDEL : function ( req , res ) {
if ( req . params . id != null ) {
return Shop . findOneAndRemove ( {
_id : req . params . id
} ) . exec ( function ( error , shop ) {
if ( error ) {
return res . error ( error ) ;
} else if ( shop == null ) {
return res . notfound ( ) ;
} else {
return res . ok ( ) ;
}
} ) ;
} else {
return res . error ( 'Missing shopID' ) ;
}
}
} ;
|
Sao dài thế. Thực ra nó chỉ dài hơn Sails ở đoạn model 4-5 dòng thôi. Không có của sails generate api flash là chạy luôn đâu, tin người vl . Thực ra cũng chạy được nhưng áp dụng vào thực tế chắc chắn các bạn phải sửa lại từ model đến controller cho phù hợp thôi.
Vậy có thể thấy khi viết bằng Express thì các bác chỉ dài hơn Sails khoảng
- 4-5 dòng ở Model
- 4-5 dòng dể require Model và Controller vào app.js
- 10-15 dòng thêm middlewarve, kết nối db, thiết lập http server
Tổng cộng lại 25 dòng, các bác hoàn toàn có thể lưu lại file app.js để dành, coi như là framework riêng của các bác đấy, upload nên Github rồi nổi tiếng thôi . Sau này chỉ cần sửa lại 4-5 dòng là áp dụng cho project khác được rồi đúng không. Vừa có framework riêng, vừa chạy nhanh gọn lẹ. Vì vậy nếu xây dựng RESTful server thì các bác nên dùng Express giống em đi.
Có thể bạn chưa biết:
- Hệ thống giới thiệu sản phẩm, dịch vụ thông minh SCatalog và SBrochure ( hệ thống catalog và brochre thông minh trên smartphone và tablet)
- Quản lý chi tiêu, thu/chi kinh doanh, tài chính cá nhân,... trên smartphone
- Mời sinh nhật, đám cưới... nhanh và dễ dàng
- STracking ứng dụng chấm công nhân viên làm các công việc ngoài văn phòng công ty
- Đặt món dễ dàng
- Chăm sóc khách hàng tại bệnh viện, phòng khám
- Driver Plus nhắc nhở bảo dưỡng xe, thay nhớt...
- Gọi GAS chỉ với một nút bấm trên smartphone
- Hệ thống catalog và brochre thông minh trên smartphone và tablet
- ứng dụng công nghệ vào giáo dục
- Ứng dụng quản lý garage trên smartphone và tablet
- Nhà thông minh, tích hợp vi mạch
DVMS chuyên:
- Tư vấn, xây dựng, chuyển giao công nghệ Blockchain, mạng xã hội,...
- Tư vấn ứng dụng cho smartphone và máy tính bảng, tư vấn ứng dụng vận tải thông minh, thực tế ảo, game mobile,...
- Tư vấn các hệ thống theo mô hình kinh tế chia sẻ như Uber, Grab, ứng dụng giúp việc,...
- Xây dựng các giải pháp quản lý vận tải, quản lý xe công vụ, quản lý xe doanh nghiệp, phần mềm và ứng dụng logistics, kho vận, vé xe điện tử,...
- Tư vấn và xây dựng mạng xã hội, tư vấn giải pháp CNTT cho doanh nghiệp, startup,...
Vì sao chọn DVMS?
- DVMS nắm vững nhiều công nghệ phần mềm, mạng và viễn thông. Như Payment gateway, SMS gateway, GIS, VOIP, iOS, Android, Blackberry, Windows Phone, cloud computing,…
- DVMS có kinh nghiệm triển khai các hệ thống trên các nền tảng điện toán đám mây nổi tiếng như Google, Amazon, Microsoft,…
- DVMS có kinh nghiệm thực tế tư vấn, xây dựng, triển khai, chuyển giao, gia công các giải pháp phần mềm cho khách hàng Việt Nam, USA, Singapore, Germany, France, các tập đoàn của nước ngoài tại Việt Nam,…
Quý khách xem Hồ sơ năng lực của DVMS tại đây >>
Quý khách gửi yêu cầu tư vấn và báo giá tại đây >>