如何使5个API获取请求并将数据传递到一个视图?

时间:2018-11-30 05:32:37

标签: node.js express

我试图在一条路由中进行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个以上的API。

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 :(得分:3)

有几种方法可以做到这一点,其中一种是使用request-promise模块,该模块只是一个广泛的请求模块,作为一个Promise,因此我们可以使用wait来等待Promise完成收集请求数据。

  

request-promise

通过request更改request-promise模块

var request = require("request");

为此

var request = require('request-promise')

结果:

向请求添加异步,以便您可以期待所有承诺。通过将链的值从1更改为5,并在json中获取数据并将其添加到列表中,我为5个get请求创建了一个for。记住最终结果是可以通过数据[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 
}