[英]How can I merge results from multiple REST endpoints?
我是快递新手。
我正在创建一个新的 API 端点,它正在从其他两个公开可用的端点获取数据。 一旦我从两个 API 中获得 JSON,我将根据一些规则将它们合并。
let result1, result2;
// API 1
let data1;
app.get("/test1", (req, res, next) => {
axios.get("https://www.EXAMPLE.com/api/endpoint_A")
.then((response) => {
res.json(response.data)
data1 = response.data;
});
});
// API 2
let data2;
app.get("/test2", (req, res, next) => {
axios.get("https://www.EXAMPLE.com/api/endpoint_B")
.then((response) => {
res.json(response.data)
data2 = response.data;
});
});
console.log(data1); //output is undefined
console.log(data2); //output is undefined
我可以在浏览器和 Postman 中看到成功调用的结果。
我的问题是,我找不到一种方法来操纵每个端点的结果。 我曾尝试在then
中存储这样的result1 = response.data
但它是undefined
。 一旦我可以访问每个响应的 output,那么我必须合并它们。 但是访问axios
调用之外的结果似乎更加困难。 我不必使用axios
。
我也试过这个,但没有奏效。
// API 1
const data1 = app.get("/test1", (req, res, next) => {
axios.get("https://www.EXAMPLE.com/api/endpoint_A")
.then((response) => res.json(response.data));
});
console.log(data1); //output is undefined
据我所知,api 调用之间的数据不会持续存在。 您可以将其组合成一个端点。
//Both apis into one endpoint app.get('/test', (req, res, next) => { const promiseArr = [axios.get('https://www.EXAMPLE.com/api/endpoint_A'), axios.get('https://www.EXAMPLE.com/api/endpoint_B')]; Promise.all(promiseArr).then(responses => { const resultsFromEndpointA = responses[0]; const resultsFromEndpointB = responses[1]; //do what you want with your results here... for example.. return res.status(200).json({resultsFromEndpointA, resultsFromEndpointB}); //or do something like load them into a session req.session.results = {resultsFromEndpointA, resultsFromEndpointB}; next(); }).catch(err => { console.log(err); }); };
如果您从两个端点获取具有相同属性的对象数组,请执行此操作;
let results = [];
// API 1
app.get("/test1", (req, res, next) => {
axios
.get(
"https://www.EXAMPLE.com/api/endpoint_A"
)
.then((response) => {
results.push(response.data);
});
});
// API 2
app.get("/test2", (req, res, next) => {
axios
.get(
"https://www.EXAMPLE.com/api/endpoint_B"
)
.then((response) => {
results.push(response.data);
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.