Я пытаюсь выполнить 5 вызовов API на одном маршруте и передать данные в один файл представления.
API (только изменение - параметр цепочки):
https://testardor.jelurida.com/nxt?requestType=getBalance&chain=1&account=ARDOR-XJRL-GPRK-QRUS-C73SE
https://testardor.jelurida.com/nxt?requestType=getBalance&chain=2&account=ARDOR-XJRL-GPRK-QRUS-C73SE
https://testardor.jelurida.com/nxt?requestType=getBalance&chain=3&account=ARDOR-XJRL-GPRK-QRUS-C73SE
https://testardor.jelurida.com/nxt?requestType=getBalance&chain=4&account=ARDOR-XJRL-GPRK-QRUS-C73SE
https://testardor.jelurida.com/nxt?requestType=getBalance&chain=5&account=ARDOR-XJRL-GPRK-QRUS-C73SE
Я выполнил руководство, чтобы заставить работать 2 вызова API, но не могу определить 3+.
var express = require("express");
var app = express();
var request = require("request");
var bodyParser = require("body-parser");
app.use(bodyParser.urlencoded({extended:true}));
app.set("view engine", "ejs");
app.get("/", function(req, res){
res.render("home");
});
var Ardor = {
url: "https://testardor.jelurida.com/nxt?requestType=getBalance&chain=1&account=ARDOR-9P55-NZTA-ME3E-DBZE4"
};
var Ignis = {
url: "https://testardor.jelurida.com/nxt?requestType=getBalance&chain=2&account=ARDOR-9P55-NZTA-ME3E-DBZE4"
};
app.get("/results", function(req, res){
function callback(error, response, body){
if (!error && response.statusCode == 200){
var data = JSON.parse(body);
request(Ignis, (error, response, body) => {
if (!error && response.statusCode == 200){
var data2 = JSON.parse(body);
res.render("resultsAccountId", {data1: data, data2: data2});
}
});
}
}
request(Ardor, callback);
});
app.listen(process.env.PORT, process.env.IP, function(){
console.info("Blockchain Explorer has started!");
});
Как я могу заставить эту работу работать, чтобы все переменные data1, data2, data3, data4, data5 передавались на одну страницу просмотра?





Что ж, есть несколько способов сделать это, один из них - использовать модуль запроса-обещания, который является расширенным модулем запроса только в качестве обещания, поэтому мы можем использовать ожидание, чтобы дождаться, пока обещание завершит сбор данных запроса.
Заменить модуль request на request-promise
Этот
var request = require("request");
для этого
var request = require('request-promise')
Результат:
Добавьте асинхронность в запрос, чтобы можно было ожидать всех обещаний. Я создал для 5 запросов на получение, изменив значение цепочки с 1 до 5, получив данные в json и добавив их в список. Запоминание конечного результата - это список объектов, которые могут быть отображены или доступны с помощью data [0], data [1], data [2] ... data [4].
var express = require("express");
var app = express();
var bodyParser = require("body-parser");
var request = require('request-promise')
var path = require('path');
app.use(bodyParser.urlencoded({extended:true}));
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')
app.get("/", function(req, res){
res.render("home");
});
app.get("/results", async function(req, res){
const data = [];
for(let chain=1; chain<6; chain++){
let val = await request({
method: 'get',
uri: `https://testardor.jelurida.com/nxt?requestType=getBalance&chain=${chain}&account=ARDOR-9P55-NZTA-ME3E-DBZE4`,
json: true
})
data.push(val);
}
//res.send(data)
res.render('resultsAccountId',{data})
});
app.listen(process.env.PORT, process.env.IP, function(){
console.info("Blockchain Explorer has started!");
});
данные [0]
{ unconfirmedBalanceNQT: '771177340000',
balanceNQT: '771177340000',
requestProcessingTime: 0
}
Если возможно, примите ответ как лучший. Выберите закладку слева от ответа.