2016-11-05 9 views
0

ノード検索モジュールを使用してリモートAPIを呼び出すExpress検索ルータへのポストリクエストを作成しています:ノードフェッチモジュールを使用してエクスプレスルータからJSON応答を取得できません

var fetch = require('node-fetch'); 

router.route('/search') 
    //Performs Job Search 
    .post(function(req, res){ 

     var area = req.body.area; 

     fetch('https://api.indeed.com/ads/apisearch?publisher=*********&l=' + area) 
     .then(function(res) { 
      return res.json(); 
     }).then(function(json) { 
      console.log(json); 
     }); 
    }) 

私はルータを呼び出し、返されたJSONを解析するために、クライアント側の角度1を使用しています:

$scope.search = function(){ 
     $http.post('/api/search', $scope.newSearch).success(function(data){ 
     if(data.state == 'success'){ 
     //perform JSON parsing here 
     } 
     else{ 
     $scope.error_message = data.message; 
     } 
    }); 
    } 

私はちょうどMEANスタックを始めとだけどのように約束の漠然とした考えを持っています作業。だから私の問題は、角度検索機能がリモートAPI呼び出しから返りたいJSON文字列を取得していないことです。しかし、むしろデータパラメータは私のページhtmlに設定されています。最終的に.then()節で設定したブレークポイントがヒットし、私のjsonが返されます。だから私の質問は、彼らが最終的に返されるときにAnguularを使ってJSON値を取得する方法です。

+0

あなたの投稿機能は返信を返しません。 2番目の 'then'文に' res.send(json) 'を入れてはいけませんか? –

+0

私の.post関数にブレークポイントを設定すると、関数の最後に移動してから、関数のいずれかがヒットする前にクライアントに戻ります。最終的に私の.then関数のブレークポイントがヒットして返されますが、私の角度関数がすでに完了していた場所は本当にわかりません。私はあなたのソリューションを試して、私は次のエラーがあります:UnhandledPromiseRejectionWarning:未処理の約束拒否(拒絶id:2):エラー:送信後にヘッダーを設定できません。 –

+0

ああ、すでにそこにres.jsonがあります。したがってres.sendは必要ありません。 –

答えて

0

あなたはこれを試すことができますか?

router.route('/search') 
    //Performs Job Search 
    .post(function(req, res){ 

     var area = req.body.area; 

     fetch('https://api.indeed.com/ads/apisearch?publisher=*********&l=' + area) 
     .then(function(result) { 
      res.json(result); 
      //or possibly res.send(result), depending on what indeed responds with 
     }) 
    }) 
0

は、私は、彼らがログインページにリダイレクトされた検索を実行するときに、ユーザーが認証されなかった場合、代わりにミドルウェアを持っていたことを忘れていたが判明します。だから私は、このログインページではなく、私のJSONのために返されたHTMLの束を得ていた。私がまだこの機能に到達する前にリダイレクトされていた場合、私の検索機能のブレークポイントはいつまでたったのでしょうか?

関連する問題