javascript - Node.js 中的 REST 客户端

标签 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.jsconsole.log 命令将返回 API 调用的预期结果

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

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

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

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

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

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

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

最佳答案

您的 unirest 调用实际上应该位于您的 module.exports.getProducts 方法内。

由于调用是异步的,您不能只是从中返回。您需要某种回调。

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 的其他替代方案。

关于javascript - Node.js 中的 REST 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38852233/

相关文章:

javascript - ng-switch 在 ng-repeat AngularJS 中不起作用

node.js - 鼠标操作在 Protractor 中无法正常工作

javascript - 字符串化 JSON 内部对象的最佳实践

mysql - REST API、OAuth2 和身份验证错误

java - 缓存 REST 方法

javascript - 在没有商店的组合框中添加一个值

javascript - IE浏览器的Angular JS中绑定(bind)样式值

javascript - 航点删除类

node.js - Node 的 fs.writeFile 不会覆盖以前的内容

javascript - .html() 中 href 的 jQuery 选择器