EXPRESS FRAMEWORK
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Request & Response Object trong Express

Trong bài viết mình sẽ giới thiệu về 2 objects trong Express đó là Request và Response, tiếp tục series này với một phần khá quan trọng trong Express.

Express.js là module hỗ trợ việc khởi tạo server phổ biến nhất vì nó cung cấp sự trừu tượng hóa thân thiện với nhà phát triển của module http trong Node.js. Nó giống như sử dụng jQuery thay vì document.querySelectorAll vì nó cho phép bạn, nhà phát triển, làm việc hiệu quả hơn.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Khi bạn truy cập vào một trang web thì trình duyệt sẽ request (yêu cầu) đến server làm các tác vụ mà bạn yêu cầu và sau khi xử lý hành động server sẽ phản hồi (response) lại cho người dùng.

1. Request Object trong Express là gì ?

Request Object trong Express.js cho phép bạn kiểm tra mọi khía cạnh về yêu cầu mà người dùng (client) gửi đến server(cho dù bằng trình duyệt, bằng cURL hoặc trình duyệt di động, v.v.). Trong request object bao gồm rất nhiều thứ như url, method, form data, header,...Khi bạn khởi tạo một route khi người dùng (client) truy cập đồng nghĩa với việc người dùng đã gửi cho ứng dụng Express một Request.

Ví dụ khi người dùng đăng nhập, request object lúc này bao gồm dữ liệu như email, mật khẩu,...Việc chúng ta cần làm là lấy các giá trị của object và kiểm tra đăng nhập.

app.get('/login', (req, res) => {
    //Lấy username và password từ request của nguười dùng
    let {username, password} = req.param
    
})

Request object là tham số req trong callback function của route. Từ bây giờ trở đi mình sẽ mặc định gọi Request objectreq cho ngắn gọn nha! Bài viết này mình sẽ liệt kê ra các thuộc tính trong req mà Express cung cấp và chỉ ra các thuộc tính hay dùng trong quá trình khởi tạo ứng dụng Express

Làm việc với Request Object

Như mình đã đề cập ở trên, phần này mình sẽ chia ra thành 2 phần lớn đó là giới thiệu thuộc tính và chia sẻ các thuộc tính hay dùng.

Các thuộc tính có trong Req Object

Đây là một vài thuộc tính có trong req obejct mà Express cung cấp cho chúng ta :

# Thuộc tính Miêu tả
1. req.app Giữ tham chiếu đến đến middleware
2. req.baseurl Hiển thị đường dẫn cụ thể đến route được chỉ định
3. req.body Nó chứa key - value dữ liệu được gửi đến bởi client. Mặc định, nó có giá trị là undefined, và thông thường được gán gía trị khi ta parse body bằng middleware body-parse
4. req.cookies Chứa các giá trị của cookies mà ngươi dùng gửi đến, khi ta sử dụng middleware cookiep-parse thì thuộc tính vào mới có dữ liệu.
5. req.fresh Chỉ định yêu cầu này là mới khởi tạo
6. req.hostname Chứa giá trị của của host trong header
7. req.ip Chứa địa chỉ IP của người dùng khi request
8. req.ips Khi cài đặt proxy tin cậy được bật, thuộc tính này chứa một mảng các IP cụ thể.
9. req.originalurl Cũng giống như req.url, tuy nhiên nó lại chứa nguyên url của request, cho phép bạn có thể sửa đổi req.url một cách tùy ý.
10. req.params Một object chứa các thuộc tính cho việc định danh route. Ví dụ bạn có một route là /posts/:postID, khi truy cập vào đường dẫn /posts/123 thì để lấy giá trị của postID bạn chỉ cần lấy bằng cách req.params.postID
11. req.path Chứa path của URL
12. req.protocol Một chuỗi chứa request protocol, 'http' hoặc 'https' khi request với TLS
13. req.query Một object chứa các parameter của route
VD: localhost:3000/user?freetuts=true&laptrinh=nodejs
khi này req.query sẽ là bao gồm một object chứa
{freetuts: true, laptrinh: 'nodejs' }
14. req.route Một chuỗi chứa route hiện tại
15. req.secure Trả về kiểu boolean có giá trị true nếu kết nối TLS được kích hoạt
16. req.signedcookies Khi sử dụng middleware hỗ trợ việc sign cookie, thuộc tính này chứa cookie đã sign theo yêu cầu, chưa sign và sẵn sàng để sử dụng.
17. req.stale ngược lại với req.fresh
18. req.subdomains Trả về một mảng gía trị của subdomain trong domain chính
19. req.xhr Trả về kiểu Boolean là true nếu trường tiêu đề "x-request-with" của yêu cầu là "xmlhttprequest".

Một vài thuộc tính thường dùng

Mình sẽ giới thiệu tổng quan và các thuộc tính phổ biến nhất trong quá trình làm việc với Express, các bạn đọc qua các thuộc tính mà mình cung cấp ở phần trên và chú ý đến các thuộc tính phổ biến bên dưới. Mình sẽ gộp lại các phần với nhau tùy theo từng chức năng để tiện theo dõi nhé !

Lấy dữ liệu người dùng gửi đến

Có 3 cách để chúng ta nhận dữ liệu từ người dùng gửi về tùy theo từng trường hợp : req.params, req.query, và req.body

req.params

// GET https://freetuts.com/user/123

app.get('user/:userid', (req, res) => {
  console.log(req.params.userid) // "123"
})

req.query

// GET https://freetuts.com/user?userID=123&action=changeProfile

app.get('user/', (req, res) => {
  console.log(req.query.userID) // "123"
  console.log(req.query.action) // "changeProfile"
})

req.body

// POST https://freetuts.net/login {username: 'admin',  password: '1234'}

app.get('login/', (req, res) => {
  console.log(req.body.username) // "admin"
  console.log(req.body.password) // "1234"
})

Lấy các giá trị của URL :

Chúng ta có thể truy cập đến các phần tử lưu giữ các thông tin của URL như protocol, hostname, path, subdomains,.. việc này sẽ hiểu ích trong quá trình làm việc cần xử lý các tác vu liên quan đến URL

// https://freetust.net/search?keyword=nodejs

app.get('/search', (req, res) => {
  console.log(req.protocol)     // "https"
  console.log(req.hostname)     // "freetuts.net"
  console.log(req.path)         // "/search"
  console.log(req.originalUrl)  // "/keyword=nodejs"
  console.log(req.subdomains)    // "['']"
})

Lấy giá trị của header

Ngoài gửi các dữ liệu và người dùng, trình duyệt còn gửi đi các header chứa các thông tin bổ sung như Connection, Keep-Alive, Proxy-Authenticate,...

app.post('/login', (req, res) => {
  req.header('Content-Type')  // "application/json"
  req.header('Content-Length') // 75"
  req.header('user-agent')    // "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.4062.3 Safari/537.36"
  req.header('Authorization') // "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
})

Lấy gíá trị của cookies

Khi sử dụng các midleware hỗ trợ việc parse cookie như cookie-parse, object req.cookies sẽ bao gồm các cookies của người dùng.

app.post('/login', (req, res) => {
   req.cookies.isShowPopup; // true
   req.cookies.sessionID; //gsnsjfr3j09n02v
})

2. Response Object trong NodeJS

Trong phần chúng ta sẽ cùng nhau đi tìm hiểu về Response Object trong Express. Response object trong Express thường được viết tắt là res, nó cung cấp cho bạn một cách thức đơn giản để phản hồi các yêu cầu HTTP. Trong bài viết này, mình sẽ đề cập đến những phần quan trọng nhất của response object trong Node.js.

Dưới đây là một vài phương thức cơ bản của response object, mà thường hay được sử dụng. Mình sẽ liệt kê ra bên dưới

res.send

res.send có lẽ là phương thức nổi tiếng nhất được sử dụng trên res. Với res.send () bạn có thể trả lời các yêu cầu HTTP với tất cả các loại dữ liệu:

app.get('/', (req, res) => {
  res.send({ web: ['freetuts', '.net', 'laptrinh'] }) //Tự động chuyển về dạng json
  res.send('<h1>Freetuts</h1>') //Trả về html
  res.send('normal text'') //Trả về text thông thường
});

res.json

Phương thức này sẽ phản hồi về dạng json

app.get('/', (req, res) => {
  res.json({ web: ['freetuts', '.net', 'laptrinh']}) //"{"web":["freetuts",".net","laptrinh"]}"
});

res.status

Chỉ định mã phản hồi HTTP, status thể hiện trạng thái của phàn hổi.

app.get('/', (req, res) => {
  res.status(302)
});

Mỗi đầu mã sẽ thể hiện trạng thái phàn hồi khác nhau, dưới đây là các đầu mã và trạng thái của nó:

  • 1xx : Thông tin
  • 2xx: Thành công
  • 3xx: Chuyển hướng
  • 4xx: Lỗi ở clients
  • 5xx: Lỗi ở server

res.redirect

Bạn có thể chuyển hướng khách hàng đến các route trong ứng dụng hoặc đến các trang web khác nhau:

res.redirect('/home')
res.redirect('https://freetuts.net')

res.render

Phương thức này sẽ phàn hồi nội dung của HTML trong file chỉ định về clients, nếu bạn kết hợp Express với các template engine như Pug, EJS,... thì phương thức này sẽ tự động biên dịch các template này sang HTML thông thường và phàn hồi cho clients.

app.get('/home', (req, res) => {
  res.render('home.html', {name: 'nguyentri'});
});

Ngoài ra, bạn còn có thể truyền tham số vào cho view bằng cách thêm vào một tham số là obejct chứa các giá trị muốn truyền đi.

res.end

Kết thúc phàn hồi đến clients

app.get('/home', (req, res) => {
  res.send('abc')
  res.end()
});

Trong bài này chúng ta đã cùng nhau đi tìm hiểu về Request và Response Object trong Express, đây là kiến thức rất cơ bản về nó nhưng cũng hết sức quan trọng trong quá trình làm việc với Express. Mong rằng bài viết sẽ giúp ích cho bạn

Cùng chuyên mục:

Crawl dữ liệu website bằng NodeJS cơ bản

Crawl dữ liệu website bằng NodeJS cơ bản

CORS là gì ? Xử lý CORS trong NodeJS

CORS là gì ? Xử lý CORS trong NodeJS

Chắc hẳn trong quá trình xử lý các request tới server thì một vài trường…

Xử lý form trong Express

Xử lý form trong Express

Xây dựng URL trong Express

Xây dựng URL trong Express

Trong bài viết này chúng ta sẽ cùng nhau đi tìm hiểu về cách xây…

Populate trong Mongoose

Populate trong Mongoose

Error Handling & Debugging trong Socket.io

Error Handling & Debugging trong Socket.io

Namespaces & Rooms trong Socket.io

Namespaces & Rooms trong Socket.io

Middleware trong Mongoose

Middleware trong Mongoose

Create / Read / Update / Delete trong Mongoose

Create / Read / Update / Delete trong Mongoose

Validation trong Mongoose

Validation trong Mongoose

Subdocuments trong Mongooose

Subdocuments trong Mongooose

Documents trong Mongoose

Documents trong Mongoose

Trong bài viết này chúng ta sẽ tìm hiểu về documents trong Mongoose

Models trong Mongoose

Models trong Mongoose

SchemaTypes trong Mongoose

SchemaTypes trong Mongoose

Schemas trong Mongoose

Schemas trong Mongoose

Mongoose trong NodeJS

Mongoose trong NodeJS

Làm việc với Table MySQL sử dụng Nodejs

Làm việc với Table MySQL sử dụng Nodejs

Kết nối với MongoDB trong NodeJS

Kết nối với MongoDB trong NodeJS

Giới thiệu MongoDB trong NodeJS

Giới thiệu MongoDB trong NodeJS

Insert / Update / Delete / Select MySQL trong NodeJS

Insert / Update / Delete / Select MySQL trong NodeJS

Top