[英]Can I use npm request multiple times in one route and have the results display on the same page?
有沒有一種方法可以在一條路由中多次使用節點模塊“請求”,並使結果顯示在同一渲染的ejs模板頁面上?
目標:我想使用他們的Search API顯示來自iTunes Store的電子書信息。 現在,我可以在一個地區獲得電子書的價格,但我想顯示多個國家/地區的同一本電子書的價格。 要獲得每個不同的價格,我需要使用不同的URL,或者使用默認的結尾“&country = gb”,“&country = fr”等。我可以獲取我感興趣的5個國家/地區中每個國家的價格,但是我可以不能將它們全部放在同一頁面上。 如何繪制路線並准備變量,以便在呈現一頁時可以顯示所有這些國家/地區的信息?
我正在使用node,express和ejs,並且正在使用“請求”節點模塊發出http請求。 這是我正在使用的表單的基礎,我在searchTerm字段中輸入了ISBN。 (還有更多,但體積很大。)
<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
});
}
});
});
我想要做的是向蘋果發出額外的請求,在這里使用相同的搜索詞,但在我傳遞給請求的searchURL的末尾添加國家/地區標識符。 但是,如果我嘗試再次調用請求並將所有結果變量一次傳遞到res.render中,則第一個請求的結果將在第二個請求中不可用。(“ ReferenceError:未定義iTunesResults”)
我猜想有一種方法可以擁有一個searchURL數組和一個結果數組(req.query.searchTerm),然后在渲染test.ejs模板時可以傳遞該數組或更復雜的對象。 每個app.get路由限於一個http請求嗎? (請原諒我,如果這應該很明顯,但我只想獲取此定價信息,並將其彼此相鄰顯示。另外,我認為在我的問題中進行詳細說明會更好。)
好! 我使用“異步”節點庫解決了該問題。 http://www.github.com/caolan/async
這樣,我可以並行調用多個函數,完成后,我可以將結果傳遞回模板進行渲染。
app.get('/search', function(req, res){
async.parallel([
function(done){
var searchRequest = req.query.searchTerm;
var gbSearchURL = "http://itunes.apple.com/lookup?isbn=" + searchRequest + "&country=us";
request(gbSearchURL, function(error, response, body){
if (!error && response.statusCode == 200) {
// console.log(body)
var data = JSON.parse(body);
// below shows whole object of result 0
console.log(data.results[0]);
done(null, data.results[0]);
}
});
},
// UK pricing
function(done){
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) {
// console.log(body)
var data = JSON.parse(body);
// below shows whole object of result 0
console.log(data.results[0]);
done(null, data.results[0]);
}
});
},function(err, iTunesResults){
res.render("test", {
iTunesResults: iTunesResults,
searchRequest: req.query.searchTerm
});
})
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.