📜  如何在 Node.js 中发出 HTTP 请求?

📅  最后修改于: 2022-05-13 01:56:25.793000             🧑  作者: Mango

如何在 Node.js 中发出 HTTP 请求?

在 REST API 的世界中,发出HTTP请求是现代技术的核心功能。许多开发人员在进入新环境时都会学习它。各种开源库,包括内置HTTPHTTPS模块的 NodeJS,可用于从 NodeJS 发出网络请求。

有许多方法可以创建不同类型的网络请求。在这里,我们将讨论它们的 4 种不同的方法。

  1. 使用AXIOS模块
  2. 使用超级代理
  3. 使用节点获取模块
  4. 使用HTTP模块

在这里,我们将请求发送到 https://jsonplaceholder.typicode.com/ API 并显示响应的数据。这是我们所有的 REST API。

Method

REST API

Detail

GET/postsListing all resources
GET/posts/Getting a resource
POST/postsCreating a resource
PUT/posts/Updating a resource

设置新项目:要创建新项目,请在终端中输入以下命令。

mkdir test
npm init -y

项目结构:它将如下所示。

项目目录

方法 1:在这种方法中,我们将发送请求以使用 AXIOS 库获取资源。 Axios 是一个基于 Promise 的 NodeJS HTTP 客户端。您也可以在浏览器中使用它。在处理像网络请求这样的异步代码时,使用 Promise 是一个很大的优势。

安装模块:

npm i axios

创建index.js并记下以下代码。

index.js
const axios = require('axios')
  
// Make request
axios.get('https://jsonplaceholder.typicode.com/posts/1')
  
  // Show response data
  .then(res => console.log(res.data))
  .catch(err => console.log(err))


index.js
const superagent = require('superagent');
  
// promise with async/await
(async () => {
  
    // Data to be sent
    const data = {
        title: 'foo',
        body: 'bar',
        userId: 1,
    }
  
    try {
  
        // Make request
        const {body} = await superagent.post(
  'https://jsonplaceholder.typicode.com/posts')
                             .send(data)       
        // Show response data
        console.log(body)
    } catch (err) {
        console.error(err)
    }
  })();


index.js
const fetch = require('node-fetch');
  
// Propmise then/catch block
// Make request
fetch('https://jsonplaceholder.typicode.com/posts/1', {
  method: 'PUT',
  body: JSON.stringify({
    id: 1,
    title: 'fun',
    body: 'bar',
    userId: 1,
  }),
  headers: {
    'Content-type': 'application/json; charset=UTF-8',
  },
})
  // Parse JSON data
  .then((response) => response.json())
  
  // Showing response
  .then((json) => console.log(json))
  .catch(err => console.log(err))


index.js
// Importing https module
const http = require('http');
  
// Setting the configuration for
// the request
const options = {
    hostname: 'jsonplaceholder.typicode.com',
    path: '/posts',
    method: 'GET'
};
    
// Sending the request
const req = http.request(options, (res) => {
    let data = ''
     
    res.on('data', (chunk) => {
        data += chunk;
    });
    
    // Ending the response 
    res.on('end', () => {
        console.log('Body:', JSON.parse(data))
    });
       
}).on("error", (err) => {
    console.log("Error: ", err)
}).end()


运行应用程序的步骤:打开终端并编写以下命令。

node index.js

输出:

axios 请求响应

方法 2:这里我们将请求使用 SuperAgent 库创建资源。这是另一个在浏览器中发出网络请求的流行库,但也适用于 Node.js。

安装模块:

npm i superagent

使用以下代码重写index.js

index.js

const superagent = require('superagent');
  
// promise with async/await
(async () => {
  
    // Data to be sent
    const data = {
        title: 'foo',
        body: 'bar',
        userId: 1,
    }
  
    try {
  
        // Make request
        const {body} = await superagent.post(
  'https://jsonplaceholder.typicode.com/posts')
                             .send(data)       
        // Show response data
        console.log(body)
    } catch (err) {
        console.error(err)
    }
  })();

运行应用程序的步骤:打开终端并编写以下命令。

node index.js

输出:

超级代理请求响应

方法 3:这里我们将使用 node-fetch 库发送更新资源的请求。如果您已经在浏览器中使用过Fetch ,那么它可能是您的 NodeJS 服务器的不错选择。

安装模块:

npm i node-fetch

使用以下代码重写index.js

index.js

const fetch = require('node-fetch');
  
// Propmise then/catch block
// Make request
fetch('https://jsonplaceholder.typicode.com/posts/1', {
  method: 'PUT',
  body: JSON.stringify({
    id: 1,
    title: 'fun',
    body: 'bar',
    userId: 1,
  }),
  headers: {
    'Content-type': 'application/json; charset=UTF-8',
  },
})
  // Parse JSON data
  .then((response) => response.json())
  
  // Showing response
  .then((json) => console.log(json))
  .catch(err => console.log(err))

运行应用程序的步骤:打开终端并编写以下命令。

node index.js

输出:

节点获取请求响应

方法 4:这里我们将使用 HTTP 模块发送请求以获取所有资源。 NodeJS 内置了HTTP模块来发出网络请求。但缺点是,它不像其他解决方案那样用户友好。您需要在收到数据后手动解析数据。

安装模块:为内置模块,无需安装。即插即用。

使用以下代码重写index.js

index.js

// Importing https module
const http = require('http');
  
// Setting the configuration for
// the request
const options = {
    hostname: 'jsonplaceholder.typicode.com',
    path: '/posts',
    method: 'GET'
};
    
// Sending the request
const req = http.request(options, (res) => {
    let data = ''
     
    res.on('data', (chunk) => {
        data += chunk;
    });
    
    // Ending the response 
    res.on('end', () => {
        console.log('Body:', JSON.parse(data))
    });
       
}).on("error", (err) => {
    console.log("Error: ", err)
}).end()

运行应用程序的步骤:打开终端并编写以下命令。

node index.js

输出:

http请求响应

结论:我个人选择的是axios,不过npm上还有一些其他比较流行的库,看一下:

  • 要求
  • 得到