Node:HTTP請求方式

一、HTTPS

Node.js在標準庫中帶有https模塊,所以你根本不需要引入任何庫去發起請求,因為node.js本身就可以完成,處理一些簡單的數據請求也是綽綽有余了。

不過,由于該模塊是底層的,對開發工程師不太友好。此外,你需要為分塊數據使用異步流,因為該庫不能使用 HTTP 請求的異步/等待功能。然后需要手動解析響應數據。

const https = require('https')
https.get('https://reqres.in/api/users', (res) => {
  let data = '';
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    console.log(JSON.parse(data));
  })
}).on('error', (err) => {
  console.log("Error: ", err.message);
});
const https = require('https');
const data = JSON.stringify({
  name: 'John Doe',
  job: 'DevOps Specialist'
});
const options = {
  protocol: 'https:',
  hostname: 'reqres.in',
  port: 443,
  path: '/api/users',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': data.length
  }
};
const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => {
    data += chunk;
  });
  res.on('end', () => {
    console.log(JSON.parse(data));
  });
}).on("error", (err) => {
  console.log("Error: ", err.message);
});
req.write(data);
req.end();

二、Axios

axios是一個基于 promise 的瀏覽器和 Node.js 的 HTTP 客戶端,它既可以瀏覽器端使用可以在客戶端使用它,有著攔截器,數據自動轉換json等十分方便的功能,它更強大的地方在于能夠用 axios.all 發起并發請求,可以同時獲取多個 API 的數據。

// npm i -S axios

const axios = require('axios');
axios.get('https://reqres.in/api/users').then(res => {
  console.log(res);
}).catch(err => {
  console.log('Error: ', err.message);
});

三、Superagent

superagent 是一個小型的 HTTP 請求庫,用法與axios十分的相似,但是需要去自己把數據處理成json格式。它可以用于在 Node.js 和瀏覽器中發起 AJAX 請求,superagent 有幾十個插件可以用來完成諸如防止緩存、轉換服務器響應數據或為 URL 增加前后綴之類的事情,這點非常方便。你也可以通過編寫自己的插件來擴展功能。superagent 還可以方便地為你解析JSON數據。

// npm i -S superagent

const superagent = require('superagent');
superagent.get('https://reqres.in/api/users').then(res => {
  console.log(res);
}).catch(err => {
  console.log('Error: ', err.message);
});

四、Node-fetch

node-fetch 是一個輕量級的模塊,它把 Fetch API 帶到了 Node.js 里。使用 fetch 配合 .then 和 await 句法,可以把流轉為 JSON 數據,如下面的代碼片段所示的 data 就是 JSON 數據,不再需要一個額外的臨時變量。此外,它還提供了有用的擴展,例如限制重定向次數,限制響應大小,用于問題跟蹤的明確的錯誤信息。

它的v2與v3版差異比較大,v2保持著cjs標準,而v3則用了ejs的方式,這里用了2.6.7版作為演示版本。

// npm i -S node-fetch@2.6.7

const fetch = require("node-fetch")
fetch('https://reqres.in/api/users', {
  method: 'GET'
}).then(async res => {
  console.log(res);
}).catch(err => {
  console.log('Error: ', err.message);
});

五、Got

got 是 Node.js 的另一個直觀而強大的 HTTP 請求庫。它最初是作為流行的 request (現已棄用)包的輕量級替代品而創建的。它用了Promise式的API與對JOSN做處理配置等功能,而一些如HTTP2的支持,分頁式API以及RFC的緩存等能力是大多數請求庫所不具備的。

// npm i -S got@10.7.0

const got = require('got');
got.get('https://reqres.in/api/users', {
  responseType: 'json'
}).then(res => {
  console.log(res);
}).catch(err => {
  console.log('Error: ', err.message);
});

六、Needle

needle是一個比較簡潔小巧的請求庫,它的形式可以是Promise的方式也可以是回調函數的方式,看自己的習慣選用,而且它的返回值會對XML與JSON自動做出轉換,也是非常的方便。

// npm i -S needle

const needle = require('needle');
needle.get('https://reqres.in/api/users', (err, res) => {
  if (err) return console.log('Error: ', err.message);
  console.log(res);
})
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容