Node.js请求承诺结合来自2个链接的JSON API数据?

问题描述

const express = require('express');
const app     = express();
const path    = require('path');
const config  = require('./config.json');
const moment = require('moment');

const request = require('request-promise');

url = 'https://ne.api.site',url2 = 'https://n2.api.site',app.set('view engine','pug');
app.use(express.static(path.join(__dirname,'public')));

async function getApi(){
  return request({
        url : url,url2 : url2
    });

}


/* Routes */
app.get('/',async (req,res) => {
  let api = await getApi();
  let json = await JSON.parse(api);
  res.render('home',{ api: json,moment: require('moment')});
});


app.listen(4800,() => console.log('Express listening on port 4800'));

我正在尝试结合2个json api url(来自它们的数据),似乎无法弄清楚该怎么做。我需要创建一个数组吗?如果可以,怎么办?因此,我试图将来自不同网址(由于区域不同)的数据全部组合到一个可以访问的主页上。

解决方法

您绝对不应再使用request-promise,因为请求承诺所依赖的请求模块已经deprecated。现在,回答您的问题。.假设您将superagent用作http请求模块,则可以执行以下操作:

const request = require('superagent');
const moment = require('moment');

app.get('/',async (req,res) => {
  // responses will be an array of the resolved responses of the two calls
  const responses = await getApi();           
  res.render('home',{ api: responses,moment: moment() });
});

function requestApis() {
 return Promise.all([request.get(url),request.get(url2)]);
}