我正在编写一个Alexa技能,可以对Google日历进行API调用,但我的GET请求无效。
var request = require('request');
console.log("Before requests");
request(getUrl, function (error, response, body) {
console.log('error:', error);
console.log('statusCode:', response && response.statusCode);
console.log('body:', body);
});
我使用request
进行http调用,这段代码只是从github page复制,但没有任何内容记录到控制台,所以我不确定如何调试出错的地方。使用像http.get(options, callback)
这样的其他方法产生了相同的结果 - 回调中的任何console.log()都不会被执行。有没有人有任何见解?谢谢!
-
其他一些事情 - 我的console.log("Before requests");
显示,而我的getUrl可能没有正确的api密钥来发出请求,但它仍然应该返回错误而不是根本不工作。
此代码正在通过Amazon Lambda函数(AWS)运行,并且我通过AWS Cloudwatch查看日志。似乎如果我在我的终端node index.js
中运行我的代码,请求就会很好。
-
console.log(request);
输出:
jar: [Function],
[ 'accept',
'accept-charset',
'accept-encoding',
'accept-language',
'accept-ranges',
'cache-control',
'content-encoding',
'content-language',
'content-location',
'content-md5',
'content-range',
'content-type',
'connection',
'date',
'expect',
'max-forwards',
'pragma',
'referer',
'te',
'user-agent',
'via' ],
defaultProxyHeaderExclusiveList: [ 'proxy-authorization' ] },
initParams: [Function: initParams],
debug: [Getter/Setter]
编辑:
我所要做的只是将我的要求包含在一个承诺中,事后来看,这对我来说是显而易见的。 它是这样的:
var request = require('request');
console.log("Before requests");
return new Promise((res,rej) => {
// getUrl is the the url and returns the data when entered into my browser
request(getUrl, function (error, response, body) {
resolve(body);
});
});
答案 0 :(得分:3)
想出来 - 在进行API调用后,我直接转到this.emit(:tell, ".....");
,有效地完成了程序,然后才允许API响应返回。我必须将我的API调用包装在一个承诺中,以确保它在告诉Alexa响应之前运行。
答案 1 :(得分:0)
这可行吗?
var options = {
url: $link, //paste your link here
method: 'GET'//or POST or whatever you want
};
request(options, function(error, response, body) {
console.log(body);
});