Axios获取请求在本地工作,但在无服务器上超时

时间:2019-12-27 06:13:22

标签: express http web-scraping aws-lambda serverless

我正在尝试抓取某些网站,但是由于某种原因,它可以在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;
    }

1 个答案:

答案 0 :(得分:0)

据我所知,axios的默认超时是不确定的。请记住,API网关具有29秒超时的硬限制。

我最近也遇到过同样的问题,有时超时是由于冷启动。因此,基本上我必须在前端react应用程序中为api调用添加重试逻辑。