2017-12-01 18 views
0

私のウェブサイトにYouTube Search APIを実装しています。私のルートからAPIを呼び出すと、結果が返されますが、結果が計算されている間にページがレンダリングされます。非同期動作のためです。私はAPIを呼び出しています、それを通してYouTube検索APIの結果がEJSファイルに表示されない

マイルート:

router.get('/video/results/:search_query', middleware.ensureAuthenticated, function (req, res) { 
 
    query = req.params.search_query; 
 
    console.log(query); 
 
    var dataFinal; 
 
    var resp = youtube.search.list({ 
 
     part: 'snippet', 
 
     q: query, 
 
     type: 'video' 
 
    },function (err, data, response) { 
 
     if (err) { 
 
      console.error('Error: ' + err); 
 
      res.json({ 
 
       status: "error" 
 
      }); 
 
     } 
 
     if (data) { 
 
      // console.log(typeof data); 
 
      dataFinal = data; 
 
      // return res.json({ 
 
      //  status: "ok", 
 
      //  data: data 
 
      // }); 
 

 
      console.log(data); 
 
      //res.render('resultsVideo',{results:data}) 
 
     } 
 
    }); 
 
    res.render('resultsVideo',{data:dataFinal}) 
 

 
});

は、どのように私はAPIを呼び出して表示するために私のEJSファイルに結果を使用することができますを教えてください。

答えて

0

関数コールバックを使用して目的の結果を得ることができます。

router.get('/video/results/:search_query', middleware.ensureAuthenticated, function (req, res) { 
    query = req.params.search_query; 
    console.log(query); 
    var dataFinal; 
    function resp() = youtube.search.list({ 
     part: 'snippet', 
     q: query, 
     type: 'video' 
    },function (err, data, response) { 
     if (err) { 
      console.error('Error: ' + err); 
      res.json({ 
       status: "error" 
      }); 
     } 
     if (data) { 
      // console.log(typeof data); 
      return data; 
      // return res.json({ 
      //  status: "ok", 
      //  data: data 
      // }); 

      console.log(data); 
      //res.render('resultsVideo',{results:data}) 
     } 
    }); 
    res.render('resultsVideo',{data:resp()}) 

}); 
関連する問題