成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

【譯】深入解析Node.js中5種發(fā)起HTTP請(qǐng)求的方法

Tamic / 633人閱讀

摘要:在中有相當(dāng)多的解決方案,其中有語言內(nèi)置功能,也有開源社區(qū)貢獻(xiàn)的開發(fā)庫。缺點(diǎn)是與其他解決方案相比,用起來不是那么友好。默認(rèn)情況下,可以解析響應(yīng),非常方便。與類似,是另一個(gè)流行的庫,主要用于瀏覽器中的請(qǐng)求,但也適用于。

翻譯:瘋狂的技術(shù)宅
英文標(biāo)題:5 Ways to Make HTTP Requests in Node.js
原文鏈接:https://www.twilio.com/blog/2...
本文首發(fā)微信公眾號(hào):充實(shí)的腦洞

相關(guān)文章:【譯】Python3中進(jìn)行HTTP請(qǐng)求的4種方式

創(chuàng)建HTTP請(qǐng)求使現(xiàn)代編程語言的核心功能之一,也是很多程序員在接觸到新的開發(fā)環(huán)境時(shí)最先遇到的技術(shù)之一。在Node.js中有相當(dāng)多的解決方案,其中有語言內(nèi)置功能,也有開源社區(qū)貢獻(xiàn)的開發(fā)庫。下面咱們來看一下比較流行的幾種方式。

在本文的案例中,我們將使用NASA提供的“每日太空照片API”作為交互用的JSON API,
因?yàn)樘帐怯惺芬詠碜羁岬臇|西。

在開始之前,請(qǐng)先在自己的計(jì)算機(jī)上安裝最新版的node.js和npm。

HTTP - 標(biāo)準(zhǔn)庫

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

下面的代碼將向NASA的API發(fā)送一個(gè)GET請(qǐng)求,并輸出當(dāng)天的天文照片的URL,以及它的注解:

const https = require("https");
 
https.get("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY", (resp) => {
  let data = "";
 
  // A chunk of data has been recieved.
  resp.on("data", (chunk) => {
    data += chunk;
  });
 
  // The whole response has been received. Print out the result.
  resp.on("end", () => {
    console.log(JSON.parse(data).explanation);
  });
 
}).on("error", (err) => {
  console.log("Error: " + err.message);
});

HTTPHTTPS模塊提供的大多數(shù)功能是相當(dāng)有限的。你需要以區(qū)塊為單位接收響應(yīng)數(shù)據(jù),而不是只提供一個(gè)回調(diào)函數(shù),以便在收到所有數(shù)據(jù)后就立即執(zhí)行。如果它是JSON格式你還需要進(jìn)行手動(dòng)解析。盡管工作量不大,但是它仍然會(huì)帶來一些不必要的操作。

另一個(gè)麻煩是,HTTPHTTPS協(xié)議分屬兩個(gè)模塊,因此如果我們使用的API是通過HTTPS協(xié)議進(jìn)行通信,則需要HTTPS模塊。

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

Request

Request是一個(gè)簡化的http客戶端,它和Python的request庫很像。這個(gè)庫比默認(rèn)的http 模塊更好用,多年來被開源社區(qū)作為開發(fā)首選。

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

在終端下進(jìn)入到你想要代碼被下載的目錄中,運(yùn)行以下命令:

npm install [email protected]

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

const request = require("request");
 
request("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY", { json: true }, (err, res, body) => {
  if (err) { return console.log(err); }
  console.log(body.url);
  console.log(body.explanation);
});

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

Axios

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

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

npm install [email protected]

下面的代碼實(shí)現(xiàn)相同的功能,得到URL并解釋當(dāng)天的天文學(xué)圖片。

const axios = require("axios");
 
axios.get("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY")
  .then(response => {
    console.log(response.data.url);
    console.log(response.data.explanation);
  })
  .catch(error => {
    console.log(error);
  });

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

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

var axios = require("axios");
 
axios.all([
  axios.get("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-03"),
  axios.get("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY&date=2017-08-02")
]).then(axios.spread((response1, response2) => {
  console.log(response1.data.url);
  console.log(response2.data.url);
})).catch(error => {
  console.log(error);
});

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

SuperAgent

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

npm install [email protected]

SuperAgent最酷的地方是能進(jìn)行鏈?zhǔn)秸{(diào)用,你可以把其它函數(shù)鏈到像query()這樣的請(qǐng)求上,并且添加參數(shù)。在前面的例子中我們都是手動(dòng)添加它們。請(qǐng)注意 SuperAgent 是怎樣提供這種功能的:

const superagent = require("superagent");
 
superagent.get("https://api.nasa.gov/planetary/apod")
.query({ api_key: "DEMO_KEY", date: "2017-08-02" })
.end((err, res) => {
  if (err) { return console.log(err); }
  console.log(res.body.url);
  console.log(res.body.explanation);
});

和axios一樣,你也不用自己解析去JSON響應(yīng),這非??帷?/p> Got

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

再來一遍,實(shí)用npm安裝Got:

npm install [email protected]

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

const got = require("got");
 
got("https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY", { json: true }).then(response => {
  console.log(response.body.url);
  console.log(response.body.explanation);
}).catch(error => {
  console.log(error.response.body);
});

如果你想要一個(gè)不像Request那樣臃腫的輕量級(jí)的庫,使用Got就對(duì)了。

最后的想法

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

你最喜歡用那種方式發(fā)送 HTTP 請(qǐng)求?請(qǐng)你告訴我,也可以向我提問:

Email: [email protected]
Twitter: @Sagnewshreds
Github: Sagnew
Twitch (streaming live code): Sagnewshreds

本文首發(fā)于公眾號(hào):充實(shí)的腦洞
歡迎掃碼關(guān)注,一個(gè)技術(shù)宅的保留地

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/91426.html

相關(guān)文章

  • 】Python3進(jìn)行HTTP請(qǐng)求4方式

    摘要:由于是同一起進(jìn)行分發(fā)和安裝的,因此無需使用進(jìn)行安裝。首先用進(jìn)行安裝向發(fā)送請(qǐng)求輸出結(jié)果我們剛剛向發(fā)出了一個(gè)請(qǐng)求,同時(shí)創(chuàng)建了一個(gè)名為的對(duì)象,之后使用內(nèi)置的解碼器來處理我們請(qǐng)求的內(nèi)容。當(dāng)每個(gè)請(qǐng)求成功后,響應(yīng)內(nèi)容將被添加到數(shù)據(jù)列表中。 翻譯:瘋狂的技術(shù)宅原文標(biāo)題:HTTP Requests in Python 3原文鏈接:https://www.twilio.com/blog/2...本文首發(fā)...

    lordharrd 評(píng)論0 收藏0
  • 2017-08-17 前端日?qǐng)?bào)

    摘要:前端日?qǐng)?bào)精選百分比實(shí)現(xiàn)比例固定圖片自適應(yīng)布局探索中的架構(gòu)你不知道的總結(jié)中譯深入解析中種發(fā)起請(qǐng)求的方法帶著三個(gè)問題一起深入淺出高階組件中文深入理解筆記用模塊封裝代碼第期中的匿名遞歸是如何防御攻擊的眾成翻譯中的響應(yīng)編程掘金,新特性搶先 2017-08-17 前端日?qǐng)?bào) 精選 CSS百分比padding實(shí)現(xiàn)比例固定圖片自適應(yīng)布局探索ReactJS中的CSS架構(gòu)你不知道的JavaScript-總...

    smallStone 評(píng)論0 收藏0
  • 】Excess-XSS 一份關(guān)于 XSS 綜合教程

    摘要:示例攻擊如何進(jìn)行下圖展示了攻擊者如何進(jìn)行攻擊攻擊者利用網(wǎng)站的表單插入惡意字符串到網(wǎng)站數(shù)據(jù)庫中。恰恰相反,至少有兩種常見的方式,會(huì)導(dǎo)致受害者發(fā)起針對(duì)自己的反射型攻擊。攻擊者精心構(gòu)造了一個(gè)包含惡意字符串的,將其發(fā)送給受害者。 原文地址:http://excess-xss.com/。如有翻譯不當(dāng)之處,歡迎指出 :D 分為四部分: 概述 XSS 攻擊 XSS 防御 總結(jié) 第一部分:概述 X...

    timger 評(píng)論0 收藏0
  • 深入淺出Node.js

    摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時(shí)間有限,資源有限。事件驅(qū)動(dòng)機(jī)制是通過內(nèi)部單線程高效率地維護(hù)事件循環(huán)隊(duì)列來實(shí)現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時(shí)間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對(duì)于熟練掌握J(rèn)S語言后的廣義Node.js.至于為什么...

    oujie 評(píng)論0 收藏0
  • 深入淺出Node.js

    摘要:深入淺出一直想致力于寫一篇關(guān)于廣義講解系統(tǒng)的文章,苦于時(shí)間有限,資源有限。事件驅(qū)動(dòng)機(jī)制是通過內(nèi)部單線程高效率地維護(hù)事件循環(huán)隊(duì)列來實(shí)現(xiàn)的,沒有多線程的資源占用和上下文的切換。 深入淺出Node.js 一直想致力于寫一篇關(guān)于廣義講解Node.js系統(tǒng)的文章,苦于時(shí)間有限,資源有限。這篇文章是在結(jié)合自己的學(xué)習(xí)心得以及與行業(yè)大佬共同探討下爭對(duì)于熟練掌握J(rèn)S語言后的廣義Node.js.至于為什么...

    MadPecker 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Tamic

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<