Как заставить 5 API получать запросы и передавать данные в одно представление? - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь сделать 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.log("Blockchain Explorer has started!"); 
});

Как я могу заставить эту работу работать, чтобы у меня были переменные data1, data2, data3, data4, data5все перешли на одну страницу просмотра?

1 Ответ

0 голосов
/ 30 ноября 2018

Что ж, есть несколько способов сделать это, один из них - использовать модуль запроса-обещания, который является расширенным модулем запроса только в качестве обещания, поэтому мы можем использовать ожидание, пока обещание завершит сбор данных запроса.

запрос-обещание

Изменить модуль request на request-promise

This

var request = require("request");

для этого

var request = require('request-promise')

Результат:

Добавьте асинхронный запрос, чтобы можно было ожидать всех обещаний.Я создал запрос for для 5 get, изменив значение цепочки с 1 на 5, получив данные в формате json и добавив их в список.Запоминанием конечного результата является список объектов, которые могут быть отображены или доступны с помощью данных [0], данных [1], данных [2] ... данных [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.log("Blockchain Explorer has started!"); 
});

данных [0]

{ unconfirmedBalanceNQT: '771177340000',
  balanceNQT: '771177340000',
  requestProcessingTime: 0 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...