Cách tạo một ứng dụng HTTP với Core HTTP trong Node.js

Thứ bảy - 27/02/2021 16:35
Ứng dụng web hiện đại giao tiếp với các máy chủ khác để hoàn thành nhiệm vụ là điều bình thường. Ví dụ: ứng dụng web cho phép bạn mua sách trực tuyến có thể liên quan đến giao tiếp giữa máy chủ đặt hàng của khách hàng, máy chủ kiểm kê sách và máy chủ thanh toán. Trong thiết kế này, các dịch vụ khác nhau giao tiếp thông qua các API web — các định dạng tiêu chuẩn cho phép bạn gửi và nhận dữ liệu theo chương trình.
NODE
NODE

Theo dòng sự kiện

Cách làm việc với tệp bằng Mô-đun fs trong Node.js

Làm việc với các tệp là phổ biến cho các mục đích phát triển cũng như cho các mục đích không phát...

Cách khởi chạy các tiến trình con trong Node.js

Khi người dùng thực thi một chương trình Node.js , nó sẽ chạy như một quá trình hệ điều hành (OS)...

Những tin cũ hơn

Cách làm việc với tệp bằng Mô-đun fs trong Node.js

Làm việc với các tệp là phổ biến cho các mục đích phát triển cũng như cho các mục đích không phát...

Cách khởi chạy các tiến trình con trong Node.js

Khi người dùng thực thi một chương trình Node.js , nó sẽ chạy như một quá trình hệ điều hành (OS)...

 Trong ứng dụng Node.js , bạn có thể giao tiếp với các API web bằng cách thực hiện các yêu cầu HTTP.
Node.js đi kèm với một httpvà một httpsmô-đun . Các mô-đun này có chức năng tạo một máy chủ HTTP để chương trình Node.js có thể phản hồi các yêu cầu HTTP. Họ cũng có thể thực hiện các yêu cầu HTTP đến các máy chủ khác. Chức năng chính này trang bị cho các nhà lập trình Node.js để tạo các ứng dụng web hiện đại, chạy trên nền tảng API với Node.js. Vì nó là một mô-đun cốt lõi, bạn không cần cài đặt bất kỳ thư viện nào để sử dụng nó.
Trong hướng dẫn này, bạn sẽ sử dụng httpsmô-đun để thực hiện các yêu cầu HTTP tới JSON Placeholder , một API REST giả cho mục đích thử nghiệm. Bạn sẽ bắt đầu bằng cách đưa ra một GETyêu cầu, yêu cầu HTTP tiêu chuẩn để nhận dữ liệu. Sau đó, bạn sẽ xem xét các cách để tùy chỉnh yêu cầu của mình, chẳng hạn như bằng cách thêm tiêu đề. Cuối cùng, bạn sẽ làm POSTPUTvà DELETEyêu cầu để bạn có thể chỉnh sửa dữ liệu trong một máy chủ bên ngoài.

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

  • Hướng dẫn này yêu cầu bạn phải cài đặt Node.js. Sau khi cài đặt, bạn sẽ có thể truy cập vào httpsmô-đun được sử dụng trong suốt hướng dẫn. Hướng dẫn này sử dụng Node.js phiên bản 10.19.0. Để cài đặt Node.js trên macOS hoặc Ubuntu 18.04, hãy làm theo các bước trong Cách cài đặt Node.js và Tạo môi trường phát triển cục bộ trên macOS hoặc phần Cài đặt bằng PPA của Cách cài đặt Node.js trên Ubuntu 18.04 .
  • Các phương thức được sử dụng để gửi yêu cầu HTTP có API dựa trên luồng. Trong Node.js, các luồng là các thể hiện của bộ phát sự kiện. Cách bạn phản hồi dữ liệu đến từ một luồng cũng giống như cách bạn phản hồi dữ liệu từ các sự kiện. Nếu tò mò, bạn có thể có thêm kiến ​​thức chuyên sâu về bộ phát sự kiện bằng cách đọc hướng dẫn Sử dụng bộ phát sự kiện trong Node.js của chúng tôi .

Bước 1 - Đưa ra GETyêu cầu

Khi bạn tương tác với một API, bạn thường đưa ra GETyêu cầu truy xuất dữ liệu từ máy chủ web. Trong bước này, bạn sẽ xem xét hai hàm để thực hiện GETyêu cầu trong Node.js. Mã của bạn sẽ truy xuất một mảng JSON gồm hồ sơ người dùng từ một API có thể truy cập công khai.
Các httpsmô-đun có hai chức năng để thực hiện GETyêu cầu-the get()chức năng, mà chỉ có thể thực hiện GETyêu cầu, và các request()chức năng, mà làm cho các loại yêu cầu. Bạn sẽ bắt đầu bằng cách đưa ra một yêu cầu với get()hàm.

Đưa ra yêu cầu với get()

Các yêu cầu HTTP sử dụng get()hàm có định dạng sau:
https.get(URL_String, Callback_Function) {
    Action
}
 
Sao chép
Đối số đầu tiên là một chuỗi có điểm cuối mà bạn đang thực hiện yêu cầu. Đối số thứ hai là một hàm gọi lại , mà bạn sử dụng để xử lý phản hồi.
Đầu tiên, hãy thiết lập môi trường mã hóa của bạn. Trong thiết bị đầu cuối của bạn, hãy tạo một thư mục để lưu trữ tất cả các mô-đun Node.js của bạn cho hướng dẫn này:
  • mkdir requests  
Sao chép
Nhập thư mục đó:
  • cd requests
Sao chép
Tạo và mở một tệp mới trong trình soạn thảo văn bản. Hướng dẫn này sẽ sử dụng nanovì nó có sẵn trong thiết bị đầu cuối:
  • nano getRequestWithGet.js
Sao chép
Để thực hiện các yêu cầu HTTP trong Node.js, hãy nhập httpsmô-đun bằng cách thêm dòng sau:
request / getRequestWithGet.js
const https = require('https');
Sao chép
Lưu ý:: Node.js có một httpvà một httpsmô-đun. Chúng có các chức năng giống nhau và hoạt động theo cách tương tự, nhưng httpsthực hiện các yêu cầu thông qua Bảo mật tầng truyền tải (TLS / SSL) . Vì các máy chủ web bạn đang sử dụng khả dụng qua HTTPS nên bạn sẽ sử dụng httpsmô-đun. Nếu bạn đang thực hiện các yêu cầu đến và đi từ các URL chỉ có HTTP, thì bạn sẽ sử dụng httpmô-đun.

Bây giờ, hãy sử dụng http đối tượng để thực hiện một GETyêu cầu tới API để truy xuất danh sách người dùng. Bạn sẽ sử dụng Trình giữ chỗ JSON , một API có sẵn công khai để thử nghiệm. API này không lưu giữ bất kỳ thay đổi nào bạn thực hiện trong các yêu cầu của mình. Nó mô phỏng một máy chủ thực và trả lại các phản hồi bị chế nhạo miễn là bạn gửi một yêu cầu hợp lệ.
Viết mã được đánh dấu sau trong trình soạn thảo văn bản của bạn:
request / getRequestWithGet.js
const https = require('https');

let request = https.get('https://jsonplaceholder.typicode.com/users?_limit=2', (res) => { });
 
Sao chép
Như đã đề cập trong phần chữ ký hàm, get()hàm nhận hai tham số. Đầu tiên là URL API mà bạn đang thực hiện yêu cầu ở định dạng chuỗi và thứ hai là lệnh gọi lại để xử lý phản hồi HTTP. Để đọc dữ liệu từ phản hồi của bạn, bạn phải thêm một số mã trong lệnh gọi lại.
Phản hồi HTTP đi kèm với mã trạng thái. Mã trạng thái là một số cho biết mức độ thành công của phản hồi. Mã trạng thái từ 200 đến 299 là phản hồi tích cực, trong khi mã từ 400 đến 599 là lỗi. Bạn có thể tìm hiểu thêm về mã trạng thái trong hướng dẫn Cách khắc phục sự cố Mã lỗi HTTP phổ biến của chúng tôi .
Đối với yêu cầu này, phản hồi thành công sẽ có mã trạng thái 200. Điều đầu tiên bạn sẽ làm trong cuộc gọi lại của mình sẽ là xác minh rằng mã trạng thái là những gì bạn mong đợi. Thêm mã sau vào hàm gọi lại:
request / getRequestWithGet.js
const https = require('https');

let request = https.get('https://jsonplaceholder.typicode.com/users?_limit=2', (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }
});
Sao chép
Đối tượng phản hồi có sẵn trong lệnh gọi lại có thuộc statusCodetính lưu trữ mã trạng thái. Nếu mã trạng thái không phải là 200, bạn ghi lỗi vào bảng điều khiển và thoát.
Lưu ý dòng có res.resume(). Bạn đã bao gồm dòng đó để cải thiện hiệu suất. Khi thực hiện các yêu cầu HTTP, Node.js sẽ sử dụng tất cả dữ liệu được gửi cùng với yêu cầu. Các res.resume()phương pháp bảo Node.js bỏ qua dữ liệu của suối. Đổi lại, Node.js thường sẽ loại bỏ dữ liệu nhanh hơn so với nếu nó để nó để thu gom rác — một quá trình định kỳ giúp giải phóng bộ nhớ của ứng dụng.
Bây giờ bạn đã nắm bắt được các phản hồi lỗi, hãy thêm mã để đọc dữ liệu. Các phản hồi của Node.js truyền dữ liệu của họ theo từng phần. Chiến lược để truy xuất dữ liệu sẽ là lắng nghe thời điểm dữ liệu đến từ phản hồi, đối chiếu tất cả các phần và sau đó phân tích cú pháp JSON để ứng dụng của bạn có thể sử dụng nó.
Sửa đổi yêu cầu gọi lại để bao gồm mã này:
request / getRequestWithGet.js
const https = require('https');

let request = https.get('https://jsonplaceholder.typicode.com/users?_limit=2', (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Retrieved all data');
    console.log(JSON.parse(data));
  });
});
 
Sao chép
Bạn bắt đầu bằng cách tạo một biến mới datalà một chuỗi rỗng. Bạn có thể lưu trữ dữ liệu dưới dạng một mảng số đại diện cho dữ liệu byte hoặc một chuỗi. Hướng dẫn này sử dụng cách sau vì việc chuyển đổi một chuỗi JSON thành một đối tượng JavaScript dễ dàng hơn .
Sau khi tạo databiến, bạn tạo một bộ nghe sự kiện . Node.js truyền dữ liệu của một phản hồi HTTP theo từng phần. Do đó, khi đối tượng phản hồi phát ra một datasự kiện, bạn sẽ lấy dữ liệu mà nó nhận được và thêm nó vào databiến của bạn .
Khi tất cả dữ liệu từ máy chủ được nhận, Node.js sẽ phát ra một closesự kiện. Tại thời điểm này, bạn phân tích cú pháp chuỗi JSON được lưu trữ trong datavà ghi kết quả vào bảng điều khiển.
Mô-đun Node.js của bạn hiện có thể giao tiếp với API JSON và ghi danh sách người dùng, đây sẽ là một mảng JSON gồm ba người dùng. Tuy nhiên, có một cải tiến nhỏ mà bạn có thể thực hiện trước.
Tập lệnh này sẽ xuất hiện lỗi nếu bạn không thể đưa ra yêu cầu. Ví dụ: bạn có thể không thực hiện được yêu cầu nếu bạn mất kết nối internet. Thêm mã sau để ghi lại lỗi khi bạn không thể gửi yêu cầu HTTP:
request / getRequestWithGet.js
...
  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Retrieved all data');
    console.log(JSON.parse(data));
  });

});

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});
Sao chép
Khi một yêu cầu được thực hiện nhưng không thể được gửi đi, đối tượng yêu cầu sẽ phát ra một errorsự kiện. Nếu một errorsự kiện được phát ra nhưng không được lắng nghe, chương trình Node.js sẽ bị treo. Do đó, để nắm bắt lỗi, bạn thêm một trình lắng nghe sự kiện với on()chức năng và lắng nghe các errorsự kiện. Khi bạn gặp lỗi, bạn ghi lại thông báo của nó.
Đó là tất cả mã cho tệp này. Lưu và thoát nanobằng cách nhấn CTRL+X.
Bây giờ thực hiện chương trình này với node:
  • node getRequestWithGet.js
Sao chép
Bảng điều khiển của bạn sẽ hiển thị phản hồi này:
Output
Retrieved all data [ { id: 1, name: 'Leanne Graham', username: 'Bret', email: 'Sincere@april.biz', address: { street: 'Kulas Light', suite: 'Apt. 556', city: 'Gwenborough', zipcode: '92998-3874', geo: [Object] }, phone: '1-770-736-8031 x56442', website: 'hildegard.org', company: { name: 'Romaguera-Crona', catchPhrase: 'Multi-layered client-server neural-net', bs: 'harness real-time e-markets' } }, { id: 2, name: 'Ervin Howell', username: 'Antonette', email: 'Shanna@melissa.tv', address: { street: 'Victor Plains', suite: 'Suite 879', city: 'Wisokyburgh', zipcode: '90566-7771', geo: [Object] }, phone: '010-692-6593 x09125', website: 'anastasia.net', company: { name: 'Deckow-Crist', catchPhrase: 'Proactive didactic contingency', bs: 'synergize scalable supply-chains' } } ] Điều này có nghĩa là bạn đã thực hiện thành công GETyêu cầu với thư viện Node.js lõi.
Các get()phương pháp mà bạn sử dụng là một phương pháp thuận tiện Node.js cung cấp vì GETyêu cầu là một loại rất phổ biến của yêu cầu. Node.js cung cấp một request()phương thức để thực hiện bất kỳ loại yêu cầu nào. Tiếp theo, hướng dẫn này sẽ kiểm tra cách thực hiện GETyêu cầu với request().

Đưa ra yêu cầu với request()

Các request()phương pháp hỗ trợ nhiều chữ ký chức năng. Bạn sẽ sử dụng cái này cho ví dụ tiếp theo:
https.request(URL_String, Options_Object, Callback_Function) {
    Action
}
Sao chép
Đối số đầu tiên là một chuỗi với điểm cuối API. Đối số thứ hai là một đối tượng JavaScript chứa tất cả các tùy chọn cho yêu cầu. Đối số cuối cùng là một hàm gọi lại để xử lý phản hồi.
Tạo tệp mới cho mô-đun mới có tên getRequestWithRequest.js:
  • nano getRequestWithRequest.js
Sao chép
Mã bạn sẽ viết tương tự như getRequestWithGet.jsmô-đun bạn đã viết trước đó. Đầu tiên, nhập httpsmô-đun:
request / getRequestWithRequest.js
const https = require('https');
Sao chép
Tiếp theo, tạo một đối tượng JavaScript mới có chứa methodkhóa:
request / getRequestWithRequest.js
const https = require('https');

const options = {
  method: 'GET'
};
Sao chép
Các methodquan trọng trong đối tượng này sẽ cho các request()chức năng gì phương thức HTTP yêu cầu được sử dụng.
Tiếp theo, thực hiện yêu cầu trong mã của bạn. Đoạn mã sau đánh dấu mã khác với yêu cầu được thực hiện với get()phương thức. Trong trình chỉnh sửa của bạn, hãy nhập tất cả các dòng sau:
request / getRequestWithRequest.js
...

let request = https.request('https://jsonplaceholder.typicode.com/users?_limit=2', options, (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Retrieved all data');
    console.log(JSON.parse(data));
  });
});

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});
Sao chép
Để thực hiện một yêu cầu bằng cách sử dụng request(), bạn cung cấp URL trong đối số đầu tiên, một đối tượng với các tùy chọn HTTP trong đối số thứ hai và một lệnh gọi lại để xử lý phản hồi trong đối số thứ ba.
Các optionsbiến mà bạn đã tạo trước đó là đối số thứ hai, nói Node.js rằng đây là một GETyêu cầu. Lệnh gọi lại không thay đổi so với lần đầu tiên bạn viết.
Bạn cũng gọi end()phương thức của requestbiến. Đây là một phương thức quan trọng phải được gọi khi sử dụng request()hàm. Nó hoàn thành yêu cầu, cho phép nó được gửi đi. Nếu bạn không gọi nó, chương trình sẽ không bao giờ hoàn thành, vì Node.js sẽ nghĩ rằng bạn vẫn còn dữ liệu để thêm vào yêu cầu.
Lưu và thoát nanobằng CTRL+Xhoặc tương đương với trình soạn thảo văn bản của bạn.
Chạy chương trình này trong thiết bị đầu cuối của bạn:
  • node getRequestWithRequest.js
Sao chép
Bạn sẽ nhận được đầu ra này, giống như mô-đun đầu tiên:
Output
Retrieved all data [ { id: 1, name: 'Leanne Graham', username: 'Bret', email: 'Sincere@april.biz', address: { street: 'Kulas Light', suite: 'Apt. 556', city: 'Gwenborough', zipcode: '92998-3874', geo: [Object] }, phone: '1-770-736-8031 x56442', website: 'hildegard.org', company: { name: 'Romaguera-Crona', catchPhrase: 'Multi-layered client-server neural-net', bs: 'harness real-time e-markets' } }, { id: 2, name: 'Ervin Howell', username: 'Antonette', email: 'Shanna@melissa.tv', address: { street: 'Victor Plains', suite: 'Suite 879', city: 'Wisokyburgh', zipcode: '90566-7771', geo: [Object] }, phone: '010-692-6593 x09125', website: 'anastasia.net', company: { name: 'Deckow-Crist', catchPhrase: 'Proactive didactic contingency', bs: 'synergize scalable supply-chains' } } ] Bây giờ bạn đã sử dụng request()phương pháp này để thực hiện một GETyêu cầu. Điều quan trọng là phải biết chức năng này vì nó cho phép bạn tùy chỉnh yêu cầu của mình theo những cách mà get()phương thức không thể, như thực hiện yêu cầu bằng các phương thức HTTP khác.
Tiếp theo, bạn sẽ cấu hình và tùy chỉnh các yêu cầu của mình với request()chức năng.

Bước 2 - Định cấu hình các request()tùy chọn HTTP

Các request()chức năng cho phép bạn gửi các yêu cầu HTTP mà không chỉ định URL trong đối số đầu tiên. Trong trường hợp này, URL sẽ được chứa với optionsđối tượng và request()sẽ có chữ ký hàm này:
https.request(Options_Object, Callback_Function) {
    Action
}
Sao chép
Trong bước này, bạn sẽ sử dụng chức năng này để cấu hình của bạn request()với optionsđối tượng.
Node.js cho phép bạn nhập URL vào optionsđối tượng mà bạn chuyển cho yêu cầu. Để thử điều này, hãy mở lại getRequestWithRequest.jstệp:
  • nano getRequestWithRequest.js
Sao chép
Xóa URL khỏi lệnh request()gọi để các đối số duy nhất là optionsbiến và hàm gọi lại:
request / getRequestWithRequest.js
const https = require('https');

const options = {
  method: 'GET',
};

let request = https.request(options, (res) => {
...
Sao chép
Bây giờ hãy thêm các thuộc tính sau vào optionsđối tượng:
request / getRequestWithRequest.js
const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users?_limit=2',
  method: 'GET'
};

let request = https.request(options, (res) => {
...
Sao chép
Thay vì một URL chuỗi, bạn có hai thuộc tính— hostvà path. Đây hostlà tên miền hoặc địa chỉ IP của máy chủ bạn đang truy cập. Đường dẫn là mọi thứ xuất hiện sau tên miền, bao gồm các tham số truy vấn (giá trị sau dấu chấm hỏi).
Đối tượng tùy chọn có thể chứa dữ liệu hữu ích khác đi vào yêu cầu. Ví dụ: bạn có thể cung cấp tiêu đề yêu cầu trong các tùy chọn. Tiêu đề thường gửi siêu dữ liệu về yêu cầu.
Khi các nhà phát triển tạo API, họ có thể chọn hỗ trợ các định dạng dữ liệu khác nhau. Một điểm cuối API có thể trả về dữ liệu trong JSON, CSV hoặc XML . Trong các API đó, máy chủ có thể xem xét Accepttiêu đề để xác định loại phản hồi chính xác.
Các Accepttiêu đề xác định kiểu dữ liệu người dùng có thể xử lý. Mặc dù API đang được sử dụng trong các ví dụ này chỉ trả về JSON, nhưng bạn có thể thêm Accepttiêu đề vào yêu cầu của mình để tuyên bố rõ ràng rằng bạn muốn JSON.
Thêm các dòng mã sau để nối Accepttiêu đề:
request / getRequestWithRequest.js
const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users?_limit=2',
  method: 'GET',
  headers: {
    'Accept': 'application/json'
  }
};
 
Sao chép
Bằng cách thêm tiêu đề, bạn đã bao phủ bốn lựa chọn phổ biến nhất được gửi trong Node.js HTTP yêu cầu: hostpathmethod, và headers. Node.js hỗ trợ nhiều tùy chọn hơn; bạn có thể đọc thêm tại tài liệu chính thức của Node.js để biết thêm thông tin.
Enter CTRL+Xđể lưu tệp của bạn và thoát nano.
Tiếp theo, hãy chạy mã của bạn một lần nữa để thực hiện yêu cầu bằng cách chỉ sử dụng các tùy chọn:
  • node getRequestWithRequest.js
Sao chép
Kết quả sẽ giống như các lần chạy trước của bạn:
Output
Retrieved all data [ { id: 1, name: 'Leanne Graham', username: 'Bret', email: 'Sincere@april.biz', address: { street: 'Kulas Light', suite: 'Apt. 556', city: 'Gwenborough', zipcode: '92998-3874', geo: [Object] }, phone: '1-770-736-8031 x56442', website: 'hildegard.org', company: { name: 'Romaguera-Crona', catchPhrase: 'Multi-layered client-server neural-net', bs: 'harness real-time e-markets' } }, { id: 2, name: 'Ervin Howell', username: 'Antonette', email: 'Shanna@melissa.tv', address: { street: 'Victor Plains', suite: 'Suite 879', city: 'Wisokyburgh', zipcode: '90566-7771', geo: [Object] }, phone: '010-692-6593 x09125', website: 'anastasia.net', company: { name: 'Deckow-Crist', catchPhrase: 'Proactive didactic contingency', bs: 'synergize scalable supply-chains' } } ] Vì các API có thể khác nhau giữa các nhà cung cấp, nên việc thoải mái với optionsđối tượng là chìa khóa để thích ứng với các yêu cầu khác nhau của chúng, với các kiểu dữ liệu và tiêu đề là một số biến thể phổ biến nhất.
Từ trước đến nay, bạn chỉ thực hiện GETcác yêu cầu lấy dữ liệu. Tiếp theo, bạn sẽ đưa ra POSTyêu cầu với Node.js để bạn có thể tải dữ liệu lên máy chủ.

Bước 3 - Đưa ra POSTyêu cầu

Khi bạn tải dữ liệu lên máy chủ hoặc muốn máy chủ tạo dữ liệu cho bạn, bạn thường gửi một POSTyêu cầu. Trong phần này, bạn sẽ tạo một POSTyêu cầu trong Node.js. Bạn sẽ thực hiện yêu cầu tạo người dùng mới trong usersAPI.
Mặc dù là một phương pháp khác với GET, bạn sẽ có thể sử dụng lại mã từ các yêu cầu trước đó khi viết POSTyêu cầu của mình . Tuy nhiên, bạn sẽ phải thực hiện các điều chỉnh sau:
  • Thay đổi phương thức trong optionsđối tượng thànhPOST
  • Thêm tiêu đề vào trạng thái bạn đang tải lên JSON
  • Kiểm tra mã trạng thái để xác nhận người dùng đã được tạo
  • Tải lên dữ liệu của người dùng mới
Để thực hiện những thay đổi này, trước tiên hãy tạo một tệp mới có tên postRequest.js. Mở tệp này trong nanohoặc một trình soạn thảo văn bản thay thế:
  • nano postRequest.js
Sao chép
Bắt đầu bằng cách nhập httpsmô-đun và tạo một optionsđối tượng:
request / postRequest.js
const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users',
  method: 'POST',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json; charset=UTF-8'
  }
};
Sao chép
Bạn thay đổi pathđể phù hợp với những gì cần thiết cho POSTcác yêu cầu. Bạn cũng đã cập nhật methodvào POST. Cuối cùng, bạn đã thêm một tiêu đề mới trong các tùy chọn của mình Content-Type. Tiêu đề này cho máy chủ biết loại dữ liệu bạn đang tải lên. Trong trường hợp này, bạn sẽ tải lên dữ liệu JSON với mã hóa UTF-8 .
Tiếp theo, thực hiện yêu cầu với request()chức năng. Điều này tương tự như cách bạn đưa ra GETyêu cầu, nhưng bây giờ bạn tìm kiếm mã trạng thái khác với 200. Thêm các dòng sau vào cuối mã của bạn:
request / postRequest.js
...
const request = https.request(options, (res) => {
  if (res.statusCode !== 201) {
    console.error(`Did not get a Created from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Added new user');
    console.log(JSON.parse(data));
  });
});
Sao chép
Dòng mã được đánh dấu sẽ kiểm tra xem mã trạng thái có phải là 201 không. Mã trạng thái 201 được sử dụng để chỉ ra rằng máy chủ đã tạo tài nguyên.
Đây POSTyêu cầu có nghĩa là để tạo một người dùng mới. Đối với API này, bạn cần tải lên chi tiết người dùng. Tạo một số dữ liệu người dùng và gửi dữ liệu đó POSTtheo yêu cầu của bạn :
request / postRequest.js
...

const requestData = {
  name: 'New User',
  username: 'digitalocean',
  email: 'user@digitalocean.com',
  address: {
    street: 'North Pole',
    city: 'Murmansk',
    zipcode: '12345-6789',
  },
  phone: '555-1212',
  website: 'digitalocean.com',
  company: {
    name: 'DigitalOcean',
    catchPhrase: 'Welcome to the developer cloud',
    bs: 'cloud scale security'
  }
};

request.write(JSON.stringify(requestData));
Sao chép
Đầu tiên, bạn đã tạo requestDatabiến, là một đối tượng JavaScript chứa dữ liệu người dùng. Yêu cầu của bạn không bao gồm một idtrường, vì các máy chủ thường tạo các trường này trong khi lưu dữ liệu mới.
Tiếp theo, bạn sử dụng request.write()hàm, hàm này chấp nhận một chuỗi hoặc đối tượng đệm để gửi cùng với yêu cầu. Vì requestDatabiến của bạn là một đối tượng, bạn đã sử dụng JSON.stringifyhàm để chuyển đổi nó thành một chuỗi.
Để hoàn thành mô-đun này, hãy kết thúc yêu cầu và kiểm tra lỗi:
request / postRequest.js
...

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});
 
Sao chép
Điều quan trọng là bạn phải ghi dữ liệu trước khi sử dụng end()hàm. Các end()chức năng bảo Node.js rằng không có nhiều dữ liệu được thêm vào yêu cầu và gửi nó.
Lưu và thoát nanobằng cách nhấn CTRL+X.
Chạy chương trình này để xác nhận rằng một người dùng mới đã được tạo:
  • node postRequest.js
Sao chép
Kết quả sau sẽ được hiển thị:
Output
Added new user { name: 'New User', username: 'digitalocean', email: 'user@digitalocean.com', address: { street: 'North Pole', city: 'Murmansk', zipcode: '12345-6789' }, phone: '555-1212', website: 'digitalocean.com', company: { name: 'DigitalOcean', catchPhrase: 'Welcome to the developer cloud', bs: 'cloud scale security' }, id: 11 } Đầu ra xác nhận rằng yêu cầu đã thành công. API trả lại dữ liệu người dùng đã được tải lên, cùng với ID được chỉ định cho nó.
Bây giờ bạn đã học cách đưa ra POSTyêu cầu, bạn có thể tải dữ liệu lên máy chủ trong Node.js. Tiếp theo, bạn sẽ thử PUTcác yêu cầu, một phương pháp được sử dụng để cập nhật dữ liệu trong máy chủ.

Bước 4 - Đưa ra PUTyêu cầu

Các nhà phát triển đưa ra PUTyêu cầu tải dữ liệu lên máy chủ. Mặc dù điều này có thể tương tự với POSTcác yêu cầu, nhưng PUTcác yêu cầu có một chức năng khác. PUTyêu cầu là không quan trọng — bạn có thể chạy một PUTyêu cầu nhiều lần và nó sẽ có cùng một kết quả.
Trong thực tế, mã bạn viết tương tự như mã của một POSTyêu cầu. Bạn thiết lập các tùy chọn của mình, đưa ra yêu cầu, viết dữ liệu bạn muốn tải lên và xác minh phản hồi.
Để thử điều này, bạn sẽ tạo một PUTyêu cầu cập nhật tên người dùng của người dùng đầu tiên.
Vì mã tương tự với POSTyêu cầu, bạn sẽ sử dụng mô-đun đó làm cơ sở cho mô-đun này. Sao chép postRequest.jsvào một tập tin mới, putRequest.js:
  • cp postRequest.js putRequest.js
Sao chép
Bây giờ hãy mở putRequest.jstrong trình soạn thảo văn bản:
  • nano putRequest.js
Sao chép
Thực hiện các thay đổi được đánh dấu này để bạn gửi PUTyêu cầu đến https://jsonplaceholder.typicode.com/users/1:
request / putRequest.js
const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users/1',
  method: 'PUT',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json; charset=UTF-8'
  }
};

const request = https.request(options, (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Updated data');
    console.log(JSON.parse(data));
  });
});

const requestData = {
  username: 'digitalocean'
};

request.write(JSON.stringify(requestData));

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});
Sao chép
Đầu tiên bạn thay đổi các thuộc tính pathvà methodthuộc tính của optionsđối tượng. pathtrong trường hợp này xác định người dùng mà bạn sẽ cập nhật. Khi bạn đưa ra yêu cầu, bạn kiểm tra xem mã phản hồi có phải là 200 hay không, nghĩa là yêu cầu đó đã OK. Dữ liệu bạn đang tải lên bây giờ chỉ chứa thuộc tính bạn đang cập nhật.
Lưu và thoát nanovới CTRL+X.
Bây giờ thực thi chương trình Node.js này trong thiết bị đầu cuối của bạn:
  • node putRequest.js
Sao chép
Bạn sẽ nhận được đầu ra này:
Output
Updated data { username: 'digitalocean', id: 1 } Bạn đã gửi PUTyêu cầu cập nhật người dùng đã có từ trước.
Cho đến nay, bạn đã học cách truy xuất, thêm và cập nhật dữ liệu. Để cung cấp cho chúng tôi toàn bộ lệnh quản lý dữ liệu qua API, tiếp theo, bạn sẽ thực hiện DELETEyêu cầu xóa dữ liệu khỏi máy chủ.

Bước 5 - Đưa ra DELETEyêu cầu

Các DELETEyêu cầu được sử dụng để loại bỏ dữ liệu từ một máy chủ. Nó có thể có một phần thân yêu cầu, nhưng hầu hết các API có xu hướng không yêu cầu chúng. Phương pháp này được sử dụng để xóa toàn bộ một đối tượng khỏi máy chủ. Trong phần này, bạn sẽ xóa một người dùng bằng API.
Mã bạn sẽ viết tương tự như mã của một GETyêu cầu, vì vậy hãy sử dụng mô-đun đó làm cơ sở cho mã này. Sao chép getRequestWithRequest.jstệp vào một deleteRequest.jstệp mới
  • cp getRequestWithRequest.js deleteRequest.js
Sao chép
Mở deleteRequest.jsbằng nano:
  • nano deleteRequest.js
Sao chép
Bây giờ, hãy sửa đổi mã tại các phần được đánh dấu, vì vậy bạn có thể xóa người dùng đầu tiên trong API:
request / putRequest.js
const https = require('https');

const options = {
  host: 'jsonplaceholder.typicode.com',
  path: '/users/1',
  method: 'DELETE',
  headers: {
    'Accept': 'application/json',
  }
};

const request = https.request(options, (res) => {
  if (res.statusCode !== 200) {
    console.error(`Did not get an OK from the server. Code: ${res.statusCode}`);
    res.resume();
    return;
  }

  let data = '';

  res.on('data', (chunk) => {
    data += chunk;
  });

  res.on('close', () => {
    console.log('Deleted user');
    console.log(JSON.parse(data));
  });
});

request.end();

request.on('error', (err) => {
  console.error(`Encountered an error trying to make a request: ${err.message}`);
});
 
Sao chép
Đối với mô-đun này, bạn bắt đầu bằng cách thay đổi thuộc pathtính của đối tượng tùy chọn thành tài nguyên bạn muốn xóa — người dùng đầu tiên. Sau đó, bạn thay đổi phương thức thành DELETE.
Lưu và thoát khỏi tệp này bằng cách nhấn CTRL+X.
Chạy mô-đun này để xác nhận nó hoạt động. Nhập lệnh sau vào thiết bị đầu cuối của bạn:
  • node deleteRequest.js
Sao chép
Chương trình sẽ xuất ra:
Output
Deleted user {} Mặc dù API không trả về nội dung phản hồi, nhưng bạn vẫn nhận được 200 phản hồi nên yêu cầu là OK.
Bây giờ bạn đã học cách thực hiện DELETEyêu cầu với các mô-đun cốt lõi của Node.js.

Phần kết luận

Trong hướng dẫn này, bạn đã thực hiện GETPOSTPUT, và DELETEcác yêu cầu trong Node.js. Không có thư viện nào được cài đặt; những yêu cầu này đã được thực hiện bằng cách sử dụng httpsmô-đun tiêu chuẩn . Trong khi GETcác yêu cầu có thể được thực hiện bằng một get()hàm, tất cả các phương thức HTTP khác được thực hiện thông qua request()phương thức này.
 

Tác giả bài viết: Mr. King

Tổng số điểm của bài viết là: 0 trong 0 đánh giá

Click để đánh giá bài viết

Phần mềm - Tiện ích

Code - Website

Claim free virtual currency

The current Bitcoin (BTC) token is:
Get it for free right HERE
The current Ethereum (ETH) token is:
Get it for free right HERE
The current Litecoin (LTC) token is:
Get it for free right HERE
Top
Bạn đã không sử dụng Site, Bấm vào đây để duy trì trạng thái đăng nhập. Thời gian chờ: 60 giây