Node.js Axios在特定API的AWS Lambda上始终超时
描述问题 我不确定这是否是Axios的问题。以下代码在我的本地开发机器上成功运行,但每当我从云端(例如AWS Lambda)运行它时总是超时。在repl.it上运行时也会发生同样的情况 我可以确认AWS Lambda可以访问互联网,并且它适用于任何其他API,但以下情况除外: 示例代码 环境 Axios版本:0.19.2 运行时:nodejs12x 更新1 我尝试了本机require'https',它在本地主机和云服务器上都超时了。请在此处找到示例代码: 同样,我可以确认相同的代码可以在任何其他API上工作 更新2 我怀疑这是服务器端的问题,因为它在curl中的行为也非常奇怪 来自本地的curl->403访问被拒绝 使用用户代理标题->成功从本地卷取 来自云服务器的curl->403访问被拒绝Node.js Axios在特定API的AWS Lambda上始终超时,node.js,axios,Node.js,Axios,描述问题 我不确定这是否是Axios的问题。以下代码在我的本地开发机器上成功运行,但每当我从云端(例如AWS Lambda)运行它时总是超时。在repl.it上运行时也会发生同样的情况 我可以确认AWS Lambda可以访问互联网,并且它适用于任何其他API,但以下情况除外: 示例代码 环境 Axios版本:0.19.2 运行时:nodejs12x 更新1 我尝试了本机require'https',它在本地主机和云服务器上都超时了。请在此处找到示例代码: 同样,我可以确认相同的代码可以在任何其他
它必须是服务器端验证,与AkamaiGHost相关。正如Akshay所建议的,您可以使用try-and-catch块来获取错误。也许这对你有帮助 您是否为异步调用配置了错误处理 要配置错误处理,请执行以下步骤: 打开Lambda控制台 选择一个函数 在异步调用下,选择编辑 配置以下设置 最长事件期限–Lambda在异步事件队列中保留事件的最长时间,最长为6小时 重试次数–函数返回错误时Lambda重试的次数,介于0和2之间 选择保存 axios是浏览器和node.js中唯一一个基于Promise的HTTP客户端,当您设置timeout:10000时,我相信超时问题不会就此结束 虽然你的API 在浏览器和呈现JSON数据方面工作正常 默认情况下,lambda的函数超时是15分钟,我相信这对于响应来说已经足够了。可能还有另一个问题。 确保您已经按照文档中的建议设置了其他配置,如权限等。
您可以检查AWS lambda的默认限制。根据Akshay的建议,您可以使用try-and-catch块获取错误。也许这对你有帮助 您是否为异步调用配置了错误处理 要配置错误处理,请执行以下步骤: 打开Lambda控制台 选择一个函数 在异步调用下,选择编辑 配置以下设置 最长事件期限–Lambda在异步事件队列中保留事件的最长时间,最长为6小时 重试次数–函数返回错误时Lambda重试的次数,介于0和2之间 选择保存 axios是浏览器和node.js中唯一一个基于Promise的HTTP客户端,当您设置timeout:10000时,我相信超时问题不会就此结束 虽然你的API 在浏览器和呈现JSON数据方面工作正常 默认情况下,lambda的函数超时是15分钟,我相信这对于响应来说已经足够了。可能还有另一个问题。 确保您已经按照文档中的建议设置了其他配置,如权限等。
您可以检查AWS lambda的默认限制。您应该尝试将axios调用包装到try/catch中,这样可能会发现问题
const axios = require('axios');
const handler = async () => {
try {
const url = 'https://www.target.com.au/ws-api/v1/target/products/search?category=W95362';
const response = await axios.get(url, { timeout: 10000 });
console.log(typeof (response));
console.log(response);
} catch (e) {
console.log(e, "error api call");
}
}
handler();
您应该尝试将axios调用包装到try/catch中,这可能会解决问题
const axios = require('axios');
const handler = async () => {
try {
const url = 'https://www.target.com.au/ws-api/v1/target/products/search?category=W95362';
const response = await axios.get(url, { timeout: 10000 });
console.log(typeof (response));
console.log(response);
} catch (e) {
console.log(e, "error api call");
}
}
handler();
您可能已将Lambda功能放置在VPC中,而无法访问外部世界的Internet。尝试检查lambda配置中的VPC部分,并相应地设置一个internet网关您可能已将lambda功能放置在一个无法访问外部世界的VPC中。尝试检查lambda配置中的VPC部分,并相应地设置internet网关谢谢Akshey。我已经用try/catch更新了repl.it脚本。错误只是说10000毫秒内超时。我用更多的发现更新了这个问题。这似乎是服务器端的问题,与AkamaiGHost有关。谢谢Akshey。我已经用try/catch更新了repl.it脚本。错误只是说10000毫秒内超时。我用更多的发现更新了这个问题。这似乎是服务器端的问题,与AkamaiGHost有关。谢谢你的建议。我用更多的发现更新了这个问题。这似乎是服务器端的问题。我已经看过关于AkamaiGHost的几个主题,但似乎还没有解决办法。嗨,Deep。谢谢你的建议。我用更多的发现更新了这个问题。这似乎是服务器端的问题。我已经看过关于AkamaiGHost的几个主题,但似乎还没有解决办法。我也看到了这种行为。捕获是没有帮助的,因为承诺永远不会兑现。我将超时设置为900,但它没有完成。我也看到了
这种行为。捕获是没有帮助的,因为承诺永远不会兑现。我将超时设置为900,但未完成。+1如果要检查代码中是否有问题,请先将功能移出VPC(如果在VPC中),然后测试Axios是否在Lambda控制台上工作。+1如果要检查代码中是否有问题,如果在VPC中,只需先将您的功能移出VPC,然后测试Axios是否在Lambda控制台上工作即可。
const axios = require('axios');
const handler = async () => {
try {
const url = 'https://www.target.com.au/ws-api/v1/target/products/search?category=W95362';
const response = await axios.get(url, { timeout: 10000 });
console.log(typeof (response));
console.log(response);
} catch (e) {
console.log(e, "error api call");
}
}
handler();