如何从多个url页面Node.js获取json数据?

如何从多个url页面Node.js获取json数据?,node.js,Node.js,我是Node.js的新手,以前从未使用过json数据,所以我真的希望您能帮助我 我试图从Ticketmaster的API获取所有事件信息,并向mongoDB添加特定变量。但是,我目前使用的API每页仅限于200个事件。因此,我不可能将活动信息与场馆信息连接起来,因为这些信息单独添加到mongoDB中,并且不包括所有活动和场馆信息(由于缺少活动和场馆数据,无法在ids上连接) 因此,我的问题是如何一次将所有页面放入数据库 到目前为止,我编写的代码如下所示: app.get('/tm',(req,

我是Node.js的新手,以前从未使用过json数据,所以我真的希望您能帮助我

我试图从Ticketmaster的API获取所有事件信息,并向mongoDB添加特定变量。但是,我目前使用的API每页仅限于200个事件。因此,我不可能将活动信息与场馆信息连接起来,因为这些信息单独添加到mongoDB中,并且不包括所有活动和场馆信息(由于缺少活动和场馆数据,无法在ids上连接)

因此,我的问题是如何一次将所有页面放入数据库

到目前为止,我编写的代码如下所示:

app.get('/tm',(req,res)=>{
axios//获取场地
.get('https://app.ticketmaster.com/discovery/v2/venues.json?apikey=myApiKey&page=0&size=200&countryCode=DK')
。然后(响应=>{
const venuesToBeInserted=response.data.\u embedded.victions.map(场馆=>{//准备场馆
返回{
sourceID:vention.id,
地点:地点。名称,
postalCode:地点。postalCode,
城市:地点。城市。名称,
国家:地点。国家。名称,
国家代码:地点。国家。国家代码,
地址:!!vention.address?vention.address.line1:null,
经度:!!地点.位置?地点.位置.经度:空,
纬度:!!地点位置?地点位置纬度:空,
资料来源:“ticketmaster”
}
})
//一次创建所有场地
创建(venuesToBeInserted)。然后(venues=>{
控制台日志(“插入的场地”)
axios//获取事件和显示-注意api链接中的页面参数
.get('https://app.ticketmaster.com/discovery/v2/events.json?apikey=myApiKey&countryCode=DK&size=200&page=0')
。然后(响应=>{
const eventsToBeInserted=response.data.\u embedded.events.map(events=>{//preparing events
const event=events.\u embedded.attractions[0]
返回{
sourceID:event.id,
名称:event.name,
slug:slugify(event.name).toLowerCase(),
标记:!!event.classifications?[event.classifications[0]。genre.name,event.classifications[0]。subGenre.nam]:[],//出现重复的流派
//ticketmaster中可能的标记:类型和子类型
}
})
//一次创建所有事件
创建(eventsToBeInserted)。然后(events=>{
console.log(“插入的事件”)
const showsToBeInserted=response.data.\u embedded.events.map(show=>{
const event=events.find(event=>event.sourceID==show.\u embedded.attractions[0].id);
const-vention=ventions.find(vention=>vention.sourceID==show.\u-embedded.ventions[0].id);
如果(!!活动和地点){
返回{
事件:事件。\u id,
地点:地点,
时区:show.dates.timezone,
dateStart:!!show.dates.start.dateTime?show.dates.start.dateTime:show.dates.start.localDate,
门票:!!show.priceRanges{
minPrice:show.priceRanges[0]。最小,
maxPrice:show.priceRanges[0]。最大,
货币:显示。价格范围[0]。货币
}: {} 
}
}
})
//让我们看看我们在数据库中创建了什么
查找({})。选择({
姓名:1,,
鼻涕虫:-1
}).limit(10)。填充('event')。填充('vention')。然后(events=>{
console.log(util.inspect(events));
}).catch(错误=>{
控制台错误(err);
});
}).catch(错误=>{
控制台错误(err)
})
}).catch(错误=>{
控制台错误(err)
})
}).catch(错误=>{
控制台错误(err)
});
}).catch(错误=>{
控制台错误(err)
})

})
您可以使用已经在使用的承诺来实现这一点,您只需要使用递归将它们链接在一起

function getVenues(page, size, venues) {
    page = page || 0;
    size = size || 200;
    venues = venues || [];
    return axios
        .get(`https://app.ticketmaster.com/discovery/v2/venues.json?apikey=myApiKey&page=${page}&size=${size}&countryCode=DK`)
        .then(response => response.data._embedded.venues)
        .then(rawVenues => {
            rawVenues.forEach(venue => venues.push(venue));
            if (rawVenues.length < size) {
                // All done return the compiled list.
                return venues;
            }
            // Recurse over the next set of venues by adding another promise to the chain.
            return getVenues(page + 1, size, venues);
        });
}

function getEvents(page, size, events) {
    page = page || 0;
    size = size || 200;
    events = events || [];
    return axios
        .get(`https://app.ticketmaster.com/discovery/v2/events.json?apikey=myApiKey&countryCode=DK&size=${size}&page=${page}`)
        .then(response => response.data._embedded.events)
        .then(rawEvents => {
            rawEvents.forEach(event => events.push(event));
            if (rawEvents.length < size) {
                // All done return the compiled list.
                return events;
            }
            // Recurse over the next set of events by adding another promise to the chain.
            return getEvents(page + 1, size, events);
        });
}

app.get('/tm', (req, res) => {
    getVenues().then(rawVenues => {

        const venuesToBeInserted = rawVenues.map(venue => {
            return {
                sourceID: venue.id,
                venue: venue.name,
                postalCode: venue.postalCode,
                city: venue.city.name,
                country: venue.country.name,
                countryCode: venue.country.countryCode,
                address: !!venue.address ? venue.address.line1 : null,
                longitude: !!venue.location ? venue.location.longitude : null,
                latitude: !!venue.location ? venue.location.latitude : null,
                source: 'ticketmaster'
            };
        });

        // Return promise so errors bubble up the chain...
        return Venue.create(venuesToBeInserted).then(venues => {
            console.log("venues inserted");

            // Return promise so errors bubble up the chain...
            return getEvents().then(rawEvents => {

                const eventsToBeInserted = rawEvents.map(rawEvent => {
                    const event = events._embedded.attractions[0];
                    return {
                        sourceID: event.id,
                        name: event.name,
                        slug: slugify(event.name).toLowerCase(),
                        tags: !!event.classifications ? [event.classifications[0].genre.name, event.classifications[0].subGenre.nam] : []
                    };
                });

                // Return promise so errors bubble up the chain...
                return Event.create(eventsToBeInserted).then(events => {
                    console.log("events inserted");

                    const showsToBeInserted = rawEvents.map(show => {
                        const event = events.find(event => event.sourceID == show._embedded.attractions[0].id);
                        const venue = venues.find(venue => venue.sourceID == show._embedded.venues[0].id);

                        if (!!event && !!venue) {
                            return {
                                event: event._id,
                                venue: venue._id,
                                timezone: show.dates.timezone,
                                dateStart: !!show.dates.start.dateTime ? show.dates.start.dateTime : show.dates.start.localDate,
                                tickets: !!show.priceRanges ? {
                                    minPrice: show.priceRanges[0].min,
                                    maxPrice: show.priceRanges[0].max,
                                    currency: show.priceRanges[0].currency
                                } : {}
                            }
                        }
                    });

                    // Do something with the found shows...
                });
            });
        });
    }).then(() => { // This then is fired after all of the promises above have resolved...
        return Venue.find({}).select({
            name: 1,
            slug: -1
        }).limit(10).populate('event').populate('venue').then(events => {
            console.log(util.inspect(events));
            res.send(events);
        });
    }).catch(err => { // Catches any error during execution.
        console.error(err);
        res.status(500).send(err);
    });;
});
功能获取场馆(页面、大小、场馆){
第页=第0页;
尺寸=尺寸| | 200;
场馆=场馆| |[];
返回轴
.得到(`https://app.ticketmaster.com/discovery/v2/venues.json?apikey=myApiKey&page=${page}&size=${size}&countryCode=DK`)
.then(response=>response.data.\u embedded.viouses)
。然后(RAW=>{
rawVinces.forEach(场馆=>Vinces.push(场馆));
如果(长度<尺寸){
//所有完成返回编译后的列表。
返回场馆;
}
//通过向链中添加另一个承诺,在下一组场地上递归。
返回场馆(第+1页,大小,场馆);
});
}
函数getEvents(页面、大小、事件){
第页=第0页;
尺寸=尺寸| | 200;
事件=事件| |[];
返回轴
.得到(`https://app.ticketmaster.com/discovery/v2/events.json?apikey=myApiKey&countryCode=DK&size=${size}&page=${page}`)
.then(response=>response.data.\u embedded.events)
。然后(rawEvents=>{
rawEvents.forEach(event=>events.push(event));
if(rawEvents.length<大小){
//所有完成返回编译后的列表。
返回事件;
}
//通过向链中添加另一个承诺来递归下一组事件。
返回getEvents(第+1页,大小,事件);
});
}
app.get('/tm',(请求,res)=>{
GetVinces()。然后(RawVinces=>{
const venuesToBeInserted=RAW场馆图(场馆=>{
返回{
sourceID:vention.id,
地点:地点。名称,