我一直在尝试在Node.js端点中使用http模块来执行简单的http获取操作。
我按照我的意图执行了各种教程,但是在cloudwatch日志中使用getaddrinfo ENOTFOUND仍然会失败。
似乎我正在正确地准备url,如果我只是将url输出剪切并通过浏览器,则会得到预期的响应,并且它只是通过端口80的普通http。
我怀疑Alexa托管的lambda可能没有获得对非Amazon Web服务进行远程调用的必要权限,但是我不确定这一点。
有人可以照亮吗?仅供参考,这是我的lambda中的代码:
var http = require('http');
function httpGet(address, zip, zillowid) {
const pathval = 'www.zillow.com/webservice/GetSearchResults.htm' + `?zws-id=${zillowid}` + `&address=${encodeURIComponent(address)}&citystatezip=${zip}`;
console.log ("pathval =" + pathval);
return new Promise(((resolve, reject) => {
var options = {
host: pathval,
port: 80,
method: 'GET',
};
const request = http.request(options, (response) => {
response.setEncoding('utf8');
console.log("options are" + options);
let returnData = '';
response.on('data', (chunk) => {
returnData += chunk;
});
response.on('end', () => {
resolve(JSON.parse(returnData));
});
response.on('error', (error) => {
console.log("I see there was an error, which is " + error);
reject(error);
});
});
request.end();
}));
}
答案 0 :(得分:0)
host: pathval
是对Node.js http
module的错误使用。您需要提供主机名和路径+查询字符串作为两个不同的选项。
正确用法的示例:
host: 'example.com',
path: '/webservice/GetSearchResults.htm?zws-id=...',
(当然,这些可以是变量,为清楚起见,它们不必是此处显示的文字。)
发生错误是因为您将整个URL视为主机名,因此不存在。
我怀疑Alexa托管的lambda可能没有必要的权限来进行对非Amazon Web服务的远程调用
对于Lambda函数中可以与之联系的服务没有任何限制(除了可以防止将垃圾邮件直接发送到随机邮件服务器的过滤器之外)。