2017-02-09 11 views
1

ここでノードJSの学習曲線にスラミングしています。私はノードJS Expressに別のAPIへのPOSTを要求するアプリケーションを持っています。通話は正常に行われ、コンソールログには正しいデータが戻ってくることが示されます。私の問題は、request.post(...)からその応答を取得し、要求を行っているメソッドでそれを使用する方法です。ノードJSでPOST応答データにアクセスする囲みメソッドでエクスプレスリクエスト

ここに私のシナリオがあります。外部アプリケーションが自分のAPIを呼び出します。私のAPIは、更新をチェックするためのデータを得るために別のAPIを呼び出さなければなりません。 (外部アプリケーションからのPOST要求に応答するためにPOSTリクエストを行うAPIを持っています)

これはAPIのメソッドで、サードパーティにデータを要求します。このPOSTレスポンスからデータを取得する必要があります。外部アプリケーションのPOSTリクエストに対するレスポンスで返す前に、そのレスポンスで何かを行う必要があります。

exports.getUpdates = function(variable1, variable2, variable3) { 
    request.post(
     'http://myurl.exp/api//getUpdates', 
     {json: {var1: variable1, ...}}, 
     function (error, response, body) { 
      if(!error && response.statusCode == 200) { 
      console.log(body); 
      } else {console.log(error);} 
     } 
    ); 
    <I need to have this method return the response to the controller that called this method> 
}; 

私は例をたくさん見てきましたが、彼らはすべてちょうど私はそれがコールバックに関係している推測hate.I'mし成長してるにconsole.log()を言うとどのように私は扱っていませんよそれは正しく、しかし私の研究のどれも私に明確な方法を示していません コールバックを処理します。どんな助けもありがとうございます。この関数を呼び出している間

+0

[非同期呼び出しからの応答を返すにはどうすればよいですか?](http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-非同期呼び出し) – peteb

答えて

1
コールバック

exports.getUpdates = function(variable1, variable2, variable3, callback) { 
    request.post(
     'http://myurl.exp/api//getUpdates', 
     {json: {var1: variable1, ...}}, 
     function (error, response, body) { 
      if(!error && response.statusCode == 200) { 
      callback(error, response, body); 
      } else {console.log(error);} 
     } 
    ); 
}; 

メイクの使用は今、あなたはコールバックを渡すことができます:

getUpdates(var1, var2, var3, function(error, response, body) { 
    //stuff that you want to perform after you get response or error 
}); 

をしかし、私はこれを行うにはクリーンな方法を提案:

exports.getUpdates = function(variable1, variable2, variable3, callback) { 
    request.post('http://myurl.exp/api//getUpdates', 
        {json: {var1: variable1, ...}}, callback); 
}; 

今度はこの関数を呼び出しながらコールバックを渡すことができます:

getUpdates(var1, var2, var3, function(error, response, body) { 
     if(!error && response.statusCode == 200) { 
      // stuff you want to do 
     } else { 
      console.log(error); 
     } 
    } 
}); 
+0

ありがとう、それは私が必要としていたものでした、それは美しく働いた。私が最後にしたのは、あなたが元の応答にコールバック本体を割り当てて示したものでした。 exports.getUpdates =関数(REQ、RES){ event.getUpdates( req.body.var1、 req.body.var2、 req.body.var3、 関数(エラー:元のリクエストルートハンドラで – RBradley49

+0

、応答、本体){ 場合(エラー&& response.statusCodeの== 200){ res.json(本体);! }他{ にconsole.log(エラー);} }}; – RBradley49

+0

せよコントローラ: exports.getUpdates = function(variable1、variable2、variable3、callback){ request.post( 'http://myurl.exp/api//getUpdates'、 {json:{var1:variable1、...}}、コールバック); }; JSONを外部アプリに返しました。これは動作していることを示しています。実際のコードを取得できるようになりました。ありがとうサンデッシュ! – RBradley49

関連する問題