📜  如何使用 ExpressJS 获取多个请求?(1)

📅  最后修改于: 2023-12-03 14:51:52.436000             🧑  作者: Mango

如何使用 ExpressJS 获取多个请求?

在使用 ExpressJS 进行 Web 开发时,通常需要获取多个请求的数据,比如获取数据库中多条记录,或者获取多个 API 接口。下面将介绍如何使用 ExpressJS 获取多个请求。

使用 Promise

Promise 是一种异步编程的解决方案,它可以避免回调地狱的问题,并且可以方便地进行多个请求的并发处理。在 ExpressJS 中,可以使用 Promise 来获取多个请求的数据。

const express = require('express');
const axios = require('axios');
const app = express();

app.get('/data', (req, res) => {
  Promise.all([
    axios.get('https://api.example.com/1'),
    axios.get('https://api.example.com/2'),
  ]).then(([response1, response2]) => {
    res.json({
      data1: response1.data,
      data2: response2.data,
    });
  }).catch(error => {
    res.json({ error: true });
  });
});

app.listen(3000, () => console.log('Server started'));

上面的代码中,首先定义了 /data 路由,然后使用 Promise.all() 方法并发地请求 https://api.example.com/1https://api.example.com/2 接口。当两个请求都完成后,使用解构赋值的方式将它们的响应数据传递给 .then() 方法中的回调函数,并将其返回给客户端。

如果其中任何一个请求失败,会被 Promise.all() 捕获到,并调用 .catch() 方法中的回调函数,将错误信息返回给客户端。

使用 async/await

除了使用 Promise 外,还可以使用 async/await 来进行多个请求的并发处理。async/await 是一种基于 Promise 的更高级别的异步编程方式,它可以将异步代码转化为同步代码的形式,更易于理解和维护。

const express = require('express');
const axios = require('axios');
const app = express();

app.get('/data', async (req, res) => {
  try {
    const [response1, response2] = await Promise.all([
      axios.get('https://api.example.com/1'),
      axios.get('https://api.example.com/2'),
    ]);
    res.json({
      data1: response1.data,
      data2: response2.data,
    });
  } catch (error) {
    res.json({ error: true });
  }
});

app.listen(3000, () => console.log('Server started'));

上面的代码中,定义了一个 async 的回调函数,然后在函数内使用 await 关键字等待两个请求的响应,在两个请求都完成后将它们的响应结果赋值给常量 response1response2,然后将其返回给客户端。

如果其中任何一个请求失败,会被 try ... catch 块捕获到,并将错误信息返回给客户端。

总结

在 ExpressJS 中,可以使用 Promise 和 async/await 两种方式来获取多个请求的数据。使用 Promise 需要手动管理并发,而使用 async/await 可以让异步代码更加直观和易于理解。根据具体的业务需求选择合适的方式进行处理即可。