我正在尝试抓取某些网站,但是由于某种原因,它可以在Express本地(本地主机)运行,但是当我将其部署到Lambda时却不能。尝试使用ff serverless-http和aws-serverless-express和serverless-express插件。还尝试在axios和superagent之间切换。
路由工作正常,经过数小时的研究,我将问题缩小为fetch / axios位。当我不向axios / superagent / etc添加超时时,该应用程序将继续运行并以15/30秒的时间超时,以设置为准,并显示错误50 *。
service: scrape
provider:
name: aws
runtime: nodejs10.x
stage: dev
region: us-east-2
memorySize: 128
timeout: 15
plugins:
- serverless-plugin-typescript
- serverless-express
functions:
app:
handler: src/server.handler
events:
- http:
path: /
method: ANY
cors: true
- http:
path: /{proxy+}
method: ANY
cors: true
protected async fetchHtml(uri: string): Promise<CheerioStatic | null> {
const htmlElement = await Axios.get(uri, { timeout: 5000 });
if(htmlElement.status === 200) {
const $ = Cheerio.load(htmlElement && htmlElement.data || '');
$('script').remove();
return $;
}
return null;
}
答案 0 :(得分:0)
据我所知,axios的默认超时是不确定的。请记住,API网关具有29秒超时的硬限制。
我最近也遇到过同样的问题,有时超时是由于冷启动。因此,基本上我必须在前端react应用程序中为api调用添加重试逻辑。