Я пытаюсь вызвать несколько внешних API внутри цикла for, но в результате я получаю только одну итерацию из цикла for, отправляя ответ обратно.
Да, это не правильный подход для обработки запросов multi api, пожалуйста, предложите лучший подход, так как он должен быть последовательным req / res
Первый запрос - позвоните, чтобы найти соответствующий API.Ответ содержит данные для подачи в два API-интерфейса, которые вызываются в цикле for.
Второй запрос API для цикла - передает данные в третий запрос API.
var express = require('express');
var bodyParser = require('body-parser');
var Request = require("request");
var app = express();
app.use(bodyParser.json());
app.post('/building/', function (req, res) {
'use strict';
var myObject = null;
var callSiteApi = {
uri: 'http://localhost:8080/site/',
body: JSON.stringify(req.body),
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
// First External API Call
Request(callSiteApi, function (error, response) {
if (error) {
console.log('ERROR with user request.');
return response.sendStatus(500); // Return back that an error occurred
} else {
// Get data from response.body
var materialquerystring = "mat="+response.body.material+"&date="+response.body.date;
var floor = response.body.floor;
for (var i = 0; i < floor.length; i++) {
matereialValueURL = "http://localhost:8080/material/q="+materialquerystring;
// Second External API Call within for loop
Request.get(materialValueURL, (error, response, body) => {
if (error) {
console.log(req.error);
}
materialObject = JSON.parse(body);
var valuequerystring = "value="+materialObject.value;
// do somehting with materialObject
console.log("first request iteration =" + i);
sitevalueURL = "http://localhost:8080/value/q="+valuequerystring;
// Third External API Call within for loop
Request.get(sitevalueURL, (error, response, body) => {
if (error) {
logger.debug('[' + pid + '] ' + req.error);
//return console.dir(error);
}
valueObject = JSON.parse(body);
console.log("second request iteration =" + i);
// do somehting with valueObject 7 materialObject
var a = materialObject.a;
var b = valueObject.b;
var c = a+b;
});
});
}
res.writeHead(200, {
'Content-Type': 'application/json'
});
res.end('{"value-1":"a","value-2":"b","value-3":"c","material":"materialquerystring","value":"valuequerystring"}');
}
});
});