如何在 Node.js 中发出 HTTP 请求?
在 REST API 的世界中,发出HTTP请求是现代技术的核心功能。许多开发人员在进入新环境时都会学习它。各种开源库,包括内置HTTP和HTTPS模块的 NodeJS,可用于从 NodeJS 发出网络请求。
有许多方法可以创建不同类型的网络请求。在这里,我们将讨论它们的 4 种不同的方法。
- 使用AXIOS模块
- 使用超级代理
- 使用节点获取模块
- 使用HTTP模块
在这里,我们将请求发送到 https://jsonplaceholder.typicode.com/ API 并显示响应的数据。这是我们所有的 REST API。
Method REST API DetailGET /posts Listing all resources GET /posts/ Getting a resource POST /posts Creating 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
输出:
方法 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
输出:
结论:我个人选择的是axios,不过npm上还有一些其他比较流行的库,看一下:
- 要求
- 得到
- 针