如何从动态数量的URL中获取响应,并组合来自所有这些URL的JSON响应



目前我有一个小的JSON文件的URL的列表来获取数据,这个数量可以在任何时候改变,所以我已经建立了一个小的函数从URL的请求和记录JSON响应从他们每个人,但目前我需要结合所有他们的响应,并发送它们在res.json格式。

app.post('/api/:db/find', async (req, res) => {
try {
const db = req.params.db;
databases.find({}, function(err, docs) {
for (const val of docs) {
var url = val.url + "/" + db + "/findmany"
axios.post(url, req.body)
.then(function(response) {
var o1 = response.data
var obj = Object.assign(o1);
console.log(obj)
//res.json(obj.data);
})
.catch(function(error) {
console.log(error)
res.json({ success: false });
});
}
});
} catch {
console.log(error)
res.json({ success: false });
}
});

我想代码应该是这样的(伪代码)

app.post('/api/:db/find', async (req, res) => {
try {
const db = req.params.db;
dynamic(var)object
databases.find({}, function(err, docs) {
for (const val of docs) {
var url = val.url + "/" + db + "/findmany"
axios.post(url, req.body)
.then(function(response) {
add(response) to (var) object
})
.catch(function(error) {
console.log(error)
res.json({ success: false });
});
}
when function is finished (console.log[(var)]) with added JSON from all of the requests
});
} catch {
console.log(error)
res.json({ success: false });
}
});

我已经看到了解决方案,其中现有的JSON数据被覆盖,如果响应和JSON对象具有相同的值,我想避免这种情况。

我已经尝试将响应数据存储在var内,但如果var内的数据和响应具有相同的值,则会被覆盖。

我也试过把它们分别加在一起,但是那会产生很多数组,我不想那样。

如何组合收到的json响应完全取决于响应json的信息内容。您可以组合如下所示的响应,或者根据实际的响应编写自定义逻辑来组合json并发送结果。

app.post('/api/:db/find', async (req, res) => {
try {
const db = req.params.db;
const JsonAggreagate = []
databases.find({}, async function(err, docs) {
try {
for (const val of docs) {
var url = val.url + "/" + db + "/findmany"
let result = await axios.post(url, req.body)
//LOGIC FOR COMBINING JSON RESPONSES
JsonAggreagate.push({url: url, result : result})
}    
} catch (error) {
console.log(error)
res.json({ success: false });
}    

//when function is finished (console.log[(var)]) with added JSON from all of the requests
res.json({ success: true, result : JsonAggreagate});
});
} catch {
console.log(error)
res.json({ success: false });
}
});

最新更新