详解在node . js中发起HTTP请求的5种方法

  

创建HTTP请求使现代编程语言的核心功能之一,也是很多程序员在接触到新的开发环境时最先遇到的技术之一。在node . js中有相当多的解决方案,其中有语言内置功能,也有开源社区贡献的开发库。下面咱们来看一下比较流行的几种方式。

  

在开始之前,请先在自己的计算机上安装最新版的node . js和npm。

  


  

  

首先是标准库中默认的HTTP模块。这个模块无需安装依赖外部即可使用,做到了真正的即插即用。缺点是与其他解决方案相比,用起来不是那么友好。

  

下面的代码将向NASA的API发送一个得到请求,并输出当天的天文照片的URL,以及它的注解:

        const https=要求(“https”);      https.get (https://api.nasa.gov/planetary/apod& # 63; api_key=DEMO_KEY,(职责)=比;{   让datahttps://www.yisu.com/zixun/=?//分配一个数据块已经收到。   分别地。(“数据”,(块)=比;{   数据+=块;   });//整个响应已经收到。打印出结果。   分别地。(“结束”,()=比;{   console.log (JSON.parse(数据).explanation);   });      })。(“错误”,(err)=比;{   控制台。日志(“错误:”+ err.message);   });      之前      

HTTP和HTTPS模块提供的大多数功能是相当有限的。你需要以区块为单位接收响应数据,而不是只提供一个回调函数,以便在收到所有数据后就立即执行。如果它是JSON格式你还需要进行手动解析。尽管工作量不大,但是它仍然会带来一些不必要的操作。

  

另一个麻烦是,HTTP和HTTPS协议分属两个模块,因此如果我们使用的API是通过HTTPS协议进行通信,则需要HTTPS模块。

  

如果你不想向代码库中添加太多的依赖项或希望使用其底层的功能,那么可能需要花费更多的精力来获取所需的数据,尽管如此,但是它仍然是一个很好的工具。

  


  

  

请求是一个简化的http客户端,它和Python的请求库很像。这个库比默认的http模块更好,用多年来被开源社区作为开发首选。

  

自从我开始使用节点。js就一直在用,他对快速完成开发任务很有帮助。与http模块不同的是,你必须使用npm来安装它。

  

在终端下进入到你想要代码被下载的目录中,运行以下命令:

        npm安装request@2.81.0      

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

        const请求=要求(“请求”);      请求(https://api.nasa.gov/planetary/apod& # 63; api_key=DEMO_KEY, {json:真},(呃,res,身体)=比;{   如果(err){返回console.log(错);}   console.log (body.url);   console.log (body.explanation);   });      之前      

如果你想要一个使用正常方式处理HTTP请求的苦,那么请求是一个很好的选择。如果你想使用承诺,也可以签出request-promise库。

  


  

  

Axios是一个基于承诺的HTTP客户端,可以用于浏览器和节点。js。在处理需要更复杂的事件链的代码时,使用承诺具有很大的优势。编写异步代码可能会令人困惑,而承诺是这个问题的几种解决方案之一。它们甚至被用在其它语言中,比如迅速。

  

使用npm安装Axios,在终端中输入以下命令:

        npm安装axios@0.16.2      

下面的代码实现相同的功能,得到URL并解释当天的天文学图片。

        const axios=要求(“axios”);      axios.get (https://api.nasa.gov/planetary/apod& # 63; api_key=DEMO_KEY)   不要犹豫(反应=比;{   console.log (response.data.url);   console.log (response.data.explanation);   })   .catch(错误=比;{   console.log(错误);   });      之前      

默认情况下,Axios可以解析JSON响应,非常方便。你也可以看到错误处理是由.catch()完成的,现在我们都在使用承诺。

  

你甚至可以通过axios。所有发起多个并发请求,比如说你想一次性得到两天的天文图片可以这样做:

        var axios=要求(“axios”);      axios.all ([   axios.get (' https://api.nasa.gov/planetary/apod& # 63; api_key=DEMO_KEY&日期=2017-08-03 '),   axios.get (' https://api.nasa.gov/planetary/apod& # 63; api_key=DEMO_KEY&日期=2017-08-02 ')   ))(axios。传播(response1 response2)=比;{   console.log (response1.data.url);   console.log (response2.data.url);   }))。抓住(错误=比;{   console.log(错误);   });      

详解在node . js中发起HTTP请求的5种方法