2016-08-09 7 views
0

私はnode.jsをかなり使い慣れており、単純なnode.js RESTクライアントをAPIとより大きなアプリケーションの間でSDKとして動作させようとしています。node.jsのRESTクライアント

これはindex.jsに対応するクライアントSDKの一部で、現在のコードです:console.logコマンドは、APIの呼び出し

から期待される結果を返すnode index.js場合は:私はターミナルで実行した場合

var unirest = require('unirest'); 
var config = require('config'); 

var host = config.get('api.host'); 

unirest.get(host + '/api/products?_format=json') 
    .headers({'Accept': 'application/json', 'Content-Type': 'application/json'}) 
    .end(function (response) { 
      console.log(response.body); 
      module.exports.getProducts = function() { 
       return response.body; 
      } 
    }); 

私は主なプロジェクト(ローカル依存として)にパッケージをインストールしても動作しないようです。ここで

メインプロジェクトにindex.jsからのコードです:私はnode index.jsconsole.logコマンド返しますresult変数のundefinedを実行したときに、私はこれがでGET呼び出しによるものである疑いがある、この場合、

var SDK = require('api-sdk-js'); 

var result = SDK.getProducts; 
console.log(result); 

SDKは非同期であるため、応答がある前に値を返します。

これを修正する方法がわかりません。

また、node.jsのREST APIクライアントの良い例として、SDKとして(つまり別のプロジェクトからインストールできるパッケージとして)私の役に立つ例があります。

答えて

1

あなたの最初のコールは実際にmodule.exports.getProductsメソッド内にあるはずです。

コールが非同期であるため、returnからの呼び出しはできません。何らかのコールバックが必要です。非同期JavaScriptに他の選択肢を

var SDK = require('./api-sdk-js'); 
SDK.getProducts(function(products) { 
    console.log(products); // Should contain data from the callback 
}); 

読むHow do I return the response from an asynchronous call?:あなたはそのようにようにそれを使用したい

module.exports.getProducts = function(callback) { 
    unirest.get(host + '/api/products?_format=json') 
     .headers({'Accept': 'application/json', 'Content-Type': 'application/json'}) 
     .end(function (response) { 
      callback(response.body); 
     }); 
};