欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解在Node.js中發(fā)起HTTP請求的5種方法

 更新時間:2019年01月10日 14:37:17   作者:京程一燈  
這篇文章主要介紹了詳解在Node.js中發(fā)起HTTP請求的5種方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

HTTP - 標準庫

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

下面的代碼將向NASA的API發(fā)送一個 GET 請求,并輸出當天的天文照片的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);
});

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

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

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

Request

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

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

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

npm install request@2.81.0

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

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);
});

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

Axios

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

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

npm install axios@0.16.2

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

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);
 });

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

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

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);
});

異步代碼很容易地變得十分復雜并且不容易處理, 和 it 解決這個問題的方式可能會讓你的生活更容易從長遠來看。Axios很輕松的解決了這個問題,從長遠看來可以使你的開發(fā)工作變得輕松。

SuperAgent

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

npm install superagent@3.5.2

SuperAgent最酷的地方是能進行鏈式調(diào)用,你可以把其它函數(shù)鏈到像 query() 這樣的請求上,并且添加參數(shù)。在前面的例子中我們都是手動添加它們。請注意 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

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

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

npm install got@7.1.0

和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);
});

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

最后的想法

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

5 Ways to Make HTTP Requests in Node.js 原文鏈接:https://www.twilio.com/blog/2017/08/http-requests-in-node-js.html

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • nodejs編寫bash腳本的終極方案分享

    nodejs編寫bash腳本的終極方案分享

    你懂JavaScript嗎?你需要寫一個Shell腳本嗎?那么你應(yīng)該試一下Node.js,它很容易安裝,而且很適合通過寫Shell腳本來學習它,下面這篇文章主要給大家介紹了關(guān)于nodejs編寫bash腳本的終極方案,需要的朋友可以參考下
    2021-08-08
  • npm報版本與node.js不匹配問題及解決

    npm報版本與node.js不匹配問題及解決

    這篇文章主要介紹了npm報版本與node.js不匹配問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • node.js中的path.dirname方法使用說明

    node.js中的path.dirname方法使用說明

    這篇文章主要介紹了node.js中的path.dirname方法使用說明,本文介紹了path.dirname的方法說明、語法、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12
  • NodeJS學習筆記之Module的簡介

    NodeJS學習筆記之Module的簡介

    模塊是Node.js 應(yīng)用程序的基本組成部分,文件和模塊是一一對應(yīng)的。換言之,一個 Node.js 文件就是一個模塊,這個文件可能是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。
    2017-03-03
  • nodeJS實現(xiàn)路由功能實例代碼

    nodeJS實現(xiàn)路由功能實例代碼

    本篇文章主要介紹了nodeJS實現(xiàn)路由功能實例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06
  • 如何將node服務(wù)打包成可執(zhí)行文件PKG

    如何將node服務(wù)打包成可執(zhí)行文件PKG

    這篇文章主要介紹了如何將node服務(wù)打包成可執(zhí)行文件PKG問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Npm?Module作用及使用一文全解

    Npm?Module作用及使用一文全解

    這篇文章主要介紹了Npm?Module作用及使用一文全解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Node.js復制文件的方法示例

    Node.js復制文件的方法示例

    這篇文章主要介紹了Node.js復制文件的方法,涉及nodejs針對文件流的創(chuàng)建、讀取、寫入等操作技巧,需要的朋友可以參考下
    2016-12-12
  • Node.js編碼規(guī)范

    Node.js編碼規(guī)范

    編碼規(guī)范比比皆是,但是很少有公司做好編碼規(guī)范的。忍不住想談?wù)劸幋a規(guī)范的重要性,希望所有人都能夠重視起來。
    2014-07-07
  • Node.js Streams文件讀寫操作詳解

    Node.js Streams文件讀寫操作詳解

    如果你在處理應(yīng)用中 I/O 相關(guān)的操作,你可以利用 Node.js 中的流(stream),這篇文章主要為大家詳細介紹了Node.js Streams文件讀寫操作,感興趣的小伙伴們可以參考一下
    2016-07-07

最新評論