Ví dụ Request & Response Object Express trong NodeJs

Ví dụ Request & Response Object Express trong NodeJs là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Ví dụ Request & Response Object Express trong NodeJs sẽ chia sẻ tới bạn nhiều thông tin hữu ích

Mọi người vẫn hỏi tôi về việc học lập trình nói chung và NodeJS nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.

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.

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 object là req 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.

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://hoidapcode.com/user/123
 
app.get('user/:userid', (req, res) => {
  console.log(req.params.userid) // "123"
}) 

req.query

 // GET https://hoidapcode.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://hoidapcode.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://hoidapcode.net/search?keyword=nodejs
 
app.get('/search', (req, res) => {
  console.log(req.protocol)     // "https"
  console.log(req.hostname)     // "hoidapcode.com"
  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; //<span style="color: rgb(34, 34, 34); font-family: Roboto, Ubuntu, Arial, sans-serif; font-size: 12px; white-space: pre;">gsnsjfr3j09n02v</span>
}) 

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: ['hoidapcode', '.net', 'laptrinh'] }) //Tự động chuyển về dạng json
  res.send('<h1>hoidapcode</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: ['hoidapcode', '.net', 'laptrinh']}) //"{"web":["hoidapcode",".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://Hoidapcode.com') 

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

Hy vọng với bài viết về Ví dụ Request & Response Object Express trong NodeJs đã giải đáp giúp bạn phần nào về kiến thức lập trình NodeJS. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.

Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.

Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!

Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!