我试图在一条路由中进行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都传递到一个视图页面?
答案 0 :(得分:3)
有几种方法可以做到这一点,其中一种是使用request-promise模块,该模块只是一个广泛的请求模块,作为一个Promise,因此我们可以使用wait来等待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
}