我对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客户端的一个很好的例子(即,作为一个能够从另一个项目安装的包)。
答案 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的其他替代方法。