成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入解析Node.js中5種發起HTTP請求的方法

開發 前端
創建HTTP請求使現代編程語言的核心功能之一,也是很多程序員在接觸到新的開發環境時最先遇到的技術之一。在Node.js中有相當多的解決方案,其中有語言內置功能,也有開源社區貢獻的開發庫。

[[200362]]

創建HTTP請求使現代編程語言的核心功能之一,也是很多程序員在接觸到新的開發環境時***遇到的技術之一。在Node.js中有相當多的解決方案,其中有語言內置功能,也有開源社區貢獻的開發庫。下面咱們來看一下比較流行的幾種方式。

在本文的案例中,我們將使用NASA提供的“每日太空照片API”作為交互用的JSON API,

因為太空是有史以來最酷的東西。

[[200363]] 

在開始之前,請先在自己的計算機上安裝***版的node.js和npm。

HTTP - 標準庫

首先是標準庫中默認的HTTP模塊。這個模塊無需安裝依賴外部即可使用,做到了真正的即插即用。缺點是與其他解決方案相比,用起來不是那么友好。

下面的代碼將向NASA的API發送一個GET請求,并輸出當天的天文照片的URL,以及它的注解:

  1. const https = require('https'); 
  2.   
  3. https.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', (resp) => { 
  4.   let data = ''
  5.   
  6.   // A chunk of data has been recieved. 
  7.   resp.on('data', (chunk) => { 
  8.     data += chunk; 
  9.   }); 
  10.   
  11.   // The whole response has been received. Print out the result. 
  12.   resp.on('end', () => { 
  13.     console.log(JSON.parse(data).explanation); 
  14.   }); 
  15.   
  16. }).on("error", (err) => { 
  17.   console.log("Error: " + err.message); 
  18. });  

HTTP和HTTPS模塊提供的大多數功能是相當有限的。你需要以區塊為單位接收響應數據,而不是只提供一個回調函數,以便在收到所有數據后就立即執行。如果它是JSON格式你還需要進行手動解析。盡管工作量不大,但是它仍然會帶來一些不必要的操作。

另一個麻煩是,HTTP和HTTPS協議分屬兩個模塊,因此如果我們使用的API是通過HTTPS協議進行通信,則需要HTTPS模塊。

如果你不想向代碼庫中添加太多的依賴項或希望使用其底層的功能, 那么可能需要花費更多的精力來獲取所需的數據, 盡管如此,但是它仍然是一個很好的工具。

Request

Request是一個簡化的http客戶端,它和Python的request庫很像。這個庫比默認的http 模塊更好用,多年來被開源社區作為開發***。

自從我開始使用Node.js就一直在用,他對快速完成開發任務很有幫助。與http 模塊不同的是,你必須使用npm來安裝它。

在終端下進入到你想要代碼被下載的目錄中,運行以下命令:

  1. npm install request@2.81.0 

可以看到,不需要寫太多代碼就能完成前面的功能:

  1. const request = require('request'); 
  2.   
  3. request('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }, (err, res, body) => { 
  4.   if (err) { return console.log(err); } 
  5.   console.log(body.url); 
  6.   console.log(body.explanation); 
  7. });  

如果你想要一個使用正常方式處理HTTP請求的苦,那么Request是一個很好的選擇。如果你想使用Promises,也可以簽出request-promise庫。

Axios

Axios是一個基于promise的HTTP客戶端,可以用于瀏覽器和Node.js。在處理需要更復雜的事件鏈的代碼時,使用Promises具有很大的優勢。 編寫異步代碼可能會令人困惑,而Promises是這個問題的幾種解決方案之一。 它們甚至被用在其它語言中,比如Swift。

使用npm安裝Axios,在終端中輸入以下命令:

  1. npm install axios@0.16.2 

下面的代碼實現相同的功能,得到URL并解釋當天的天文學圖片。

  1. const axios = require('axios'); 
  2.   
  3. axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY'
  4.   .then(response => { 
  5.     console.log(response.data.url); 
  6.     console.log(response.data.explanation); 
  7.   }) 
  8.   .catch(error => { 
  9.     console.log(error); 
  10.   });  

默認情況下,Axios可以解析JSON響應,非常方便。你也可以看到錯誤處理是由.catch()完成的,現在我們都在使用 promises。

你甚至可以通過axios.all發起多個并發請求,比如說你想一次性得到兩天的天文圖片可以這樣做:

  1. var axios = require('axios'); 
  2.   
  3. axios.all([ 
  4.   axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-03'), 
  5.   axios.get('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-02'
  6. ]).then(axios.spread((response1, response2) => { 
  7.   console.log(response1.data.url); 
  8.   console.log(response2.data.url); 
  9. })).catch(error => { 
  10.   console.log(error); 
  11. });  

異步代碼很容易地變得十分復雜并且不容易處理, Axios很輕松的解決了這個問題,從長遠看來可以使你的開發工作變得輕松。

SuperAgent

與Axios類似,SuperAgent 是另一個流行的庫,主要用于瀏覽器中的Ajax請求,但也適用于Node.js。使用以下命令安裝SuperAgent :

  1. npm install superagent@3.5.2 

SuperAgent最酷的地方是能進行鏈式調用,你可以把其它函數鏈到像query()這樣的請求上,并且添加參數。在前面的例子中我們都是手動添加它們。請注意 SuperAgent 是怎樣提供這種功能的:

  1. const superagent = require('superagent'); 
  2.   
  3. superagent.get('https://api.nasa.gov/planetary/apod'
  4. .query({ api_key: 'DEMO_KEY'date'2017-08-02' }) 
  5. .end((err, res) => { 
  6.   if (err) { return console.log(err); } 
  7.   console.log(res.body.url); 
  8.   console.log(res.body.explanation); 
  9. });  

和axios一樣,你也不用自己解析去JSON響應,這非常酷。

Got

如果你想用一個更輕量級的庫,Got是另外一個選擇。它也可用于Twilio Functions。

再來一遍,實用npm安裝Got:

  1. npm install got@7.1.0 

和Axios一樣,Got也能同Promises一起很好的工作。下面的代碼做的事情和前面的例子一樣:

  1. const got = require('got'); 
  2.   
  3. got('https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY', { json: true }).then(response => { 
  4.   console.log(response.body.url); 
  5.   console.log(response.body.explanation); 
  6. }).catch(error => { 
  7.   console.log(error.response.body); 
  8. });  

如果你想要一個不像Request那樣臃腫的輕量級的庫,使用Got就對了。

***的想法

以上并不是全部的解決方案,不過看到了這里,你知道了在Node.js中一些流行的HTTP庫中的基本功能是怎樣工作的。還有一些庫,例如node-fetch將瀏覽器的獲取(fetch)功能移植到后端。在其他語言中也有各種類似的庫解決這個問題,比如 Python 和 Ruby 。 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2024-03-18 10:15:00

HTTPNode.jsAPI

2021-10-03 15:02:50

HTTPNodejs

2021-10-16 05:00:32

.js Buffer模塊

2014-09-12 10:35:09

Node.jsHTTP 206

2021-10-21 08:59:17

技術HTTP攻擊

2021-08-05 05:46:06

Node.jsInspector工具

2015-07-16 09:59:55

PHP Node.js討論

2020-05-29 15:33:28

Node.js框架JavaScript

2017-12-14 21:00:16

Node.jsHTTPNginx

2021-05-11 07:45:00

HTTPNode.jsCookie

2021-08-12 01:00:29

NodejsAsync

2021-08-26 13:57:56

Node.jsEncodingBuffer

2023-06-30 23:25:46

HTTP模塊內存

2025-03-10 00:00:22

PDF圖片表格

2023-10-04 07:35:03

2021-05-21 09:36:42

開發技能代碼

2016-08-11 14:02:02

NodeJS前端

2020-04-15 15:48:03

Node.jsstream前端

2024-01-05 08:49:15

Node.js異步編程

2013-11-01 09:34:56

Node.js技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美成人精品二区三区99精品 | 人操人人干人 | 亚洲高清免费视频 | 在线免费小视频 | 欧美一级欧美三级在线观看 | 一区二区三区视频在线观看 | 天天干免费视频 | 久久综合一区二区三区 | 国产免费观看视频 | 久久综合入口 | 亚洲黄色一级 | 日韩中文一区 | 国产一区二区影院 | 亚洲一区视频在线 | 日本高清不卡视频 | 二区在线观看 | 久久九九99| 亚洲国产一区二区在线 | 一区二区三区四区av | 婷婷午夜天 | 日日做夜夜爽毛片麻豆 | 亚洲欧美男人天堂 | 欧美精品一区二区三区四区 | 在线观看深夜视频 | 亚洲欧美第一视频 | 色啪网| 国产精品一区二区av | 97在线观视频免费观看 | 男人的天堂在线视频 | 99久久久久国产精品免费 | 成人黄色网址大全 | 欧美三级三级三级爽爽爽 | 久久久婷 | 中文字幕 国产精品 | 日韩国产欧美一区 | 欧美精品久久久 | 成人在线黄色 | 日韩欧美一级片 | 在线视频日韩精品 | 91麻豆蜜桃一区二区三区 | 宅男噜噜噜66一区二区 |