如何在 Node.js/Express.js 中从服务器端本身连续调用 API?
调用 API 端点是现代互联网技术的核心功能。通常,我们从浏览器调用 API。有时我们需要从服务器本身调用 API 端点来获取数据、加载依赖项等。
有多种方法可以从 NodeJS 服务器本身调用 API,具体取决于您要使用的抽象级别。从 NodeJS 服务器调用 API 的最简单方法是使用 Axios 库。
项目设置:创建一个 NodeJS 项目并使用以下命令对其进行初始化。
mkdir Project && cd Project
npm init -y
模块安装:使用以下命令安装所需的模块,即ExpressJS和Axios 。
npm i express axios
现在在项目的根文件夹中创建一个 JS 文件并将其命名为index.js
1. 发出 HTTP GET 请求:在index.js文件中编写以下代码。
index.js
const express = require('express')
const axios = require('axios')
const app = express()
// Post ID tracker
var num = 0
setInterval(() => {
// Increment post tracker
num++
console.log('Wait for 2 second...')
// Make GET Request on every 2 second
axios.get(
`https://jsonplaceholder.typicode.com/posts/${num}`)
// Print data
.then(response => {
const { id, title } = response.data
console.log(`Post ${id}: ${title}\n`)
})
// Print error message if occur
.catch(error => console.log(
'Error to fetch data\n'))
}, 2000)
index.js
const express = require('express')
const axios = require('axios')
const app = express()
// Dummy database
const posts = [
{
title: 'Headline 1',
id: 1,
body: `sint suscipit perspiciatis velit dolorum
rerum ipsa laboriosam odio`,
userId: 1
},
{
title: 'Headline 2',
id: 2,
body: "fugit voluptas sed molestias voluptatem provident",
userId: 1
},
{
title: 'Headline 3',
id: 3,
body: "voluptate et itaque vero tempora molestiae",
userId: 1
}
]
// Loop over the posts
posts.forEach(post => {
// Post data to API endpoint
axios.post('https://jsonplaceholder.typicode.com/posts/', {
body: post,
})
// Print response
.then(response => {
const { id, title } = response.data.body
console.log(`Post ${id}: ${title}`)
})
// Print error message if occur
.catch(error => console.log(error))
})
说明:在上面的例子中,NodeJS 每隔 2 秒调用一次 API 来获取数据。如果 promise 被解决,那么块将被执行并打印数据。如果一个 Promise 被拒绝, catch块将被执行并打印一个错误消息。
使用以下命令运行服务器:
node index.js
输出:
2. 发出 HTTP POST 请求:在index.js文件中写下以下代码。
index.js
const express = require('express')
const axios = require('axios')
const app = express()
// Dummy database
const posts = [
{
title: 'Headline 1',
id: 1,
body: `sint suscipit perspiciatis velit dolorum
rerum ipsa laboriosam odio`,
userId: 1
},
{
title: 'Headline 2',
id: 2,
body: "fugit voluptas sed molestias voluptatem provident",
userId: 1
},
{
title: 'Headline 3',
id: 3,
body: "voluptate et itaque vero tempora molestiae",
userId: 1
}
]
// Loop over the posts
posts.forEach(post => {
// Post data to API endpoint
axios.post('https://jsonplaceholder.typicode.com/posts/', {
body: post,
})
// Print response
.then(response => {
const { id, title } = response.data.body
console.log(`Post ${id}: ${title}`)
})
// Print error message if occur
.catch(error => console.log(error))
})
说明:在上面的示例中,我们创建了虚拟用户数据。 NodeJS 发出 POST 请求以将这些数据发送到 API 端点并打印响应的数据或错误消息。
使用以下命令运行服务器:
node index.js
输出: