Le Van Liem @vanliem_l Theo dõi
Đã đăng vào thg 7 1, 2017 10:15 CH - 5 phút đc
26.9K 0 6
[Phn 1] Tìm hiu Express js Framework
Chào các b
n, hôm nay mình cùng tìm hi
u v
framework expressjs c
a nodejs nhé!
I/ Gi
i thi
u c
u t
ng quát v
Framework
1. ExpressJS là gì
Express js là m
t Framework nh
, 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
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.
V
performance: Express cung c
p thêm v
các tính n
ă
ng (feature)
đ
dev l
p trình t
t h
ơ
n. Ch
không làm
gi
m t
c
đ
c
a NodeJS.
Và h
ơ
n h
ế
t, các Framework n
i ti
ế
ng c
a NodeJS hi
n nay
đ
u s
d
ng ExpressJS nh
ư
m
t core function,
ch
ng h
n:
SailsJS, MEAN,...
. Các b
n tham kh
o
đ
ây
2. H
ư
ng d
n cài
đ
t Expressjs
Đ
cài
đ
t
đư
c Expressjs b
n c
n chu
n b
nh
ư
sau:
Cài
đ
t NodeJS. B
n tham kh
o
đ
ây
Cài
đ
t NPM. Tham kh
o
đ
ây
Sau khi cài
đ
t Nodejs và NPM thì chúng ta ti
ế
n hành cài
đ
t theo h
ư
ng d
n
đ
ây
808 31 19
Bài đăng này đã không đưc cp nht trong 3 năm
3. C
u trúc c
a ExpressJS
Đ
hi
u h
ơ
n v
c
u trúc Expressjs thì mình
đ
ã chu
n b
t
m
nh này. Các b
n s
d
hi
u h
ơ
n khi xem
😃
Nh
ư
các b
n th
y trên
hình, C
u trúc c
a express js vô cùng
đơ
n gi
n.
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.
package.json ch
a các package cho
ng d
ng ch
y. N
ế
u b
n nào làm v
i PHP ho
c RoR r
i thì le này có ch
c
n
ă
ng t
ươ
ng t
nh
ư
composer.json ho
c Gemle
😃
Folder routes: ch
a các route có trong
ng d
ng
Folder view: ch
a view/template cho
ng d
ng
Folder public ch
a các le css, js, images,...cho
ng d
ng
Sau khi các b
n
đ
ã hi
u s
ơ
qua v
các thành ph
n c
ơ
b
n c
a Express r
i thì chúng ta
đ
ế
n v
i khái ni
m Router
trong Express nhé
😃
II/ Tìm hi
u v
Router trong Express
1. Khái ni
m
Router là m
t Object (khác Routing nhé), nó là m
t instance riêng c
a
middleware
và
routes
(Hai khái ni
m
này là gì thì chúng ta s
tìm hi
u sau nhé). Chính vì nó là m
t
instance
c
a middleware và route nên nó có
các ch
c n
ă
ng c
a c
hai. Chúng ta có th
g
i nó là m
t
mini-application
Các Application dùng ExpressJS làm core
đ
u có ph
n Router
đư
c tích h
p s
n trong
đ
ó.
Router ho
t
đ
ng nh
ư
m
t middleware nên chúng ta có th
dùng nó nh
ư
m
t
arguments
. Ho
c dùng nó nh
ư
m
t
arguments
cho route khác. Nghe có v
khó hi
u
đ
úng không nào. Ví d
nhé:
// invoked for any requests passed to this router
router.use(function(req, res, next) {
// .. some logic here .. like any other middleware
next();
});
// will handle any request that ends in /events
// depends on where the router is "use()'d"
router.get('/events', function(req, res, next) {
// ..
});
Chúng ta c
ũ
ng có th
s
d
ng Router
đ
chia route. Ch
ng h
n:
2. TÌm hi
u các method all c
a router
router.all()
. Method này phù h
p v
i vi
c
đ
nh ngh
ĩ
a mang tính ch
t toàn c
c cho các
prefix
Ví d
:
a. Ta có
đ
o
n code sau.
N
ế
u b
n
đ
t
đ
o
n code này lên trên so v
i t
t cá các route khác. Thì ý ngh
ĩ
a c
a nó là gì nào ? À, mình xin gi
i thích
th
ế
này nhé
😃
.
N
ế
u ta
đ
t route này trên cùng (top) thì nó yêu c
u t
t c
các route bên d
ư
i ph
i
đư
c
requireAuthentication
. Có
ngh
ĩ
a là xác th
c tr
ư
c khi th
c hi
n m
t hành
đ
ng hay m
t task nào
đ
ó ti
ế
p theo. Mình ví d
là
loadUser
ch
ng
h
n.
V
y làm sao ta bi
ế
t
đư
c nó yêu c
u t
t các các route bên d
ư
i ph
i xác th
c
đư
c nh
!? À, chúng ta
đ
ang dùng m
t
kí t
đ
thay th
ế
đ
úng không nào
😃
.
Đ
ó là kí t
*
Đ
o
n code
trên t
ươ
ng
đươ
ng v
i
đ
o
n code sau:
b. Ta có
đ
o
n code sau
Khác v
i ví d
trên.
ví d
này ta có m
t prefix
đ
ã
đư
c xác
đ
nh là
/api/
thay vì dùng
*
. Ngh
ĩ
a là tr
ư
c khi
request vào các route bên trong API thì ph
i qua m
t thao tác xác th
c
requireAuthentication
2. Tìm hi
u router.METHOD()
Router.METHOD() cung c
p cho chúng ta ch
c n
ă
ng Routing trong ExpressJS. C
th
METHOD()
đ
ây là các
HTTP method mà chúng ta th
ư
ng xuyên s
d
ng. Ch
ng h
n
GET, POST, PUT,...
L
ư
u ý là tên method ph
i
đư
c vi
ế
t th
ư
ng nhé (lowercase)
Ví d
:
app.use('/calendar', router);
router.all('*', requireAuthentication, loadUser);
router.all('*', requireAuthentication)
router.all('*', loadUser);
router.all('/api/*', requireAuthentication);
router.get('/user/profile', function(req, res, next) {
res.send('user profile');
});
router.post('/'update/user/:id', function (res, req, next) {
res.send('Update user');
});
Đăng nhp/Đăng ký
VI
new
N
ế
u các b
n mu
n b
o m
t h
ơ
n thì có th
s
d
ng Regex
đ
b
t các Endpoint. Ví d
:
Hi v
ng bài chia s
c
a mình giúp ích cho các b
n. H
n g
p các b
n trong bài vi
ế
t ti
ế
p theo v
ExpressJS nhé
😃
JavaScript Framework
Express
All rights reserved
Bài viết liên quan
router.put('/update/posts/:id', function (req, res, next) {
res.send('Update post');
});
router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){
var from = req.params[0];
var to = req.params[1] || 'HEAD';
res.send('commit range ' + from + '..' + to);
});
Nguyen Ngoc Quyen
2 phút đc
22
S dng MySQL vi Node JS Express
33.8K 7 2
Hunh Quang Dip
8 phút đc
7
Gii thiu mt s framework ca Nodejs
16.9K 5 3
Dương Phm
10 phút đc
6
[Nodejs] - Todo REST API(Part 1)
5.2K 5 0
Doan Van Phu
34 phút đc
Tìm hiu v Framework - Gii thiu mt s Framework ph biến.
Han Van Hiep
5 phút đc
1
Làm thế nào ci thin
performance trong ng dn…
1.2K 3 0
Phm Minh Hưng
7 phút đc
4
Gii thiu Mithril JS: mt
MVC framework cc nh
904 2 1
Nguyen Hoan Long
4 phút đc
2
Xây dng ng dng API bng
Node.js
923 2 0
Dương Phm
11 phút đc
[Nodejs] - Wo
Database(Pa
4.3K 1
Bài viết khác t Le Van Liem
Bình lun
9
13.9K 5 2
Le Van Liem
3 phút đc
5
[Phn 1] API Resources Laravel 5
4.0K 3 2
Le Van Liem
2 phút đc
6
Hưng dn x lí exception trong Laravel
3.8K 3 1
Le Van Liem
2 phút đc
0
[Phn 2] Tìm hiu các method h tr quan h many-to-many
886 2 2
Le Van Liem
3 phút đc
2
[Vue.js] Component Communication Patterns
1.0K 0 0
Đăng nhp đ bình lun
TÀI NGUYÊN
Bài viết T chc
Câu hi Tags
Videos Tác gi
Tho lun Đ xut h thng
Công c Machine Learning
Trng thái h thng
DCH V
Viblo Viblo Code Viblo CTF Viblo CV
Le Van Liem
3 phút đc
2
[Phn 1] Tìm hiu các
method h tr quan h nhi
3.0K 2 0
Le Van Liem
2 phút đc
3
Gii pháp đa ngôn ng vi
Json File trong Laravel 5.4
2.4K 2 0
Le Van Liem
1 phút đc
3
[Phn 1] Laravel Collection
1.8K 3 1
Le Van Liem
4 phút đc
Tìm hiu Cac
Laravel 5
3.6K 3
Viblo Learning
Viblo Partner
Viblo Battle
Viblo Interview
NG DNG DI ĐNG
LIÊN KT
© 2024 Viblo. All rights reserved. V chúng tôi Phn hi Giúp đ FAQs RSS Điu khon

Preview text:

Le Van Liem @vanliem_l Theo dõi
Đã đăng vào thg 7 1, 2017 10:15 CH - 5 phút đọc  808  31  19  26.9K  0  6
[Phần 1] Tìm hiểu Express js Framework
 Bài đăng này đã không được cập nhật trong 3 năm 
Chào các bạn, hôm nay mình cùng tìm hiểu về framework expressjs của nodejs nhé!
I/ Giới thiệu cấu tổng quát về Framework 1. ExpressJS là gì
Express js là một Framework nhỏ, 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
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.
Về performance: Express cung cấp thêm về các tính năng (feature) để dev lập trình tốt hơn. Chứ không làm
giảm tốc độ của NodeJS.
Và hơn hết, các Framework nổi tiếng của NodeJS hiện nay đều sử dụng ExpressJS như một core function,
chẳng hạn: SailsJS, MEAN,... . Các bạn tham khảo ở đây
2. Hướng dẫn cài đặt Expressjs
Để cài đặt được Expressjs bạn cần chuẩn bị như sau:
Cài đặt NodeJS. Bạn tham khảo ở đây
Cài đặt NPM. Tham khảo ở đây
Sau khi cài đặt Nodejs và NPM thì chúng ta tiến hành cài đặt theo hướng dẫn ở đây
3. Cấu trúc của ExpressJS
Để hiểu hơn về cấu trúc Expressjs thì mình đã chuẩn bị tấm ảnh này. Các bạn sẽ dễ hiểu hơn khi xem 😃 Như các bạn thấy trên
hình, Cấu trúc của express js vô cùng đơn giản. 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.
package.json chứa các package cho ứng dụng chạy. Nếu bạn nào làm với PHP hoặc RoR rồi thì file này có chức
năng tương tự như composer.json hoặc Gemfile 😃
Folder routes: chứa các route có trong ứng dụng
Folder view: chứa view/template cho ứng dụng
Folder public chứa các file css, js, images,...cho ứng dụng
Sau khi các bạn đã hiểu sơ qua về các thành phần cơ bản của Express rồi thì chúng ta đến với khái niệm Router trong Express nhé 😃
II/ Tìm hiểu về Router trong Express 1. Khái niệm
Router là một Object (khác Routing nhé), nó là một instance riêng của middleware và routes (Hai khái niệm
này là gì thì chúng ta sẽ tìm hiểu sau nhé). Chính vì nó là một instance của middleware và route nên nó có
các chức năng của cả hai. Chúng ta có thể gọi nó là một mini-application
Các Application dùng ExpressJS làm core đều có phần Router được tích hợp sẵn trong đó.
Router hoạt động như một middleware nên chúng ta có thể dùng nó như một arguments . Hoặc dùng nó như
một arguments cho route khác. Nghe có vẻ khó hiểu đúng không nào. Ví dụ nhé:
// invoked for any requests passed to this router 
router.use(function(req, res, next) {
// .. some logic here .. like any other middleware next(); });
// will handle any request that ends in /events
// depends on where the router is "use()'d"
router.get('/events', function(req, res, next) { // .. });
Chúng ta cũng có thể sử dụng Router để chia route. Chẳng hạn: app.use('/calendar', router); 
2. TÌm hiểu các method all của router new
router.all() . Method này phù hợp với việc định nghĩa mang tính chất toà n cục cho cá VI c prefix
  Đăng nhập/Đăng ký
Ví dụ: a. Ta có đoạn code sau.
router.all('*', requireAuthentication, loadUser); 
Nếu bạn đặt đoạn code này lên trên so với tất cá các route khác. Thì ý nghĩa của nó là gì nào ? À, mình xin giải thích thế này nhé 😃.
Nếu ta đặt route này trên cùng (top) thì nó yêu cầu tất cả các route bên dưới phải được requireAuthentication . Có
nghĩa là xác thực trước khi thực hiện một hành động hay một task nào đó tiếp theo. Mình ví dụ là loadUser chẳng hạn.
Vậy làm sao ta biết được nó yêu cầu tất các các route bên dưới phải xác thực được nhỉ !? À, chúng ta đang dùng một
kí tự để thay thế đúng không nào 😃. Đó là kí tự *
Đoạn code ở trên tương đương với đoạn code sau:
router.all('*', requireAuthentication)  router.all('*', loadUser); b. Ta có đoạn code sau
router.all('/api/*', requireAuthentication); 
Khác với ví dụ trên. Ở ví dụ này ta có một prefix đã được xác định là /api/ thay vì dùng * . Nghĩa là trước khi
request vào các route bên trong API thì phải qua một thao tác xác thực requireAuthentication
2. Tìm hiểu router.METHOD()
Router.METHOD() cung cấp cho chúng ta chức năng Routing trong ExpressJS. Cụ thể METHOD() ở đây là các
HTTP method mà chúng ta thường xuyên sử dụng. Chẳng hạn GET, POST, PUT,...
Lưu ý là tên method phải được viết thường nhé (lowercase) Ví dụ:
router.get('/user/profile', function(req, res, next) {  res.send('user profile'); });
router.post('/'update/user/:id', function (res, req, next) {  res.send('Update user'); });
router.put('/update/posts/:id', function (req, res, next) {  res.send('Update post'); });
Nếu các bạn muốn bảo mật hơn thì có thể sử dụng Regex để bắt các Endpoint. Ví dụ:
router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, function(req, res){  var from = req.params[0];
var to = req.params[1] || 'HEAD';
res.send('commit range ' + from + '..' + to); });
Hi vọng bài chia sẻ của mình giúp ích cho các bạn. Hẹn gặp các bạn trong bài viết tiếp theo về ExpressJS nhé 😃 JavaScript Framework Node.js Express All rights reserved    Bài viết liên quan Làm thế nào cải thiện
Giới thiệu Mithril JS: một
Xây dựng ứng dụng API bằng [Nodejs] - Wo
performance trong ứng dụn… MVC framework cực nhẹ Node.js Database(Pa Han Van Hiep Phạm Minh Hướng Nguyen Hoan Long Dương Phạm 5 phút đọc 7 phút đọc 4 phút đọc 11 phút đọc  1.2K  3  0   1  904  2  1   4  923  2  0   2  4.3K  1 
Sử dụng MySQL với Node JS Express Nguyen Ngoc Quyen 2 phút đọc  33.8K  7  2   22
Giới thiệu một số framework của Nodejs Huỳnh Quang Diệp 8 phút đọc   16.9K  5  3  7
[Nodejs] - Todo REST API(Part 1) Dương Phạm 10 phút đọc   5.2K  5  0  6
Tìm hiểu về Framework - Giới thiệu một số Framework phổ biến. Doan Van Phu 34 phút đọc  13.9K  5  2   9
Bài viết khác từ Le Van Liem [Phần 1] Tìm hiểu các
Giải pháp đa ngôn ngữ với [Phần 1] Laravel Collection Tìm hiểu Cac
method hỗ trợ quan hệ nhiề… Json File trong Laravel 5.4 Laravel 5 Le Van Liem Le Van Liem Le Van Liem Le Van Liem 3 phút đọc 2 phút đọc 1 phút đọc 4 phút đọc   3.0K  2  0  2   2.4K  2  0  3   1.8K  3  1  3  3.6K  3 
[Phần 1] API Resources Laravel 5 Le Van Liem 3 phút đọc   4.0K  3  2  5
Hướng dẫn xử lí exception trong Laravel Le Van Liem 2 phút đọc  3.8K  3  1   6
[Phần 2] Tìm hiểu các method hỗ trợ quan hệ many-to-many Le Van Liem 2 phút đọc   886  2  2  0
[Vue.js] Component Communication Patterns Le Van Liem 3 phút đọc  1.0K  0  0   2 Bình luận
 Đăng nhập để bình luận TÀI NGUYÊN Bài viết Tổ chức Câu hỏi Tags Videos Tác giả Thảo luận Đề xuất hệ thống Công cụ Machine Learning Trạng thái hệ thống DỊCH VỤ Viblo Viblo Code Viblo CTF Viblo CV Viblo Learning Viblo Partner Viblo Battle Viblo Interview ỨNG DỤNG DI ĐỘNG LIÊN KẾT   
© 2024 Viblo. All rights reserved. Về chúng tôi Phản hồi Giúp đỡ FAQs RSS Điều khoản