node.js中的REST客户端

时间:2016-08-09 13:31:15

标签: javascript node.js rest sdk unirest

我对node.js相当陌生,我试图建立一个简单的node.js REST客户端,作为API和更大的应用程序之间的SDK。

这是与index.js对应的客户端SDK部分中的当前代码:

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

如果我在终端中执行:node index.js console.log命令返回API调用的预期结果

但是,如果我在主项目中安装软件包(作为本地依赖项),它似乎不起作用。

以下是主项目中index.js的代码:

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

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

在这种情况下,当我执行node index.js console.log命令返回undefined变量的result时,我怀疑这是由于GET调用SDK是异步的,因此它会在响应之前返回值。

我不确定如何解决这个问题,有什么建议吗?

或者它也可以作为SDK在node.js中作为REST API客户端的一个很好的例子(即,作为一个能够从另一个项目安装的包)。

1 个答案:

答案 0 :(得分:1)

你的最不合适的电话应该在你的let myURLString = "https://en.wiktionary.org/wiki/see" if let url = NSURL(string: myURLString), html = try? String(contentsOfURL: url) { print(html) } 方法中。

由于呼叫是异步的,因此您只能module.exports.getProducts。你需要某种回调。

return

然后你就这样使用它:

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

阅读How do I return the response from an asynchronous call?以获取异步JavaScript的其他替代方法。