繁体   English   中英

如何合并来自多个 REST 端点的结果?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM