Есть ли способ использовать «запрос» модуля узла несколько раз в одном маршруте и отображать результаты на одной и той же отображаемой странице шаблона ejs?
Цель: я хочу отображать информацию об электронных книгах из iTunes Store, используя их API поиска. Прямо сейчас я могу получить цену электронной книги на одной территории, но я хотел бы отображать цены на одну и ту же электронную книгу в нескольких странах. Чтобы получить каждую разную цену, мне нужно использовать другой URL-адрес, либо окончание по умолчанию, «&country=gb», «&country=fr» и т. д. Я могу получить цены для каждой из 5 интересующих меня стран, но я могу не получить их все на той же странице. Как я могу построить свой маршрут и подготовить свои переменные, чтобы я мог отображать информацию из всех этих стран при отображении одной страницы?
Я использую узел, экспресс и ejs, и я делаю http-запрос, используя модуль узла «запрос». Вот основы формы, которую я использую, где я ввожу ISBN в поле searchTerm. (Есть еще, но он громоздкий.)
<form action="/search">
<select name="searchTerm">
Работающий сейчас код для получения информации о книге на одной территории:
app.get('/search', function(req, res){
var searchRequest = req.query.searchTerm;
var searchURL = "http://itunes.apple.com/lookup?isbn=" + searchRequest;
request(searchURL, function(error, response, body){
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
console.log(data.results[0]);
var iTunesResults = data.results[0];
res.render("test", {
iTunesResults: iTunesResults,
searchRequest: searchRequest
});
}
});
});
Если я внесу несколько изменений в этот код, я смогу получить информацию о той же электронной книге в другой стране, внеся всего несколько изменений. Ниже приведен код для Великобритании, и он работает сам по себе, я просто хочу, чтобы результаты обоих этих поисков отображались одновременно, и я не знаю, с чего начать.
app.get('/search', function(req, res){
var searchRequest = req.query.searchTerm;
var gbSearchURL = "http://itunes.apple.com/lookup?isbn=" + searchRequest + "&country=gb";
request(gbSearchURL, function(error, response, body){
if (!error && response.statusCode == 200) {
var data = JSON.parse(body);
console.log(data.results[0]);
var iTunesResults = data.results[0];
res.render("test", {
iTunesResults: iTunesResults,
searchRequest: searchRequest
});
}
});
});
Что я хочу сделать, так это сделать дополнительный запрос в Apple, используя тот же поисковый запрос здесь, но добавив идентификатор страны в конец searchURL, который я передаю в request. Однако, если я попытаюсь снова вызвать запрос и сразу передать все переменные результатов в res.render, результат первого запроса не будет доступен во втором запросе («ReferenceError: iTunesResults не определен»)
Я предполагаю, что есть способ получить массив searchURL и массив результатов (req.query.searchTerm), тогда я могу передать массив или более сложный объект при отображении шаблона test.ejs. Ограничен ли одним HTTP-запросом на маршрут app.get? (Простите меня, если это должно быть очевидно, но я просто хочу получить эту информацию о ценах и отобразить ее рядом друг с другом. Кроме того, я подумал, что в моем вопросе было бы лучше быть подробным.)