Nodejs http NHẬN

Thực hiện các yêu cầu HTTP là một trong những công việc hàng ngày được thực hiện bằng cách sử dụng Node. js. Bạn sẽ nhận được một bộ thư viện khổng lồ bao gồm các mô-đun cho các mục đích khác nhau. Một trong những module thường được sử dụng của Node. js là mô-đun HTTP/HTTPS. Hầu hết các nhà phát triển tìm kiếm mô-đun này trong khi di chuyển sang môi trường mới, vì các yêu cầu HTTP/HTTPS là chức năng cốt lõi để bất kỳ ứng dụng nào hoạt động chính xác. Với nút tốt nhất. js, bạn có thể hiểu rõ tất cả những điều cơ bản

Nếu bạn không muốn sử dụng mô-đun HTTP/HTTPS, bạn có thể sử dụng bất kỳ gói npm nào có sẵn để giải quyết mục đích tạo yêu cầu HTTP của mình. Trong bài viết này, chúng tôi sẽ nêu bật các bước đơn giản để thực hiện yêu cầu HTTP với sự trợ giúp của mô-đun HTTP trên máy chủ web Node. Mô-đun này là một mô-đun tích hợp với Nút. js và các gói npm, chẳng hạn như Axios, Got SuperAgent và tìm nạp nút

điều kiện tiên quyết

Bạn không thể bắt đầu làm việc với Node. js với thiết lập môi trường làm việc phù hợp. Bạn cần đáp ứng một số điều kiện tiên quyết trước khi đi sâu vào phần viết mã. Vì vậy, hãy xem bạn cần duy trì những điều kiện nào để bắt đầu viết mã với Node. js

  • Trước tiên, trước khi bạn bắt đầu viết mã, hãy kiểm tra xem bạn có phiên bản Node mới nhất không. js được cài đặt trên hệ thống của bạn. Nếu chưa có thì cài bản mới nhất. Ngoài ra, trong bài viết này, chúng tôi sẽ sử dụng các ví dụ chạy trong Node. js phiên bản 14. x, LTS đang hoạt động
  • Ngoài ra, bạn phải biết cách chạy các lệnh npm trong nút. js, chẳng hạn như npm init. Đảm bảo rằng bạn đã cài đặt các gói cần thiết trước để tránh sự bất tiện khi chạy mã thực tế.  
  • Bạn phải biết cách chạy các tệp JavaScript bằng các lệnh thích hợp.  
  • Bạn phải có hiểu biết cơ bản về Node. js, vì bạn cần xử lý các công cụ kỹ thuật tại đây. Bạn phải tham gia bootcamp phát triển web full-stack tốt nhất để có thêm kiến ​​thức chuyên môn

Nhận yêu cầu HTTP(S)

Mô-đun HTTP là mô-đun mặc định trong thư viện chuẩn của Node. js. Bạn có thể sử dụng mô-đun này và bắt đầu mã hóa mà không cần cài đặt và quản lý các phụ thuộc bên ngoài. Tuy nhiên, trong khi sử dụng nó, bạn sẽ gặp phải một số thách thức vì nó không phải là một mô-đun thân thiện với người dùng so với các mô-đun khác.  

Chúng tôi đã sử dụng một số ví dụ từ GitHub, kho lưu trữ mã nguồn mở của tất cả các mã, để bạn hiểu rõ hơn. Ở đây, chúng tôi đang thực hiện một yêu cầu GET bằng cách sử dụng tùy chọn máy khách HTTP bằng cách gọi dữ liệu được lưu trữ từ JSONPlaceholder giả API. như một phản hồi cho yêu cầu đã hoàn thành, nó sẽ gửi dữ liệu của mười người dùng cùng với tên và ID của họ. trong bài viết này, chúng tôi đã đề cập đến các loại ví dụ khác nhau hiển thị dựa trên gọi lại, dựa trên lời hứa và không đồng bộ/chờ đợi.  

Năm phương pháp khác nhau được thảo luận để thực hiện lệnh gọi GET HTTP tới API trình giữ chỗ. Nút. js cung cấp một mô-đun tích hợp HTTP để thực hiện một số tác vụ liên quan đến HTTP nhằm giúp công việc của bạn dễ dàng hơn.  

Trước khi thảo luận thêm, bạn phải xem xét các điểm sau về mô-đun HTTP/HTTPS

  • Điều đầu tiên, các mô-đun HTTP và HTTPS cung cấp chức năng cấp thấp. Khi bạn thực hiện yêu cầu, bạn sẽ nhận được phản hồi cần thiết theo từng phần thay vì nhận được tất cả các kết quả. Không chỉ điều này, bạn phải phân tích cú pháp phản hồi nhận được theo cách thủ công. Nó có thể trở nên đơn giản đối với định dạng JSON, tuy nhiên, bạn vẫn cần nỗ lực hơn nữa để phân tích cú pháp câu trả lời hoàn chỉnh
  • Thứ hai, mô-đun HTTP của bạn sẽ không hỗ trợ các yêu cầu HTTPS theo mặc định. Vì vậy, bạn cần sử dụng mô-đun HTTPS nếu các yêu cầu HTTPS được thực hiện trong khi giao tiếp.  

Bất chấp những thách thức trên, mô-đun HTTP/HTTPS rất hữu ích vì bạn sẽ được cứu bằng cách loại bỏ độ tin cậy của một số phụ thuộc

Mô-đun yêu cầu

Mô-đun yêu cầu là tùy chọn thân thiện với người dùng hơn mô-đun HTTP để thực hiện lệnh gọi HTTPS. Ngay cả những người cộng đồng đang xem xét nó. Tuy nhiên, không giống như mô-đun HTTP, bạn cần cài đặt mô-đun yêu cầu dưới dạng gói npm.  

Nhấn lệnh sau từ thiết bị đầu cuối để cài đặt mô-đun yêu cầu bằng npm

yêu cầu cài đặt npm

Tuy nhiên, mô-đun này không còn được dùng nữa sau năm 2020 vì không có thay đổi nào được thực hiện đối với mô-đun này. Sau khi cài đặt mô-đun yêu cầu, hãy chạy lệnh sau để xác minh phiên bản

yêu cầu phiên bản npm

Mô-đun này hỗ trợ các cuộc gọi và chuyển hướng HTTPS theo mặc định. Trong ví dụ dưới đây, mã nằm trong phần thân yêu cầu của mã

Ví dụ-

const request = require('request');  
//python requests body
request('https://jsonplaceholder.typicode.com/users', { json: true }, (err, res, body) => { if (err) {  
return console.log(err); }  
console.log(body.url);  
console.log(body.explanation);  
});

đăng nội dung yêu cầu với Curl

Nếu bạn muốn đăng dữ liệu trong nội dung thư yêu cầu bằng Curl, bạn phải chuyển dữ liệu cần thiết cho Curl. Sử dụng công tắc dòng lệnh -d hoặc –data, bạn có thể thực hiện việc này. Với sự trợ giúp của tiêu đề Kiểu nội dung, bạn có thể chỉ định kiểu dữ liệu của thư mà bạn muốn đưa vào. Máy chủ Node HTTP sử dụng tiêu đề này để diễn giải và xử lý dữ liệu trong nội dung thư POST.  

Ví dụ: để gửi JSON đến Nút. js, bạn cần chỉ định loại dữ liệu trong phần thân với sự trợ giúp của Loại nội dung. tiêu đề ứng dụng/json.  

Ví dụ-

//curl post body
curl -X POST https://reqbin.com/echo/post/json  
   -H "Content-Type: application/json"
   -d '{"productId": 123456, "quantity": 100}'  
 Output-
{
    "success": "true"
}

mô-đun HTTPS

Nút. js cung cấp các mô-đun HTTP và HTTPS trong thư viện chuẩn của nó để thực hiện lệnh gọi API HTTP/HTTPS. Để bắt đầu truyền dữ liệu qua HTTPS, bạn cần bao gồm mô-đun HTTPS. Mô-đun này sẽ tiếp tục tạo máy chủ Node HTTPS sẽ lắng nghe các cổng máy chủ để tạo phản hồi cho máy khách của họ.  

const https = require(‘https’);  

Chà, được biết rằng các yêu cầu HTTPS được bảo mật. Vì vậy, sẽ rất hữu ích nếu bạn cũng tạo chứng chỉ SSL (tự ký), đảm bảo liên lạc an toàn. Ở đây, chúng tôi đang bỏ qua phần này

Ở đây, chúng tôi đang sử dụng ví dụ cơ bản cho thấy việc sử dụng mô-đun HTTPS để thực hiện lệnh gọi GET.  

Ví dụ-

const https = require('https');
https.get('https://jsonplaceholder.typicode.com/users', res => {
let data = [];
  const headerDate = res.headers && res.headers.date ? res.headers.date : 'no response date';
  console.log('Status Code:', res.statusCode);
  console.log('Date in Response header:', headerDate);
 res.on('data', chunk => {
    data.push(chunk);
  });
 res.on('end', () => {
    console.log('Response ended: ');
    const users = JSON.parse(Buffer.concat(data).toString());
  for(user of users) {
      console.log(`Got user with id: ${user.id}, name: ${user.name}`);
    }
  });
}).on('error', err => {
  console.log('Error: ', err.message);
});

Đầu ra-

-> nodejs-requests git:(master) node native-https.js
Status Code: 200
Date in Response header: Sun, 10 Jan 2021 22:47:23 GMT
Response ended:
Got user with id: 1, name: Leanne Graham
Got user with id: 2, name: Ervin Howell
Got user with id: 3, name: Clementine Bauch
Got user with id: 4, name: Patricia Lebsack
Got user with id: 5, name: Chelsey Dietrich
Got user with id: 6, name: Mrs. Dennis Schulist
Got user with id: 7, name: Kurtis Weissnat
Got user with id: 8, name: Nicholas Runolfsdottir V
Got user with id: 9, name: Glenna Reichert
Got user with id: 10, name: Clementina DuBuque
-> nodejs-requests git:(master)

Chúng ta sẽ từng bước xem điều gì xảy ra trong đoạn mã trên. Lúc đầu, chúng tôi đã nhập mô-đun HTTPS bằng chức năng được yêu cầu. Bạn sẽ nhận được mô-đun này khi cài đặt Node. js, vì vậy không cần tạo bất kỳ tệp json nào hoặc cài đặt bất kỳ thứ gì để chạy mã này.  

Sau đó, chúng tôi đã thực hiện cuộc gọi đến URL JSONPlaceholder bằng phương thức get. Phương thức GET có một hàm gọi lại sẽ phản hồi biến res

Sau đó, chúng tôi khởi tạo dữ liệu dưới dạng một mảng trống rồi sử dụng nhật ký để hiển thị mã trạng thái và ngày từ tiêu đề của phản hồi. Sau khi nhận được câu trả lời, dữ liệu sẽ được lưu trữ trong mảng dữ liệu

Sau đó, chúng tôi đã sử dụng hàm concat để nối dữ liệu mảng và thay đổi nó thành một chuỗi. Sau đó, chúng tôi đã phân tích cú pháp JSON để lấy tên người dùng và ID của 10 người dùng

Mô-đun Axios

Axios là một Node dựa trên lời hứa, JavaScript phổ biến khác. thư viện js. Bạn có thể sử dụng mô-đun này trên tất cả các trình duyệt hiện đại và hỗ trợ tuyệt vời của nó cho IE8 trở lên. Nó cũng được sử dụng để thực hiện các yêu cầu HTTP có thể hoạt động trơn tru trong cả Trình duyệt và Nút. nền tảng js.  

Sử dụng Axios có thể thuận lợi hơn so với Fetch API gốc

  • Nó hỗ trợ các trình duyệt cũ hơn
  • Nó có thể nhanh chóng hủy bỏ một yêu cầu
  • Nó có thể đặt thời gian chờ phản hồi
  • Nó đi kèm với một bảo vệ CSRF tích hợp
  • Nó cũng hỗ trợ quá trình tải lên
  • Nó thực hiện chuyển đổi dữ liệu JSON tự động

Để sử dụng mô-đun Axios trong mã của bạn, bạn cần cài đặt nó bằng lệnh sau từ thiết bị đầu cuối

cài đặt npm --save axios

Trong ví dụ được đề cập bên dưới, chúng tôi gọi API JSON của người dùng bằng Axios

const axios = require('axios');
//Axios get body
axios.get('https://jsonplaceholder.typicode.com/users')
.then(res => {
    const headerDate = res.headers && res.headers.date ? res.headers.date : 'no response date';
    console.log('Status Code:', res.status);
    console.log('Date in Response header:', headerDate);
 const users = res.data;
for(user of users) {
      console.log(`Got user with id: ${user.id}, name: ${user.name}`);
    }
  })
  .catch(err => {
    console.log('Error: ', err.message);
  });

Do tính chất dựa trên lời hứa, nó sẽ yêu cầu mã ít rõ ràng hơn. Ngoài ra, bạn có thể biến mã này thành định dạng async/await bất cứ khi nào cần. Để sử dụng phần thân của axios, bạn cần nhập nó bằng chức năng được yêu cầu. Sau đó, chúng tôi đã sử dụng các axios. get (phương thức dựa trên lời hứa) để gọi API người dùng JSONPlaceholder

Sau đó, với sự trợ giúp của phương thức “then”, chúng ta đã nhận được dữ liệu được yêu cầu và đã sử dụng biến res để lấy đối tượng phản hồi. Sau đó, sử dụng chức năng nhật ký, chúng tôi đã hiển thị mã trạng thái và ngày từ tiêu đề phản hồi

Dữ liệu JSON sẽ được nhận dưới dạng một mảng có độ phân giải. dữ liệu do tính năng chuyển đổi tự động. Ngoài ra, chúng tôi chạy vòng lặp thông qua người dùng để lấy ID và tên của họ.  

Ví dụ trên dành cho Axios get. Bây giờ, chúng ta sẽ xem ví dụ cho bài đăng Axios. Với Axios, bạn có thể thực hiện các yêu cầu đăng bằng cách sử dụng dữ liệu “đăng” đến một điểm cuối nhất định sẽ kích hoạt các sự kiện mong muốn. Để thực hiện yêu cầu HTTP POST trong Axios, bạn phải gọi axios. bưu kiện(). Trong khi bạn thực hiện yêu cầu POST, bạn cần sử dụng hai tham số. URI của điểm cuối dịch vụ và một đối tượng chứa các thuộc tính mà bạn muốn gửi đến máy chủ Node HTTP

Ví dụ-

// Axios post body–POST request
axios({
  method: 'post',
  url: '/login',
  data: {
    firstName: 'Finn',
    lastName: 'Williams'
  }
});

có mô-đun

Nút. js cung cấp một âm thanh khác và thư viện yêu cầu HTTP thường được sử dụng, Got. Nó được giới thiệu như một giải pháp thay thế nhẹ cho mô-đun Yêu cầu đã đề cập ở trên (hiện không được dùng nữa). Theo mặc định, GOT sẽ không phân tích cú pháp JSON. Đây là lý do tại sao chúng tôi đã thêm {json. true} làm đối số trong mã bên dưới để bao gồm phân tích cú pháp JSON

Giống như Axios, GOT cũng là một API dựa trên lời hứa, khiến nó trở nên phổ biến hơn trong Node. nhà phát triển js

Để sử dụng mô-đun Got, bạn cần nhập nó bằng chức năng được yêu cầu bên dưới

npm install --save got
In the below example, we have used the Got module to get the users from the mock API.
const got = require('got');
got.get('https://jsonplaceholder.typicode.com/users', {responseType: 'json'})
  .then(res => {
    const headerDate = res.headers && res.headers.date ? res.headers.date : 'no response date';
    console.log('Status Code:', res.statusCode);
    console.log('Date in Response header:', headerDate);
   const users = res.body;
    for(user of users) {
      console.log(`Got user with id: ${user.id}, name: ${user.name}`);
    }
  })
  .catch(err => {
    console.log('Error: ', err.message);
  });

Nếu bạn xem xét kỹ một ví dụ, bạn sẽ thấy rằng đoạn mã trên tương tự như mã Axios nhưng có sự khác biệt được đề cập bên dưới

  • Để chỉ định phản hồi ở định dạng JSON, bạn cần chuyển tham số thứ hai một cách rõ ràng- {responseType. 'json'}
  • Ngoài ra, có sự khác biệt trong tiêu đề mã trạng thái, được đề cập là trạng thái

Kiểm tra nút của KnowldgeHut. các khóa học js để biết thêm

Mô-đun siêu đại lý

SuperAgent là một trong những mô-đun lâu đời nhất và phổ biến nhất của Node. js được VisionMedia giới thiệu vào năm 2011. SuperAgent nổi tiếng là thư viện yêu cầu HTTP phía máy khách tiến bộ. Bạn có thể sử dụng mô-đun này để hỗ trợ các tính năng máy khách HTTP cấp cao. Bạn có thể sử dụng nó cho cả API gọi lại và API dựa trên lời hứa. Mô-đun này có nhiều plugin có thể trợ giúp các tác vụ như không có bộ đệm, thời gian HTTP, v.v.

Sử dụng mô-đun SuperAgent, bạn cần nhập nó bằng lệnh sau

________số 8

Trong ví dụ sau, chúng tôi sẽ sử dụng async/await để thực hiện lệnh gọi API

const superagent = require('superagent');
(async () => {
  try {
    const res = await superagent.get('https://jsonplaceholder.typicode.com/users');
    const headerDate = res.headers && res.headers.date ? res.headers.date : 'no response date';
    console.log('Status Code:', res.statusCode);
    console.log('Date in Response header:', headerDate);
 const users = res.body;
    for(user of users) {
      console.log(`Got user with id: ${user.id}, name: ${user.name}`);
    }
  } catch (err) {
    console.log(err.message); //can be console.error
  }
})();

Hãy xem những gì đang xảy ra trong ví dụ trên.  

Đầu tiên, chúng tôi đã sử dụng thư viện superagent bằng chức năng được yêu cầu. Sau đó, chúng tôi đã sử dụng IIFE với async khi chúng tôi sử dụng sự chờ đợi

Tiếp theo, chúng tôi đã thêm khối thử và gọi siêu tác nhân. get với await, với mục đích là giải quyết lời hứa và tạo phản hồi cho các cuộc gọi HTTP. Sau đó sử dụng biến res, chúng ta có ngày từ res. tiêu đề. Sử dụng chức năng nhật ký, chúng tôi hiển thị trạng thái và ngày trên bảng điều khiển

Sau đó, chúng tôi đã sử dụng hằng số "người dùng" để lưu trữ phản hồi đã tạo và lặp qua mảng 10 người dùng đó để lấy tên người dùng và ID của họ. Sau đó, khối bắt sau sẽ kiểm tra mọi lỗi xảy ra và quản lý chúng bằng cách hiển thị thông báo lỗi trên bảng điều khiển

Bạn có thể nói rằng mô-đun SuperAgent đáng tin cậy vì nó được kiểm tra kỹ lưỡng bằng SuperTest (Node. thư viện js).  

tìm nạp nút

Node-fetch là một thư viện yêu cầu HTTP khác dành cho Node. js. Do tìm nạp nút, bạn không phải triển khai XMLHttpRequest trong Nút. js để chạy Fetch polyfill dành riêng cho trình duyệt. Bạn có thể coi nút. tìm nạp dưới dạng mã tối thiểu cho cửa sổ. tìm nạp API tương thích trên Node. thời gian chạy js.  

Để sử dụng nút. tìm nạp mã của bạn, bạn cần nhập mã bằng mã sau

//curl post body
curl -X POST https://reqbin.com/echo/post/json  
   -H "Content-Type: application/json"
   -d '{"productId": 123456, "quantity": 100}'  
 Output-
{
    "success": "true"
}
0

Hãy xem đoạn mã trên khác với mã với SuperAgent bằng cách sử dụng lệnh chờ/async như thế nào

  • Với tìm nạp, bạn sẽ không yêu cầu phương thức GET rõ ràng và bạn có thể thêm khóa phương thức vào tham số thứ hai để gửi động từ HTTP
  • Ngoài ra, chúng tôi đã sử dụng phương thức get để lấy các giá trị tiêu đề. Chúng tôi đã gọi lại. tiêu đề. get('date') để lấy giá trị của tiêu đề phản hồi ngày
  • Chúng tôi đã sử dụng chờ res. json() để mở lời hứa lấy nội dung dưới dạng JSON.  

Yêu cầu xóa HTTP

Bạn có thể sử dụng phần thân xóa HTTP để xóa các tài nguyên cụ thể. Dưới đây là ví dụ về nút thân yêu cầu xóa http sẽ xóa các lệnh gọi API yêu cầu. Hãy xem quá trình hoàn chỉnh

  • Tạo ứng dụng nút.
    mkdir my-request-app
    cd my-request-app
    npm init
  • Cài đặt Axios.
    npm cài đặt axios --save
    máy chủ. js
    const axios = require('axios');
     axios. xóa ('https. // yêu cầu. in/api/users/2')
    . then((res) => {
           bảng điều khiển. nhật ký (`Trạng thái. ${res. status}`);
       }). catch((err) => {
           bảng điều khiển. error(err);
       });
  • Chạy ứng dụng
    máy chủ nút. js
  • đầu ra
  • Trạng thái. 201

Sự kết luận

Chúng tôi đã sử dụng các ví dụ cơ bản để giải thích khái niệm. Nhưng đây không phải là tất cả, vì nó có phạm vi rộng lớn và không kết thúc ở đây. Với bài viết này, bạn sẽ hiểu cách bạn có thể thực hiện yêu cầu HTTP khác đi. Nút. js có một thư viện toàn diện với các chức năng và mô-đun khác nhau để giúp mọi bước và quy trình của bạn dễ tiếp cận hơn.  

Vì vậy, nếu bạn đã xem qua bài viết này, bạn phải hiểu mọi phương pháp hơi khác so với phương pháp khác như thế nào. Vì vậy, có thể không khó để hòa đồng ngay cả đối với người mới bắt đầu

Câu hỏi thường gặp (FAQ)

Q. Nội dung yêu cầu trong Node là gì. js?

Request Body lưu trữ thông tin bổ sung mà bạn muốn gửi đến máy chủ. Thân bài rất cần thiết vì nó chỉ rõ nội dung muốn truyền tải. Bạn có thể sử dụng nội dung yêu cầu để lưu trữ thông tin hữu ích, chẳng hạn như tên người dùng và mật khẩu của một người đang cố đăng nhập vào hệ thống của chúng tôi

Q. Các yêu cầu HTTP hoạt động như thế nào trong Node. js?

Dưới đây là quá trình-

Đầu tiên, máy khách thiết lập kết nối thông qua yêu cầu GET. Đổi lại, máy chủ phản hồi bằng mã trạng thái. Nếu mã trạng thái là 200, máy chủ đã sẵn sàng cho kết nối, được gọi là Phản hồi HTTP

Sau đó, khách hàng gửi yêu cầu (POST) bao gồm thông tin đăng nhập. Máy chủ xử lý thông tin sau khi đối chiếu với cơ sở dữ liệu. Nếu máy chủ phù hợp với tìm thấy, nó sẽ ủy quyền cho nó và gửi phản hồi lại cho máy khách.  

Yêu cầu HTTP trong Nodejs là gì?

mô-đun http . Tiếp theo, chúng tôi sử dụng http. yêu cầu gửi dữ liệu đến máy chủ và chờ phản hồi . Phản hồi được lưu trữ trong biến req và khi có lỗi, nó sẽ được đăng nhập vào bảng điều khiển.

Chúng tôi có thể sử dụng tìm nạp trong Nodejs không?

Hỗ trợ Fetch() hiện đã có trong Node. js dưới dạng tính năng cốt lõi thử nghiệm . Fetch() là API máy khách HTTP đa nền tảng được yêu thích, hoạt động trong trình duyệt và Web/Service Worker.

Yêu cầu HTTP GET được thực hiện trong nút JS như thế nào?

Nó được gọi bằng cách tạo một đối tượng tùy chọn như. tùy chọn const = {máy chủ. 'ở đâu đó. com', cổng. 443, con đường. '/ some/path', phương thức. 'NHẬN', tiêu đề. { 'Loại nội dung'. 'ứng dụng/json' } };

Axios có tốt hơn tìm nạp không?

Axios cho phép hủy yêu cầu và hết thời gian yêu cầu. Không tìm nạp . Axios có khả năng chặn các yêu cầu HTTP. Tìm nạp, theo mặc định, không cung cấp cách chặn yêu cầu.