📜  如何在 Node.js/Express.js 中从服务器端本身连续调用 API?

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

如何在 Node.js/Express.js 中从服务器端本身连续调用 API?

调用 API 端点是现代互联网技术的核心功能。通常,我们从浏览器调用 API。有时我们需要从服务器本身调用 API 端点来获取数据、加载依赖项等。

有多种方法可以从 NodeJS 服务器本身调用 API,具体取决于您要使用的抽象级别。从 NodeJS 服务器调用 API 的最简单方法是使用 Axios 库。

项目设置:创建一个 NodeJS 项目并使用以下命令对其进行初始化。

mkdir Project && cd Project
npm init -y

模块安装:使用以下命令安装所需的模块,即ExpressJSAxios

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 

输出: