2016-08-09 15 views
0

Ich bin relativ neu zu node.js und ich versuche, eine einfache node.js REST-Client als ein SDK zwischen einer API und einer größeren Anwendung zu handeln.REST-Client in node.js

Dies ist der aktuelle Code im Teil Client SDK index.js entspricht:

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; 
      } 
    }); 

Wenn ich im Terminal auszuführen: node index.js der console.log Befehl gibt das erwartete Ergebnis aus dem API-Aufruf

Jedoch, wenn Ich installiere das Paket im Hauptprojekt (als lokale Abhängigkeit) scheint es nicht zu funktionieren.

Hier ist der Code aus dem index.js im Hauptprojekt:

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

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

In diesem Fall, wenn ich node index.js die console.log Befehl gibt undefined für die result Variable ausführen, vermute ich dies aufgrund der Anruf GET in Da das SDK asynchron ist, gibt es den Wert zurück, bevor eine Antwort vorliegt.

Ich bin mir nicht sicher, wie das zu beheben, irgendwelche Vorschläge?

Alternativ wäre es auch für mich ein gutes Beispiel für einen REST-API-Client in node.js als SDK (d. H. Als ein Paket, das von einem anderen Projekt installiert werden kann).

Antwort

1

Ihr aufrichtiger Anruf sollte wirklich in Ihrer module.exports.getProducts Methode sein.

Da der Anruf asynchron ist, können Sie nicht einfach return von ihm. Sie benötigen eine Art Rückruf.

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); 
     }); 
}; 

Sie würden dann verwenden, etwa so:

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

lesen How do I return the response from an asynchronous call? für andere Alternativen JavaScript asynchron.

Verwandte Themen