node.js 中的 REST 客户端

REST client in node.js

我是 node.js 的新手,我正在尝试制作一个简单的 node.js REST 客户端作为 API 和更大应用程序之间的 SDK。

这是当前客户端SDK部分对应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;
            }
    });

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

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

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

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

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

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

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

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

你的 unirest 调用真的应该在你的 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);
        }); 
};

然后您可以像这样使用它:

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? 了解异步的其他替代方案 JavaScript。