📅  最后修改于: 2023-12-03 14:51:52.436000             🧑  作者: Mango
在使用 ExpressJS 进行 Web 开发时,通常需要获取多个请求的数据,比如获取数据库中多条记录,或者获取多个 API 接口。下面将介绍如何使用 ExpressJS 获取多个请求。
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/1
和 https://api.example.com/2
接口。当两个请求都完成后,使用解构赋值的方式将它们的响应数据传递给 .then()
方法中的回调函数,并将其返回给客户端。
如果其中任何一个请求失败,会被 Promise.all()
捕获到,并调用 .catch()
方法中的回调函数,将错误信息返回给客户端。
除了使用 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
关键字等待两个请求的响应,在两个请求都完成后将它们的响应结果赋值给常量 response1
和 response2
,然后将其返回给客户端。
如果其中任何一个请求失败,会被 try ... catch
块捕获到,并将错误信息返回给客户端。
在 ExpressJS 中,可以使用 Promise 和 async/await 两种方式来获取多个请求的数据。使用 Promise 需要手动管理并发,而使用 async/await 可以让异步代码更加直观和易于理解。根据具体的业务需求选择合适的方式进行处理即可。