簡體   English   中英

我可以在一條路由中多次使用npm request並將結果顯示在同一頁面上嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM