当前位置: 首页 > 知识库问答 >
问题:

NextJS/vercel-504错误“函数调用超时”

华懿轩
2023-03-14

在部署到vercel后,我的一个页面上出现了这个错误,在开发模式下一切正常。

我认为问题可能是我的fetch/API之一,因为它使用第一个fetch请求中的数据作为第二个fetch请求的URL。。。

我的所有其他页面都有不同的API/获取请求,可以正常工作。。。

export const fetchData = async (page) => {
  try {
    const req = await fetch(
      "https://www.productpage.com/new/" +
        page
    );
    const html = await req.text();
    const $ = cheerio.load(html);

    let newProducts = [];

    for (let i = 1; i < 25; i++) {
      let name = $(`#product_listing > tbody > #_${i} > td:nth-child(2) > a`)
        .text()
        .replace(/\n/g, "");
      let pageSrc = $(
        `#product_listing > tbody > #_${i} > td:nth-child(2) > a`
      ).attr("href");
      const price = $(`#product_listing > tbody >#_${i} > td.price.notranslate`)
        .text()
        .replace(/\n/g, "");

      pageSrc = "https://www.productpage.com" + pageSrc;

      const req2 = await fetch(pageSrc); // here it is using data from first fetch for a 2nd request..
      const html2 = await req2.text();
      const $2 = cheerio.load(html2);

      const imageSrc = $2(
        "#product-main-image .main-image-inner:first-child img"
      ).attr("src");
      const name2 = $2("#product-details dd:nth-child(2)")
        .text()
        .replace(/\n/g, "");
      const brand = $2("#product-details dd:nth-child(4)")
        .text()
        .replace(/\n/g, "");

      newProducts.push({
        name: name,
        name2: name2,
        brand: brand,
        pageSrc: pageSrc,
        price: price,
        imageSrc: imageSrc,
      });
    }

    return newProducts;
  } catch (err) {}
};

module.exports = {
  fetchData,
};

共有1个答案

仲俊豪
2023-03-14

此错误表明API响应的响应时间太长。

将Vercel与业余爱好计划一起使用时,无服务器API路由只能处理5秒钟。这意味着在5秒后,路由会以504网关超时错误进行响应。

使用next dev在本地运行时,这些限制不适用。

要解决这个问题,您需要减少API路由响应所需的时间,或者升级Vercel计划。

 类似资料:
  • 我试图在Vercel上部署我的NextJS应用程序,但构建总是失败,错误为,即使NextJS应用程序已成功构建。我已经联系了Vercel支持部门,但他们只能在我公开我的存储库时帮助我,不幸的是,这不是一个选项。我已经向他们提供了整个项目的ZIP文件,但他们没有接受。 我在这里发布这篇文章,希望有人知道是什么导致了这个错误。任何想法都非常感谢。 编辑:这里有一个重现错误的回购:https://git

  • 我开始使用nextjs和Vercel部署构建一个API。安装非常简单,只需在下创建文件即可。例如,创建endpoint,,我有: 这很好,但我希望API的版本如下:,,等等。 如果我能基于git提交标签创建一个新版本就更好了。也就是说,当我合并到分支时,Vercel要么部署到当前的生产环境(例如v1 env),要么如果有新的git标记,它部署到新的生产环境(例如v2 env)。部署后,两个生产环境

  • null 我们得出的结论是,客户端可以连接到Nginx,但是Nginx在将请求重定向到FPM(可以通过端口7777访问)时没有收到响应,并显示超时错误。我们一直致力于解决Nginx和FPM之间的通信问题,但几个小时后,我们还没有找到解决方案。 注意:这个问题在我们设置的四个虚拟机中重复出现。 Nginx错误日志(注意:主机名和ip已被取消) 文件:/etc/nginx/fastcgi_params

  • 问题内容: 我正在Python中调用一个函数,该函数可能会停滞并迫使我重新启动脚本。 如何调用该函数或将其包装在其中,以便如果花费的时间超过5秒,脚本将取消该函数并执行其他操作? 问题答案: 如果在上运行,则可以使用信号包: 调用后10秒钟,将调用处理程序。这引发了一个异常,你可以从常规Python代码中拦截该异常。 该模块不能很好地与线程配合使用(但是,谁可以呢?) 请注意,由于发生超时时会引发

  • 从HttpClient PostAsJsonAsync方法获取响应时遇到问题。我正在将StringContent数据传递给POST请求,但它返回禁止的(403)状态代码。 当我尝试添加默认请求头(注释的代码行)时,错误发生了变化,并返回超时问题: {系统。网。http://http.WinHttpExcture(0x80072EE2):操作在System.运行时。ExceptionServices

  • 我正在尝试编译以下C代码(另存为example4.cpp) 此代码给出以下错误: example4.cpp:在函数'Conconexpr double nth(double, int)':example4.cpp:24: 9: error:调用非Conconexpr函数'std::basic_ostream 谁能推荐一下吗? 谢谢你。